En informática , la clase de dispositivo de interfaz humana USB ( clase USB HID ) es una parte de la especificación USB para periféricos de computadora : especifica una clase de dispositivo (un tipo de hardware de computadora ) para dispositivos de interfaz humana como teclados , ratones , pantallas táctiles , controladores de juegos y dispositivos de visualización alfanumérica .
La clase USB HID se define en una serie de documentos proporcionados por el Grupo de trabajo de dispositivos del Foro de implementadores de USB . El documento principal utilizado para describir la clase USB HID es la Definición de clase de dispositivo para HID 1.11. [1]
La clase USB HID describe los dispositivos que se utilizan con casi todas las computadoras modernas. Existen muchas funciones predefinidas en la clase USB HID. Estas funciones permiten a los fabricantes de hardware diseñar un producto según las especificaciones de la clase USB HID y esperar que funcione con cualquier software que también cumpla con estas especificaciones.
El mismo protocolo HID se utiliza sin modificaciones en los dispositivos de interfaz humana Bluetooth . [2] La especificación del perfil Bluetooth solo dirige a los lectores a la documentación USB HID. En este sentido, esos dispositivos también pertenecen a la clase USB HID.
Los teclados son un tipo común de dispositivo de clase USB HID. El teclado de clase USB HID normalmente está diseñado con un punto final IN que comunica las pulsaciones de teclas a la computadora y un punto final OUT que comunica el estado de los LED del teclado desde la computadora al teclado. El estándar PC 97 requiere que el BIOS de una computadora detecte y funcione con teclados de clase USB HID que están diseñados para usarse durante el proceso de arranque.
Algunos teclados implementan el perfil de teclado de arranque USB especificado en la definición de clase de dispositivo USB para dispositivos de interfaz humana (HID) v1.11 y están configurados explícitamente para utilizar el protocolo de arranque. Estos están limitados a la repetición de 6 teclas (6KRO) e interrumpirán la CPU cada vez que se sondee el teclado (incluso si no hay cambio de estado) a menos que el controlador USB esté programado para indicarle al teclado que responda con reconocimientos negativos, que el controlador USB descarta en el hardware sin interrumpir la CPU, cuando no hay cambios de estado que informar. Este perfil está pensado para permitir que el BIOS maneje un teclado USB en ausencia de un sistema operativo compatible con USB. El perfil recomendado para teclados que no están en modo de arranque en esta especificación limita los teclados a 6KRO y hace que respondan a una interrupción con un informe de estado al menos cada medio segundo (nuevamente, incluso si no hay cambio de estado) para implementar la función typematic (repetir el código de escaneo cuando se presiona la tecla durante el tiempo suficiente) a menos que el controlador USB esté programado para indicarle al teclado que responda con reconocimientos negativos siempre que no haya cambios de estado que informar. Sin embargo, los teclados en modo que no sea de arranque tienen la libertad de implementar un perfil HID alternativo. [1]
El comportamiento mencionado anteriormente contrasta con la interfaz PS/2 , que admite el rollover de n teclas (NKRO) para teclados capaces de soportarlo.
El ratón de ordenador es otro dispositivo de clase HID USB muy común. Los ratones HID USB pueden ir desde dispositivos sencillos de un solo botón hasta dispositivos compuestos de varios botones. La mayoría de los sistemas operativos modernos se entregan con controladores para diseños de ratón HID estándar (el diseño de ratón moderno más común tiene dos botones dedicados y una rueda que funciona como tercer botón); los ratones con funcionalidad extendida requieren controladores personalizados del fabricante.
Los ratones USB tienen latencias más bajas que los ratones PS/2 porque los ratones USB estándar a menudo son sondeados a una frecuencia predeterminada de 125 Hz, mientras que los ratones PS/2 estándar envían interrupciones a una frecuencia predeterminada de 100 Hz cuando tienen datos para enviar a la computadora. [3] [4] Además, los ratones USB no hacen que el controlador USB interrumpa el sistema cuando no tienen ningún cambio de estado para informar de acuerdo con el perfil predeterminado de la especificación USB HID para dispositivos de ratón. [1] Tanto PS/2 como USB permiten anular la frecuencia de muestreo, con PS/2 admitiendo una frecuencia de muestreo de hasta 200 Hz [5] y USB admitiendo una frecuencia de sondeo de hasta 1 kHz [3] siempre que el ratón USB funcione a velocidad completa o velocidades USB superiores.
Los controladores y joysticks de juegos modernos suelen ser dispositivos de clase USB HID. A diferencia de los dispositivos de puerto de juegos antiguos , los dispositivos de juegos de clase USB HID normalmente no requieren controladores propietarios para funcionar. Casi todos los dispositivos de juegos funcionarán con controladores integrados siempre que el dispositivo esté diseñado en torno a los controladores y las especificaciones de clase USB HID.
Las especificaciones de la clase USB HID permiten la inclusión de una gran cantidad de otros dispositivos en la clase USB HID. Algunos ejemplos son los controladores de simulación de automóviles, las máquinas de ejercicios, los dispositivos de telefonía , los termómetros, los controles de audio y la instrumentación médica. Incluso las fuentes de alimentación ininterrumpida y los dispositivos de protección de software [6] se declaran en esta clase, a pesar de que a menudo no tienen ninguna interfaz humana. Cualquier dispositivo puede ser un dispositivo de clase USB HID siempre que un diseñador cumpla con las especificaciones lógicas de la clase USB HID. Esto no quiere decir que no haya necesidad de enviar controladores para estos dispositivos, ni que un sistema operativo reconocerá inmediatamente el dispositivo. Esto solo significa que el dispositivo puede declararse en la clase de dispositivo de interfaz humana.
La interfaz USB es vulnerable a vulnerabilidades de seguridad como BadUSB , que abusan de la combinación de la capacidad del USB para conectar muchos tipos diferentes de dispositivos, su incapacidad para verificar que los dispositivos son realmente lo que dicen ser, la posibilidad de que los dispositivos USB cambien su tipo o anuncien subdispositivos adicionales mientras están enchufados y su comportamiento predeterminado de aceptar cualquier dispositivo que se conecte a ellos. Como contramedida parcial, se pueden utilizar periféricos PS/2 junto con la desactivación de todos los puertos USB. [7]
Una de las ventajas de una especificación bien definida como la clase USB HID es la abundancia de controladores de dispositivos disponibles en la mayoría de los sistemas operativos modernos. Los dispositivos de la clase USB HID y sus funciones básicas se definen en la documentación de USB-IF sin necesidad de software específico. Gracias a estas descripciones genéricas, a los diseñadores de sistemas operativos les resulta fácil incluir controladores funcionales para dispositivos como teclados, ratones y otros dispositivos de interfaz humana genéricos. La inclusión de estos controladores genéricos permite una implementación más rápida de los dispositivos y una instalación más sencilla por parte de los usuarios finales. Windows 98 fue la primera versión de Windows que admitió USB HID.
La clase de dispositivo de interfaz humana USB se puede utilizar para describir tanto las clases de dispositivo como de interfaz. La clase de interfaz se utiliza cuando un dispositivo USB puede contener más de una función. Por lo tanto, es posible tener dispositivos USB con dos interfaces diferentes al mismo tiempo (por ejemplo, un teléfono USB puede utilizar un teclado cubierto por la clase HID y un altavoz cubierto por la clase de dispositivo de comunicaciones USB ).
Los dispositivos de interfaz también se definen con descriptores de subclase. El descriptor de subclase se utiliza para declarar que un dispositivo es arrancable. Un dispositivo de arranque cumple con un mínimo de adherencia a un protocolo básico y será reconocido por el BIOS de una computadora .
Cada interfaz USB HID se comunica con el host mediante un canal de control o un canal de interrupción . Los canales isócronos y masivos no se utilizan en dispositivos de clase HID. Se requieren transferencias de control IN y OUT para la enumeración; solo se requiere una transferencia de interrupción IN para los informes HID. Las transferencias de interrupción OUT son opcionales en dispositivos de clase HID.
La clase USB HID requiere que cada dispositivo describa cómo se comunicará con el dispositivo anfitrión para predecir y definir con precisión todos los dispositivos de interfaz humana actuales y futuros. Durante la enumeración, el dispositivo describe cómo se deben estructurar sus informes para que el dispositivo anfitrión pueda prepararse adecuadamente para recibir esta información.
El host sondea periódicamente el punto final de interrupción IN del dispositivo durante la operación. Cuando el dispositivo tiene datos para enviar, genera un informe y lo envía como respuesta al token de sondeo. Los dispositivos comunes, como teclados y ratones, envían informes que cumplen con los estándares establecidos por el USB Implementers Forum (USB-IF). [8] Cuando un proveedor fabrica un dispositivo de clase USB HID personalizado, los informes generados por el dispositivo deben coincidir con la descripción del informe proporcionada durante la enumeración y el controlador instalado en el sistema host. De esta manera, es posible que la clase USB HID sea extremadamente flexible.
Existen dos niveles de API relacionadas con USB HID: el nivel USB y el nivel del sistema operativo . En el nivel USB, existe un protocolo para que los dispositivos anuncien sus capacidades y el sistema operativo analice los datos que obtiene. El sistema operativo ofrece entonces una vista de nivel superior a las aplicaciones, que no necesitan incluir soporte para dispositivos individuales sino para clases de dispositivos. Esta capa de abstracción permite que un juego funcione con cualquier controlador USB, por ejemplo, incluso los creados después del juego.