Interfaz touch MSP430 y Linux

Hola que tal amigos del foro, estoy realizando un proyecto para la materia de microcontroladores, consiste en una interfaz (HID) con botones capacitivos, estoy trabajando con una Launchpad de Texas Instruments MSP430 y un booster pack capacitive sensor.

Técnicamente en esta parte no hay ningún problema, la duda que tengo es como voy a lograr procesar que botón pulse :unsure: es decir, me refiero a que este panel touch se comunicara con el PC a través de RS-232 y enviar caracteres ascci dependiendo de que botón se haya presionado.

Saben de algún software con el cual pueda procesar estos caracteres y realizar una acción? Por ejemplo ejecutar la tecla de 'izquierda' o a tecla 'enter' dentro de mi sistema operativo, puede ser Windows aunque de preferencia Linux.

La idea es hacer un centro de multimedia controlado por este panel, como una rockola. Muchas gracias, saludos.
 
Saben de algún software con el cual pueda procesar estos caracteres y realizar una acción? Por ejemplo ejecutar la tecla de 'izquierda' o a tecla 'enter' dentro de mi sistema operativo, puede ser Windows aunque de preferencia Linux.

La idea es hacer un centro de multimedia controlado por este panel, como una rockola. Muchas gracias, saludos.

gambas .
 
Hola que tal amigos del foro, estoy realizando un proyecto para la materia de microcontroladores, consiste en una interfaz (HID) con botones capacitivos, estoy trabajando con una Launchpad de Texas Instruments MSP430 y un booster pack capacitive sensor.

Técnicamente en esta parte no hay ningún problema, la duda que tengo es como voy a lograr procesar que botón pulse :unsure: es decir, me refiero a que este panel touch se comunicara con el PC a través de RS-232 y enviar caracteres ascci dependiendo de que botón se haya presionado.

Saben de algún software con el cual pueda procesar estos caracteres y realizar una acción? Por ejemplo ejecutar la tecla de 'izquierda' o a tecla 'enter' dentro de mi sistema operativo, puede ser Windows aunque de preferencia Linux.

La idea es hacer un centro de multimedia controlado por este panel, como una rockola. Muchas gracias, saludos.

Mmmm... puede ser que la interfaz de USB tiene que ser clase de dispositivo = teclado, mientras que creo que muchos ejemplos vienen con ejemplos de interfaz HID como data pipe. Eso no lo reconocería el sistema operativo como un dispositivo de interfaz humana sino más bien como una alternativa a un puerto serie.
Acá según entiendo no nos interesa usarlo como puerto serie, sino que el sistema operativo lo interprete como uno de esos tecladitos numéricos chiquitos o algo así, no?.

La diferencia entre uno y otro es que para data pipe es que la librería USB que se ejecuta en el micro es bien liviana, mientras que una interfaz HID completa tiene un "reporte" que especifica cosas como cuantos botones tiene el dispositivo, si es un dispositivo apuntador o no, cada que intervalo de tiempo se leen los botones/teclas/etc.

Si estás en linux cuando enchufes el launchpad abrí una ventana de comandos y tecleá:
>lsusb
Ahí debería salir una lista de dispositivos que incluye los hubs usb internos de la máquina más teclado/mouse....
Busca la línea que diga Texas Instruments o algo que indique que es el launchpad, y usa el #Bus y #Device correspondiente con el siguiente comando:
>lsusb -s #Bus:#Device -v

Eso nos va a devolver el descriptor de dispositivo completo del launchpad, y allí debería decir si lo está interpretando solo como un HID con data pipe o si efectivamente esta como HID con reporte. Podrías pegarlo acá y lo vemos si te parece.

Si ese es el problema deberías buscar un ejemplo que use un HID con el perfil de teclado, o a ver... tengo instalado el MSP430USBDevelopersPackage_5_00_00
Dentro de esa carpeta hay una aplicación para generar un descriptor de dispositivo a través de una aplicación gráfica.
Está en MSP430USBDevelopersPackage_5_00_00/MSP430_USB_Software/MSP430_USB_DescriptorTool/MSP_USB_Descriptor_Tool.jar

Para ejecutarla... ventanita de comando, ir a esa ubicación, y ejecutar el .jar con
>java -jar MSP_USB_Descriptor_Tool.jar

Te abre una ventana como la imagen adjunta y de ahí deberías poder elegir HID teclado/mouse...
Una vez seteadas las opciones le das generar código y eso después lo utilizarías en tu proyecto.

