Panel de Control (Parte 6): Software

mayo 25, 2018 circuiteando 0 Comments

El programa de PC es el encargado de recibir los datos y emular las pulsaciones de un teclado.

Realiza la comprobación de errores (CRC16) al igual que el resto de placas, y si el comando es válido busca en un archivo de perfil si tiene asignado alguna combinación de teclas para mandarlas a la aplicación.

Decir que a diferencia de las aplicaciones corrientes que poseen una ventana principal, las aplicaciones en 3D que utilizan DirectX no reconocen los códigos de tecla que se suelen utilizar, los llamados keycodes. Sino que hay que utilizar la API de bajo nivel del sistema operativo y los llamados scancodes. Estos últimos son los que utilizan los fabricantes de teclados para desarrollar los drivers. Por lo que funcionarán en cualquier aplicación.

El programa principal está desarrollado en FreePascal, con el entorno de desarrollo Lazarus, y la parte que conecta con el panel por USB utiliza un programa escrito en Python. Este arranca como un servidor TCP y al detectar un reporte USB proveniente del PC, lo transmite vía sockets al programa principal.

Programa para PC

Cuenta con tres modos de funcionamiento: Normal, Edición y Prueba.

  • Normal: en este modo el programa detecta la llegada de un comando y manda directamente la pulsación de teclas correspondientes.
  • Edición: en este modo al accionar cualquier interruptor, pulsador, rotatorio o encoder, se muestra en pantalla el comando asignado. Desde esta pantalla se puede capturar una secuencia de teclas e indicar si se quiere que se mantengan pulsadas, que se emula la suelta de las teclas o que se pulse y suelten con el mismo comando. Esto es útil por si se quiere que un pulsador mande continuamente una tecla mientras se encuentre pulsado y pare al levantar el dedo. También se puede configurar mediante un punto rojo, la posición en la que se encuentra en el panel. Aunque ya se incluye una plantilla con todos los controles identificados a la hora de realizar un perfil nuevo. Los rotatorios disponen a su vez de dos modos de funcionamiento: En uno manda un comando distinto por cada posición del mismo. Útil cuando cada función del rotatorio tiene asignada en el programa un atajo de teclado. En el otro modo, solo se detecta si se mueve a derecha o izquierda y se le asigna una tecla a cada dirección. Útil para cuando el programa solo tiene asignadas una tecla para avanzar y otra para retroceder. En este modo no se manda nada al SO.
  • Prueba: en este modo tampoco se manda nada al SO, pero al accionar cualquier control, un punto rojo aparecerá sobre el dibujo en pantalla durante medio segundo. De esta forma se puede comprobar que el panel está funcionando correctamente y que ese control (pulsador, interruptor, etc...) está funcionando correctamente.
En modo Edición
En modo Prueba

El programa, una vez creado un perfil, se encarga de cargarlo automáticamente al iniciarse posteriormente. Pudiendo cambiar entre perfiles seleccionando un archivo diferente.

En la parte inferior se informa del estado en que se encuentra. Si está o no conectado al panel, el modo en el que está funcionando y el nombre del perfil que está cargado actualmente.

En caso de error o desconexión del panel mientras el programa se está utilizando, se intenta de forma periódica la reconexión del mismo. Y en caso de una error en la comunicación o del programa en Python, este termina su ejecución y el programa principal se encarga de volver a ejecutarlo. De esta forma se recupera de forma automática en menos de 2 segundos sin que se tenga que salir de la aplicación a pantalla completa para conectar de nuevo con el panel.

El código fuente del programa se encuentra en el repositorio Control_Panel_PC.

En la próxima y última entrada de este proyecto se mostrarán las imágenes del panel terminado así como conclusiones y posibles mejoras. 


0 comentarios: