Autor Tema: HID Teclado con algo mas  (Leído 2159 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fvergniaud

  • PIC10
  • *
  • Mensajes: 16
HID Teclado con algo mas
« en: 23 de Enero de 2013, 02:08:46 »
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.

« Última modificación: 23 de Enero de 2013, 02:11:25 por fvergniaud »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: HID Teclado con algo mas
« Respuesta #1 en: 23 de Enero de 2013, 07:59:37 »
Hola  fvergniaud.
¿ Podras subir el codigo del programa, esquemas, circuito, simulaciones, captura de paquetes, o lo que tengas ?. Asi en el aire es muy dificil ayudarte.
Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: HID Teclado con algo mas
« Respuesta #2 en: 23 de Enero de 2013, 11:22:20 »
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.
« Última modificación: 23 de Enero de 2013, 11:26:05 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado fvergniaud

  • PIC10
  • *
  • Mensajes: 16
Re: HID Teclado con algo mas
« Respuesta #3 en: 23 de Enero de 2013, 12:23:37 »
Excelente ,gracias por la aclaracion, voy a intentarlo, vi el ejemplo the ex_usb_kbmouse.c del CCS voy a probar como me va es todo un tema los punteros en los descriptores, jaj!

A proposito en linux el ejemplo enumera y anda bien  , pero en Win 7 x64 no va, se ve que no le gustan los compuestos al amigo Bill.

Por las librerias uso libusb en linux, vamos a ver como va, ya les contare.

Este foro es invaluable!!!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: HID Teclado con algo mas
« Respuesta #4 en: 23 de Enero de 2013, 16:29:41 »
Si.

Gran parte de la mágia está en hacer los Descriptores. Claro que los más complejos son los HID, ya que necesitan especificar su comportamiento. Hay una herramienta en usb.org que sirve para crear descriptores HID y asegurarse de que sean válidos. Tal vez te sea de utilidad.

Si necesitás ayuda puedo darte una mano. Hace muchos años que vengo con lo que es USB y dispositivos compuestos.

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado dash_todopic

  • PIC10
  • *
  • Mensajes: 2
Re: HID Teclado con algo mas
« Respuesta #5 en: 29 de Agosto de 2013, 14:46:05 »
Hola:
Estoy intentando y sin resultados positivos, hacer un dispositivo compuesto, la idea es hacer un teclado-joystick-HID por el HID "programar" las teclas que enviaría al dispositivo al pulsar un botón (por ej.)
Alguno tiene un ejemplo de un disp. comp. ( teclado y HID ) ó algo similar en CCS C , porque viendo y modificando el ejemplo de teclado-mouse no logro que me funcione .

Gracias.