Bueno, ya asumí demasiadas cosas prefiero que lo veas primero y confirmes/descartes mis sospechas antes de seguir con otros detalles (si hace falta).

Saludos.
 

Adjuntos

  • Screenshot from 2016-11-04 17:52:34.jpg
    Screenshot from 2016-11-04 17:52:34.jpg
    78.6 KB · Visitas: 10
Voto por el Leonardo o semejante emulando un teclado.
Así vale para cualquier plataforma sin ningún programa.
Es muy sencillo de hacer el lado arduino y el lado Linux es inexistente y multiplataforma.

 
Pues si lo que quieres es simular las pulsaciones de teclas del sistema, lo mas razonable sería enviar por USB los códigos que manda un teclado desde el MSP, o sea, simular un teclado (y te evitas programación en el lado Linux). El Arduino Leonardo hace esto con mucha facilidad https://www.arduino.cc/en/Reference/MouseKeyboard . En el MSP debe ser mas complicado.

Gracias por responder, si la verdad esa es la idea de poder simular un teclado lo mas sencillamente posible, solo que esa parte aún no logro saber como realizarlo.

Con arduino se me facilitaria bastante pero en mi clase no lo usamos y lo tenemos prohibido, así que forzosamente tiene que ser con una MSP430



Mmmm... puede ser que la interfaz de USB tiene que ser clase de dispositivo = teclado, mientras que creo que muchos ejemplos vienen con ejemplos de interfaz HID como data pipe. Eso no lo reconocería el sistema operativo como un dispositivo de interfaz humana sino más bien como una alternativa a un puerto serie.
Acá según entiendo no nos interesa usarlo como puerto serie, sino que el sistema operativo lo interprete como uno de esos tecladitos numéricos chiquitos o algo así, no?.

Muchas gracias por responder, es verdad, mi panel touch tiene algunos botones los cuales al presionar envían caracteres por comunicación serial, que al ser detectadas simulan pulsaciones de un teclado común

Si estás en linux cuando enchufes el launchpad abrí una ventana de comandos y tecleá:
>lsusb
Ahí debería salir una lista de dispositivos que incluye los hubs usb internos de la máquina más teclado/mouse....
Busca la línea que diga Texas Instruments o algo que indique que es el launchpad, y usa el #Bus y #Device correspondiente con el siguiente comando:
>lsusb -s #Bus:#Device -v

Excelente en cuanto me encuentre en Linux lo realizo y posteo captura


Para ejecutarla... ventanita de comando, ir a esa ubicación, y ejecutar el .jar con
>java -jar MSP_USB_Descriptor_Tool.jar

Te abre una ventana como la imagen adjunta y de ahí deberías poder elegir HID teclado/mouse...
Una vez seteadas las opciones le das generar código y eso después lo utilizarías en tu proyecto.

Una pregunta para el .jar, específicamente para que funciona? mencionas que genera un codigo que podria servir para mi proyecto. Al conectar mi MSP430 junto con el teclado que fabrique lo leerá como un teclado normal? Existe alguna libreria que pueda usar para poder realizar esta funcion?
Muchas gracias, saludos.



Voto por el Leonardo o semejante emulando un teclado.
Así vale para cualquier plataforma sin ningún programa.
Es muy sencillo de hacer el lado arduino y el lado Linux es inexistente y multiplataforma.

Es el problema que tengo amigo, es nuestra clase tenemos prohibido usar arduino, solo micros de texas instruments y exactamente eso es lo que pienso realizar, un teclado emulado solo con algunas teclas especificas, el problema es en que libreria pudiera usar.
usando comunicación serial necesitaría un software que interpretara estos caracteres en ascci y emulara una pulsación de una tecla, como lo haría en un teclado convencional. Saludos
 
Última edición:
Una pregunta para el .jar, específicamente para que funciona? mencionas que genera un codigo que podria servir para mi proyecto. Al conectar mi MSP430 junto con el teclado que fabrique lo leerá como un teclado normal? Existe alguna libreria que pueda usar para poder realizar esta funcion?
Muchas gracias, saludos.

El .jar es un programa en Java que corre en la PC y genera el código en C que contiene el descriptor de dispositivo. Este código luego lo introducirías en tu carpeta de proyecto junto con la librería usb y tu propio código de aplicación; estas 3 cosas juntas es el código que estaría ejecutando tu microcontrolador.
Lo que hace que la PC vea a lo que hay enchufado como un teclado, un mouse, u otra cosa es justamente el descriptor de dispositivo.
La librería te la bajas del sitio de Texas en el apartado de USB, te bajas un zip y contiene la librería + código de ejemplo + la aplicación que mencioné para generar el descriptor de dispositivo.
 
