# HID

HID (por sus siglas en inglés Human Interface Device), o dispositivo de interfaz humana , hace referencia a un tipo de interfaces de usuario para computadores que interactúan directamente, tomando entradas proveniente de humanos, y pueden entregar una salida a los humanos. El término HID comúnmente se refiere a la especificación USB-HID. Este fue acuñado por Mike Van Flandern de Microsoft cuando propuso al comité USB, crear un grupo de trabajo para la clase Human Input Device. El nombre del grupo de trabajo se cambió a la clase Human Interface Device sugerido por Tom Schmidt de DEC, ya que la norma propuesta soportaba la comunicación bidireccional

## Objetivos

Las principales motivaciones para HID eran las de permitir innovaciones en los dispositivos de entrada a la computadora y simplificar el proceso de instalar esos dispositivos. Antes de HID, los dispositivos normalmente se ajustaban a muy estrictos protocolos para el ratón, teclados y joysticks. Cualquier innovación en el hardware requería sobrecargar el uso de datos en un protocolo existente o la creación de un nuevo Driver y la evangelización de un nuevo protocolo para los desarrolladores de aplicaciones. En contraste con todos los dispositivos HID, entregan paquetes autodescriptivos que pueden contener una infinidad variada de tipos de datos y formatos. Un solo driver HID en la computadora analiza sintácticamente los datos y permite una asociación dinámica de datos de entrada y salida (I/O) con la funcionalidad de la aplicación. Este tiene habilitado la innovación rápida y proliferación de nuevos dispositivos de interfaz humana.
Los objetivos principales y subyacentes de la definición de clase HID son:
* Ser lo más compacto posible para ahorrar espacio de datos del dispositivo.
* Permitir la aplicación de software para omitir información desconocida.
* Ser extensible y robusto.
* Que soporte la anidación y las colecciones.
* Ser autodescriptivo para permitir aplicaciones de software genéricas.

## Historia

El estándar del HID fue desarrollado por una comisión de trabajo con representantes de varias empresas. El concepto de un autodescribible protocolo libre fue inicialmente concebido por Mike Van Flandern y Manolito Adan cuando se encontraban trabajando en el proyecto llamado Raptor en Microsoft e independientemente por Steve McGowan mientras trabajaba en el protocolo de un dispositivo para Access Bus en Forte. Después de comparar notas en la conferencia de Consumer Game Developer, Steve y Mike aceptaron colaborar en un nuevo estándar para el emergente Universal Serial Bus (USB).

## Dispositivos HID

HID comunes:
* Teclado.
* Ratón, trackball, touchpad, pointing stick.
* Tableta gráfica.
* Joystick.
HID menos comunes:
* Dispositivos simuladores de la conducción y dispositivos para simulación de vuelo, tales como palancas de mando, volantes y pedales.
* Power Glove de Nintendo.
* Plataforma de baile.
* Wiimote.
La mayoría de los sistemas operativos reconocen dispositivos estándares USB HID, como lo son los teclados y los ratones, sin necesidad de un controlador especial. Cuando se conectan, generalmente se despliega un mensaje en la pantalla diciendo que «un dispositivo HID-compliant ha sido reconocido».
En comparación, este mensaje usualmente no aparece para los dispositivos que son conectados a conectores de 6 pines PS/2 los cuales preceden al USB. El conector PS/2 no soporta plug-and-play, lo que significa que conectar un teclado o ratón PS/2 con el computador encendido no siempre funcionarán hasta el reinicio posterior. Además, PS/2 no soporta el protocolo HID.

## Componentes del protocolo HID

En el protocolo HID existe 2 entidades: el host y el dispositivo. El dispositivo es la entidad que directamente interactúa con el humano, como lo hace un teclado o un ratón. El host se comunica con el dispositivo y recibe datos de entrada del dispositivo en las acciones ejecutadas por el humano. Los datos de salida van del host al dispositivo y luego al humano. El ejemplo más común de un host es un computador, pero algunos celulares y PDA también pueden ser hosts.
El protocolo HID realiza la implementación de los dispositivos de manera sencilla. Los dispositivos definen sus paquetes de datos y luego presentan un descriptor HID al host. El descriptor HID es codificado como un grupo de bytes que describen los paquetes de datos del dispositivo. Esto incluye: cuantos paquetes soporta el dispositivo, el tamaño de los paquetes, y el propósito de cada byte y bit en el paquete. Por ejemplo, un teclado con un botón que ejecuta el programa de calculadora puede decirle al host que el estado de presionar/soltar ese botón, es almacenado en el 2º bit del 6º byte en el paquete de datos número 4 (nota: estas localizaciones solo son ilustrativas y son específicas de cada dispositivo). El dispositivo normalmente almacena el descriptor HID en la ROM y no se necesita intrínsecamente analizar sin tácticamente el descriptor HID. Algunos hardware de ratones y teclados en el mercado de hoy, son implementados usando solo una CPU de 8 bits.
Se espera del host que sea una entidad más compleja que el dispositivo. El host necesita obtener el descriptor HID del dispositivo y lo analiza antes de que se puede entablar la comunicación con el dispositivo. Analizar el descriptor HID puede ser complicado. Se sabe que algunos sistemas operativos tenían shipped bugs en los controladores de los dispositivos para analizar los descriptores HID, años antes de que los drivers del dispositivo fueran originalmente lanzados al público. Sin embargo, esta complejidad es la razón del porqué fue posible la innovación rápida con dispositivos HID.
El mecanismo anterior describe lo que es conocido como «el modo de reporte» HID. Ya que se conoce que no todos los hosts tendrán la capacidad de analizar los descriptores HID. El HID también define «el modo de arranque». En modo arranque solo dispositivos específicos soportan características específicas, ya que paquetes de datos definidos son usados. El descriptor HID no es usado en este modo así que la innovación está limitada. Sin embargo, el beneficio es que esta mínima funcionalidad es aún posible en los hosts que no soportan HID. Los únicos dispositivos soportados en modo arranque son:
* Teclado: solo el núcleo de 104 teclas es soportado. Cualquier funcionalidad avanzada no está disponible. Por ejemplo, un teclado en particular US con teclas QWERTY funcionarán, pero las teclas «calculadora» y «apagar» no.
* Ratón: solo los eje-X y eje-Y, la rueda, y los primeros 3 botones están disponibles. Cualquier característica adicional en el ratón no funcionará.
Un uso común del modo arranque está durante las primeras secuencias cuando el computador arranca. Configurando directamente la BIOS de la computadora es a menudo hecha usando modo de arranque. El término HID comúnmente se refiere a la especificación USB-HID. Este fue acuñado por Mike Van Flandern de Microsoft cuando propuso al comité USB, crear un grupo de trabajo para la clase Human Input Device. El nombre del grupo de trabajo se cambió a la clase Human Interface Device sugerido por Tom Schmidt de DEC, ya que la norma propuesta soportaba la comunicación bidireccional.

## Otros protocolos usando HID

Ya que HID fue definido originalmente sobre USB, HID también es usado en otros buses de comunicación de computadora. Esto permite a los dispositivos HID que normalmente solo eran encontrados en USB, que también sean usados en buses alternativos. Esto es hecho ya que soportar existentes dispositivos USB HID pueden ser adaptados más rápidamente que tener que inventar completamente un nuevo protocolo que soporte un ratón, teclado, etc. Buses conocidos que usan HID son:
* Bluetooth HID: Bluetooth es una tecnología de comunicación inalámbrica. Muchos ratones y teclados Bluetooth ya existen en el mercado.
* Serial HID: usado en receptores de control remoto en Microsoft Windows Media Center.