Un poco de HID

HID son las siglas que nos sirven para identificar un Dispositivo de Interfaz Humana o Human Interface Device.

Es una característica bastante interesante que soporta el USB.

Su principal característica y lo que lo hace bastante atractivo, es que no requiere de drivers para comunicarse con la computadora.

Solo basta con generar un reporte de información que le indique a la computadora como se le enviará la información desde el dispositivo.

Para entender un poco mejor este nuevo concepto, intentemos conectar un control al puerto USB.

El control en cuestión será la CAPCOM FIGTHER POWER STICK, que se compone de una palanca de dos direcciones y de 8 botones.

Control Capcom Figther Power Stick

De las varias maneras en que podemos describir este control, utilizaremos la que a mí me agrado más.

Para definir la palanca utilizaremos un Pointer, al cual le podemos definir los 2 ejes y asignarle los valores que se esperan al mover la palanca, siendo un 1 el máximo y un -1 el mínimo.

Por lo tanto tenemos que para definir un eje solo necesitamos 2 bit y para definir completamente la palanca solo necesitamos 4 bits.

La sección que nos define la palanca dentro del reporte quedaría así:

Usage (Pointer)

Collection (Physical)

Usage (X)

Usage (Y)

Logical Minimum (-1)

Logical Maximum (1)

Report Count (2)

Report Size (2)

Input (Data,Variable,Absolute)

End Collection

La sección de botones, pues la definimos como botones especificando que se leerán 8 botones, esperando un 0 si no esta presionado y un 1 si esta presionado.

La sección donde definimos los 8 botones dentro del reporte quedaría así:

Usage Page (Bottons)

Usage Minimum (Button 1)

Usage Maximum (Button 8)

Logical Minimum (0)

Logical Maximum (1)

Report Count (8)

Report Size (1)

Input (Data,Variable,Absolute)

La mayor parte del reporte ha quedado OK, pero para poder leer la palanca en un Byte y los botones en otro Byte, definamos 4 bit que no llevan información y así completar el Byte de la palanca, esto se vería asi dentro del reporte:

Report Count (4)

Report Size (1)

Input (Contant,Variable,Absolute)

El reporte completo quedaría:

Usage Page (Generic Desktop)

Usage (Game Pad)

Collection (Application)

Usage (Pointer)

Collection (Physical)

Usage (X)

Usage (Y)

Logical Minimum (-1)

Logical Maximum (1)

Report Count (2)

Report Size (2)

Input (Data,Variable,Absolute)

End Collection


Report Count (4)

Report Size (1)

Input (Contant,Variable,Absolute)


Usage Page (Bottons)

Usage Minimum (Button 1)

Usage Maximum (Button 8)

Logical Minimum (0)

Logical Maximum (1)

Report Count (8)

Report Size (1)

Input (Data,Variable,Absolute)

End Collection

El archivo fue generado utilizando el HIDdescriptorTool de Intel.

Y el programa completo se desarrollo para los microcontroladores de Microchip PIC18F4550 y PIC18F2550,

El trabajo final quedo así:

CAPCOM FIGTHER POWER STICK con conexión a USB.

Mas adelante subiré mas fotos de como se realizó la adaptación y el diagrama de conexión entre el control y el microcontrolador.

Saludos