Vista general del hardware
El controlador gestiona la calibración de baseline internamente y reporta qué canales están activos vía el registro de estado.
Inicialización táctil
Al arranque (zerokey-setup.cpp), el firmware:
- Prueba el TS06 en
0x69con hasta 5 reintentos (separados 20 ms). - Si lo detecta, escribe la sensibilidad mínima (
0x3F) en los registros0x00–0x02. - Configura el modo de operación vía registros
0x05–0x06. - Pone
ts06_ok = true— si no se encuentra el controlador, el táctil queda deshabilitado y el log serie muestra"TS06 not found on I2C".
Ciclo de polling
El métodohandleButtonChecker() corre en el bucle principal:
- Lee
STATUS_REGISTER(0x25) víareadRegister()por I²C. - Para cada bit de canal:
- Registra
pressStartTimecuando un canal se vuelve activo por primera vez. - Aplica un debounce de 80 ms (
DEBOUNCE_MS) — las liberaciones más cortas que esto se ignoran. - Aplica un lockout de canal de 150 ms (
CHANNEL_LOCKOUT_MS) — tocar un pad distinto mientras hay uno activo se ignora.
- Registra
- Al soltar:
- Si se mantuvo >
LONG_PRESS_THRESHOLD(800 ms) → dispatcha el handler de pulsación larga. - En otro caso → dispatcha el handler de pulsación corta.
- Si se mantuvo >
Mapeo de gestos
Feedback visual de pulsación larga
Cuando una pulsación larga está en progreso,drawLongPressProgress() renderiza una barra de progreso que se va llenando en el OLED. Esto da al usuario confirmación visual de que debe seguir manteniendo. Soltar antes de los 800 ms cancela la acción.
Controles en la pantalla de PIN
En la pantalla de entrada de PIN, los controles cambian:Manejo de errores
- Si el TS06 no se detecta al arranque,
ts06_okse pone afalsey la lectura del registro de estado devuelve0x00— efectivamente deshabilitando la entrada táctil. - El firmware no muestra una pantalla de error táctil; en su lugar, el log serie reporta el problema para debug.
- El táctil se deshabilita silenciosamente durante los delays de lockout (
waitFromEeprom()) y durante operaciones largas como el borrado de credenciales.
El TS06 opera independientemente de las operaciones de EEPROM o ATECC608A. Como todos comparten el mismo bus I²C a 100 kHz, el polling táctil se entrelaza con otro tráfico I²C en el bucle principal cooperativo.