Hola!!
He estado ojeando el código HID de RedPic, y me gustaría adaptarlo para un pequeño proyecto que tengo en mente: consistiría en una serie de pulsadores y palancas que, dependiendo de su estado, envíen diferentes combinaciones de teclas al PC y, a su vez, una aplicación en el pc debería enviar unos datos al pic, para que este gestione unos LEDS.
Como no manejo muy bien la forma de enviar teclas a una aplicación por software desde windows, me pareció una buena idea hacer que mi hardware sea reconocido como un teclado usb y que asi, envie directamente las pulsaciones de teclas a windows. De todos modos, esto me impediría recibir los datos sobre el estado de leds. Mirando el firmware de RedPic, encontré esto:
/////////////////////////////////////////////////////////////////////////////
//
// usb_keyboard_task()
//
// Sends a packet of keyboard data. The protocol was specified in the HID
// report descriptor (see usb_desc_kbmouse.h), and is:
// tx_msg[0] = HID report id (2)
// tx_msg[1] = modifier (an 8bit bitmap of shift, tab, alt keypress)
// tx_msg[2] = const 0
// tx_msg[3:7] = an array of held down keys. a=4, b=5, etc.
// if msg[2:7]={0} then no keys are held down
//
// rx_msg[1] = HID report id (2)
// rx_msg[0] = 5bit bitmap of led status
//
/////////////////////////////////////////////////////////////////////////////
Si vemos la línea en negrita, parece ser que podría recibir hasta 5 bits, que me da un total de 2^5=32 combinaciones posibles, con lo que ya podría manejar algunos LEDs, ¿no es asi?
El problema es que no sé que tendría que hacer en el programa del pc para poder enviar esos datos al teclado, ¿alguien puede arrojar algo de luz sobre mi ignorancia?
Quizás sea más fácil que haga 2 dispositivos separados, un teclado usb HID para los pulsadores y demás, y otro dispositivo usb CDC, que reciba los datos sobre estado de los leds, ¿no? Preferiría agruparlo todo (LEDS/Salidas y pulsadores/entradas) en un sólo dispositivo, pero como si hago un solo usb CDC, no sé como transformar los datos enviados en pulsaciones de tecla mediante un software (estoy usando C#, pero aun no lo domino), creo que esta será la mejor opción.
¿Qué opináis? Cualquier comentario es bienvenido (excepto insultos personales, jejeje)