Cómo empezó
Cuando me mudé a Francia tuve que rearmar mi oficina en casa. Para el escritorio opté por una marca local: kqueo. Supuse que, en el mejor de los casos, era un producto local, y en el peor, una remarca genérica para la cual podrÃan proveerme repuestos si hiciera falta. Elegà este modelo: dos motores, una caja de control central y un panel con 3 botones para posición de memoria, subir, bajar y M (para guardar posiciones), más un display de 3 dÃgitos.
Hace unos meses noté que el panel, que la mayor parte del tiempo está apagado salvo que se lo despierte, no se despertaba ni movÃa el escritorio. El soporte técnico me mandó un reemplazo enseguida solo con mi número de serie, eso estuvo buenÃsimo, y acá es donde empieza la diversión.
Al enchufar el panel nuevo, inmediatamente mostró la posición real del escritorio y parecÃa recordar mis alturas memorizadas. Esto significa que la mayor parte de la lógica está en la caja y, por lo tanto, yo podrÃa construir una unidad de control alternativa comandada por voz.
Un poco de forense sobre el roto
El panel se ve, desde afuera, prácticamente igual a cualquier otro panel del mercado.

KQUEO control panel
Por dentro es bastante distinto

KQUEO control panel board front

KQUEO control panel board back
Los componentes relevantes de esto son:
- MC96F8208s, un microcontrolador CMOS de 8 bits en un solo chip con conversor A/D de 12 bits
- 74HC595D, un registro de desplazamiento de 8 bits con entrada serie y salida serie o paralela con latches de salida
- Un display de 3 dÃgitos de 7 segmentos y 11 pines, completamente genérico; el pinout de todos los que están a la venta parece ser el mismo.
La principal diferencia con todos los otros modelos a los que la gente les hizo algún nivel de ingenierÃa inversa es que este tiene solo 4 cables.
- VCC (5v)
- GND
- Tx
- Rx
Un poco de forense sobre el que funciona.
En ese momento no sabÃa muy bien qué eran TX y RX. Le pregunté a un amigo que resulta ser ingeniero en electrónica y experto en el tema (hace consultorÃa, no duden en contratarlo :p). Me orientó hacia un dispositivo que podÃa usar para interceptar lo que el panel hablaba con la caja de control, junto con el software apropiado.

Logic Analyzer

Breadboard wiring for logic analyzer

Breadboard wiring for logic analyzer

Breadboard wiring for logic analyzer
Pasé un rato subiendo y bajando el escritorio mientras mis perros me miraban bastante confundidos, capturando la conversación con Saleae Logic 2
No tenÃa idea de qué protocolo usaba exactamente esta conexión, asà que directamente adiviné basándome en el hecho de que los dos pines de datos del cable están conectados a los pines 6 y 7 del MCU, que son TXD(SCL)/RXD(SDA) respectivamente.
Saleae permite pasar la señal capturada por varios analizadores incorporados; el correcto terminó siendo UART a 57600 Bits/s, serie asincrónico de 8 bits.
Dándole sentido a los datos capturados.
Capturé una buena cantidad de datos:
Ahora bien, para darle sentido a estos datos, necesitaba saber qué hace la placa.
Algunos datos:
- El display de 3 dÃgitos es un modelo de cátodo común; los pines 12, 9 y 8 deben ir a masa para encender los dÃgitos 1, 2 y 3 respectivamente
- Los pines 12, 9 y 8 están conectados a AN10, AN8 y AN9 del MCU respectivamente a través de un diodo.
- El registro de desplazamiento es controlado directamente por el MCU; recibe 8 bits en serie, luego un reset de clk y envÃa los datos (creo)
- Las letras usadas para el pinout del LCD son las comunes
A-Gy.para representar los segmentos de un dÃgito, tal como se muestra en este gráfico de wikipedia

LCD Pinout
Continuará
Suponiendo que mapeé el circuito correctamente y que entendà bien el protocolo, la única pieza que falta es mapear los mensajes del gist a los bits enviados a la pantalla LCD.
Actualmente estoy tratando de mapear la última lÃnea del gist:
0xE4,0xF7,0x00,0x00,0x00,0x00,0x55,0x10,0x98,0x00,0x00,0x01,0x53,0x61
Para que de alguna manera produzca:
0x22,0x22,CB para enviar al registro de desplazamiento