Necesito de su valiosa experiencia , ya estoy hace mas de un mes con esto y no logro sacarlo.
El dispositivo realizado con un pic18f2550 , ES un teclado, Pero el host ademas requiere enviar informacion para habilitar y deshabilitar teclas y encender algunos indicadores.
Como encarar el tema es un HID del tipo teclado con dos endpoint (IN-OUT) y otro adicional del tipo ???? con un endpoint de IN solamente?.
PD: he probado escribir y usar el control de los leds, el Pic recibe perfectamente la info , pero a partir de ahi en mas el teclado no envia mas datos al host, por lo que entiendo no puedo conectarme al endpoint desde otra aplicacion, por lo que creo que tengo que poner otro enpoint adicional para eso que la interfaz standard de teclado no utilize, estoy en lo cierto?.
uso CCS.
Espero me entiendan la pregunta y gracias por alguna orientacion.
Sí. Efectivamente estás sospechando correctamente.
Primero: Teclados y mouse son dos dispositivos no sólo de tipo HID, sino que además, especiales. Especiales porque son administrados y gestionados por el Sistema Operativo, y no son accesibles por el usuario para comunicaciones.
Segundo: Efectivamente necesitás agregar otro endpoint, para ello, vas a tener que agregar otra interface en el descriptor y código de CCS. Ahora es un único dispositivo USB con dos interfaces. Eso se llama composite device, o en nuestro español, dispositivo compuesto. Nombre lógico siendo que efectivamente el dispositivo es ahora la combinación de dos en uno sólo. Qué tipo de interfaz agregar ya es un tema de gustos y manejo de librerías. Desde el punto de vista teórico, podés agregar uno o más endpoints de cualquier tipo: Bulk, HID o Isochronous.
Endpoints Bulk e Isochronous funcionan utilizando el driver y librería de Microchip para USB.
HID si lo hacés sin nada alocado, podés usar los drivers genéricos del OS, por lo que no necesita drivers adicionales, ni siquiera el de Microchip pero necesitás una librería HID que te facilite la comunicación con las funciones del OS. Hay varias útiles, aunque sólo muy pocas logran comunicarse con un endpoint HID mas allá del primero dentro del composite device.
Tené en cuenta que Driver sería los archivos necesarios para que el OS comprenda lo que tiene conectado a su puerto USB, y Librería lo que vos vas a necesitar para comunicarte con tu dispositivo e intercambiar información.
HID te puede llegar a entregar más velocidad que Bulk, e Isochronous muchísima más aún, pese a que en dicho caso la integridad del paquete no está asegurada.
Para USB Full Speed:
Bulk: Es la de menor prioridad y se envía cuando no hay transacciones HID o Isochronous en espera. Tasa máxima de 64kB/s. Integridad de datos asegurada.
HID: Entrega en tiempo asegurada. Tasa máxima de 64kB/s. Integridad de datos asegurada.
Isochronous: Entrega en tiempo asegurada. Tasa máxima de 1023kB/s. Integridad de datos no asegurada.
Si necesitás ver cómo se hace un composite device, podés darte una idea en los ejemplos de CCS que combinan un mouse + teclado por ejemplo.
Saludos.