El .jar es un programa en Java que corre en la PC y genera el código en C que contiene el descriptor de dispositivo. Este código luego lo introducirías en tu carpeta de proyecto junto con la librería usb y tu propio código de aplicación; estas 3 cosas juntas es el código que estaría ejecutando tu microcontrolador.
Lo que hace que la PC vea a lo que hay enchufado como un teclado, un mouse, u otra cosa es justamente el descriptor de dispositivo.
La librería te la bajas del sitio de Texas en el apartado de USB, te bajas un zip y contiene la librería + código de ejemplo + la aplicación que mencioné para generar el descriptor de dispositivo.

Excelente, ahora me encuentro en Windows ya me lo descargue e instale, ahora me encuentro en la interfaz para generar el código, pero tengo un problema que me pide el Product ID de mi dispositivo, pero no tengo idea de cual sea y ahora me encuentro buscando en las paginas de TI, tu sabes algo sobre el PID?, muchas gracias, adjunto captura.
 

Adjuntos

  • f_1.jpg
    f_1.jpg
    92.8 KB · Visitas: 5
Excelente, ahora me encuentro en Windows ya me lo descargue e instale, ahora me encuentro en la interfaz para generar el código, pero tengo un problema que me pide el Product ID de mi dispositivo, pero no tengo idea de cual sea y ahora me encuentro buscando en las paginas de TI, tu sabes algo sobre el PID?, muchas gracias, adjunto captura.

Yo utilizaría el mismo que viene con el launchpad, o sacalo de algún código de ejemplo, a ver... en mi caso en la ubicación:
MSP430USBDevelopersPackage_5_00_00/MSP430_USB_Software/MSP430_USB_API/examples/HID_humanInterface/Traditional/H8_Keyboard/USB_config
En el archivo descriptors.h están estas dos líneas:
#define USB_VID 0x2047 // Vendor ID (VID)
#define USB_PID 0x0315 // Product ID (PID)

así que utilizaría esos dos valores.

Vale aclarar que esto es aceptable siempre y cuando sea para hacer un proyecto que uses solito en tu casa.
Si después quisieras vender este desarrollo - que seguramente va a ser el mejor teclado multimedia del mundo y va a ser un éxito sin precedentes :D- los fabricantes de micros tiene alguna clase de licencia donde te asignan números de PID siempre y cuando utilices productos de ellos.
Si no se puede saltar al intermediario e ir a usb.org y tener tu propio VID, pero eso dejarlo después de vender algún que otro millón que sino no se justifica.

Entonces sí, proyecto para casita: usaría lo de los ejemplos, proyecto para vender: le mando un mail a Texas, proyecto masivo exitoso: me voy al usb.org

El VID es para identificar la empresa (Texas, Microchip, ST), el PID es para identificar el producto particular de esa empresa (teclado, mouse, impresora...).

Se supone que estas interfaces: HID, CDC, MSD y algunas más son estandar y que no haría falta drivers para que los sistemas operativos puedan trabajar con ellos.
Pero algunos sistemas operativos remolones caso de Windows con CDC y de Linux con HID precisan un driver/librería que les diga como operar con el dispositivo. Esto era hasta hace algún tiempo atrás, quizás esto hoy ya no pasa.
Y si se trata de un dispositivo no estandar (escribir y leer directamente a endpoints cosa que no recomiendo si se puede evitar porque después vas a tener que hacer los drivers para Windows, Linux, Apple, Android, etc, etc) el sistema operativo usa el VID/PID para buscar el driver y decir... aja!!! para este VID/PID tengo que usar el ñpfdgsdñgtih.sys o el archivo que sea.

Es una desventaja esto de licenciar el VID y PID para el USB, de la misma manera que una placa de red precisa una dirección MAC, el usb precisa un VID/PID, es el documento de identidad del dispositivo.

Ah... y un temita más... como verás en los ejemplos siempre aparece una carpeta llamada driverlib (por lo menos en la última versión que instalé el año pasado).
Esa carpeta tiene código para manejar los módulos o periféricos del micro: puerto I/O, ADC, uart, spi, i2c, y lo que es más importante: módulo USB.
Así que a la lista de carpetas agregamos esta otra, porque el código de la librería usb utiliza las funciones de esa otra librería... bienvenido al entrevero.
 
Atrás
Arriba