-
Notifications
You must be signed in to change notification settings - Fork 7
HID (dispositivo de interfaz humana) HID USB standard for braille displays
Notas para desarrolladores de HID Braille
La especificación HID estandariza la comunicación de bajo nivel con un dispositivo USB o Bluetooth, además de los tipos de controles de entrada y salida en el dispositivo. Los dispositivos de ejemplo son teclados, ratones, pantallas y ahora pantallas Braille.
En este documento, dispositivo significa una pieza de hardware que se conecta a una computadora a través de una conexión como USB o Bluetooth. El dispositivo puede contener uno o más controles para que un humano se comunique físicamente con el dispositivo, como botones o teclas para entrada, o LED o celdas de pines Braille elevados para salida.
También hay varios términos en HID que pueden resultar confusos para quienes recién comienzan a familiarizarse con esta tecnología.
- Descriptores
- Páginas de uso
- Usos
- Informes
- Colecciones
- Caps (capacidades)
Estos términos se describen en las subsecciones siguientes.
En el momento de la conexión, un dispositivo HID debe exponer un bloque de datos a través de la conexión llamado descriptor. Se trata de datos legibles por máquina que describen todos los controles de entrada y salida admitidos por el dispositivo, incluido su tipo y número de elementos, etc. También define el tamaño de los bloques de datos (o informes) que se pueden escribir y leer en el dispositivo. Un descriptor puede ser leído por un humano (ya sea como valores brutos o con algún tipo de descompilador) pero desde el punto de vista de Windows, el descriptor es opaco, y se deben usar otras API de Windows de más alto nivel para comunicarse con el dispositivo. , que hará toda la verificación de tipos por usted.
La especificación HID agrupa los controles en categorías a las que se refiere como páginas. Cada página tiene su propio número único y se denomina Página de uso. Una página de uso puede representar un tipo de dispositivo específico, como un teclado, un joystick o una pantalla Braille, o puede ser más general, como una página de botones genérica.
Un uso representa un tipo de control (tecla, botón, celda braille, LED). Al uso se le asigna su propio nombre constante y un número único relativo a la página de uso particular en el estándar en el que se encuentra. Un uso define información sobre el control, como si es un botón booleano, un valor estático o dinámico, una bandera o un selector (1 de muchos). Para obtener más información sobre lo que realmente significan estos tipos (sel, dv, nary, etc.), consulte las primeras páginas de la especificación HID Usage Tables 1.22 a la que se hace referencia al final de este documento. La especificación en sí puede o no definir otros aspectos del tipo de datos, como su tamaño o número de elementos, aunque el descriptor HID que el dispositivo pone a disposición en tiempo de ejecución debe contener toda esta información. Los ID de uso también se utilizan para identificar de forma exclusiva colecciones de controles o valores.
Un informe es un bloque de datos que se lee o escribe en el dispositivo HID.
Tiene un tamaño especificado por el descriptor HID y contiene un ID de informe como primer byte.
En Windows, cuando se obtiene un nuevo informe con "ReadFile" , Windows escribe automáticamente el ID del informe en el bloque de datos, y lo más probable es que el usuario desarrollador nunca deba conocerlo como otras API de Windows de alto nivel que pueden extraer datos de los informes utilizarán este byte de ID de informe internamente.
Sin embargo, al escribir informes con "WriteFile" , el usuario desarrollador debe establecer el byte de ID de informe apropiado en el informe específico para los valores que el usuario desarrollador incluye en el informe.
En Windows, el ID del informe se puede encontrar en la estructura HIDP_VALUE_CAPS
(capacidades de valor) para ese valor, obtenido del descriptor HID con HidP_GetValueCaps
.
Los controles HID se agrupan en colecciones. Algunos ejemplos pueden ser todas las teclas de un teclado o todas las celdas de una línea de Braille. Cada colección definida tiene una página de uso y un ID de uso para que pueda identificarse de forma única. Todos los dispositivos HID tienen una colección de nivel superior, que es el principal punto de entrada para recopilar información sobre el dispositivo, incluida la obtención de otras colecciones. Estas otras colecciones se conocen como colecciones vinculadas.
Una abreviatura de la palabra Capacidades utilizada por estructuras y API de Windows particulares para HID.
Por ejemplo, HidP_GetCaps
obtiene las capacidades del dispositivo HID.
Estos incluyen cosas como la cantidad de botones de entrada o valores de salida en el dispositivo, el tamaño de los informes y la página de uso y uso del dispositivo.
De manera similar, HidP_GetButtonCaps
obtiene las capacidades de todos los botones del dispositivo.
Las capacidades de los botones y valores incluyen cosas como su Uso y Página de Uso, si representan un rango de Usos y si tienen un estado NULL, etc.
- Obtenga la clase guid para dispositivos HID con
HidD_GetHidGuid
- Obtenga la información del dispositivo establecida para la máquina local con
SetupDiGetClassDevs
, especificando la clase HID guid como clase guid. - Siga llamando a
SetupDiEnumDeviceInterfaces
, aumentando memberIndex cada vez, para enumerar todos los dispositivos disponibles obteniendo una estructuraSP_DEVICE_INTERFACE_DATA
para cada uno, hasta que la función devuelva falso, lo que significa que no quedan más dispositivos por enumerar. - Para cada estructura de datos obtenida , llame a
SetupDiGetDeviceInterfaceDetail
para obtener una estructuraSP_DEVICE_INTERFACE_DETAIL_DATA
. - El miembro devicePath de la estructura
SP_DEVICE_INTERFACE_DETAIL_DATA
es la ruta que debe usarse para abrir el dispositivo para leer / escribir más tarde. - Es posible que se requieran algunas otras propiedades, como hardwareID, para identificar mejor el dispositivo, estas se pueden obtener con
SetupDiGetDeviceRegistryProperty
. - Para una implementación, vea
listHidDevices
en el código fuente de NVDA / hwPortUtils.py
- Use
CreateFile
para abrir un dispositivo HID, dándole DevicePath como ruta del archivo. Tenga en cuenta que es posible una E / S superpuesta; Consulte la documentación deCreateFile
. - Si este dispositivo puede necesitar ser abierto por otros procesos al mismo tiempo, querrá especificar
FILE_SHARE_READ | FILE_SHARE_WRITE
también. - Una vez que el asa del dispositivo abierto ya no es necesaria, se puede cerrar con
CloseHandle
. - Para una implementación, vea la clase
Hid
en el código fuente de NVDA / hwIo / base.py
- Para obtener información como vendorID, productID y versionNumber, llame a
HidD_GetAttributes
en el identificador del dispositivo abierto. - Para obtener la cadena del fabricante, use
HidD_GetManufacturerString
dando el identificador del dispositivo abierto. - Para obtener la cadena del producto, use
HidD_GetProductString
dando el identificador del dispositivo abierto.
Obtener las capacidades del dispositivo, obtener datos de los informes y configurar los datos en los informes requiere el descriptor HID del dispositivo. Windows representa el descriptor HID como un valor opaco denominado datos preparados.
- Obtenga los datos preparados del dispositivo con
HidD_GetPreparsedData
, dándole el identificador de dispositivo abierto. Tenga en cuenta que esto debe liberarse una vez que ya no sea necesario conHidD_FreePreparsedData
.
- Para averiguar la página de uso, el uso, el número de valores de entrada y salida y los tamaños de los informes de una colección de nivel superior, obtenga una estructura
HIDP_CAPS
para el dispositivo conHidP_GetCaps
, proporcionando el identificador del dispositivo abierto y los datos preparados.
La información de tipo de botones de entrada y valores y valores de salida en un dispositivo (como su ID de uso, tamaño y número de elementos) se puede encontrar a través de una estructura HIDP_VALUE_CAPS
para cada uno.
Se puede obtener una matriz de estas estructuras con "HidP_GetValueCaps" para los valores de entrada o salida, y "HidP_GetButtonCaps" para los botones.
A veces, una estructura HIDP_VALUE_CAPS
puede representar un rango de botones o valores, donde se exponen los ID de uso mínimo y máximo y los índices de datos, en lugar de un valor específico.
Ejemplos de estos podrían ser la forma en que se exponen las teclas de entrada de puntos Braille.
Solo hay una estructura HIDP_VALUE_CAPS
, que cubre los valores de dot1 a dot8.
- Utilice "ReadFile" para leer el siguiente informe de entrada disponible del dispositivo.
El tamaño de los datos a leer en bytes debe ser igual a la
InputReportByteLength
miembro de del dispositivoHIDP_CAPS
estructura. - Uso de las funciones tales como
HidP_GetData
yHidP_GetUsages
para extraer el valor actual de los botones y otros valores establecidos en el informe.
Para establecer el valor de controles particulares en el dispositivo:
- Cree un informe de salida asignando un bloque de memoria de tamaño OutputReportByteLength de la estructura HIDP_CAPS del dispositivo, usando algo como
malloc
. - Establezca el ID del informe (el primer byte) en el ID del informe que se encuentra en la estructura
HIDP_VALUE_CAPS
para el valor o valores que desea establecer. Obviamente, esto significa que solo puede establecer valores que compartan el mismo ID de informe en un solo informe. - Ajuste los datos para los valores utilizando funciones como
HidP_SetUsageValue
oHidP_SetUsageValuesArray
. - Envíe el informe al dispositivo usando
WriteFile
. El tamaño en bytes enviados debe ser igual a laOutputReportByteLength
de del dispositivoHIDP_CAPS
estructura.
Los dispositivos Braille Display permiten que los lectores de pantalla los controlen mediante una variedad de conexiones, como Serial, USB y Bluetooth. Los protocolos utilizados en estos canales han sido tradicionalmente específicos del fabricante de Braille Display. Esto ha significado que para que un lector de pantalla admita una pantalla Braille en particular, debe tener una lógica específica en el lector de pantalla que sepa cómo hablar el protocolo específico del dispositivo requerido. Además, en Windows, al menos, el usuario también debe instalar un controlador de nivel de sistema operativo proporcionado por el fabricante de Braille Display para que la computadora detecte y se comunique con el dispositivo. Con la introducción del estándar HID (Dispositivo de interfaz humana) para USB (y más tarde Bluetooth), fue posible eliminar la necesidad del controlador de dispositivo de nivel de sistema operativo requerido en Windows si el fabricante de la pantalla Braille expuso el dispositivo como un dispositivo HID personalizado , sin embargo, el lector de pantalla aún necesitaba un código específico del dispositivo, ya que el HID personalizado solo simplificaba la comunicación de bytes de bajo nivel, pero no estandarizaba lo que esos bytes realmente significaban.
En 2018, la especificación HID se amplió para definir el concepto de dispositivo Braille Display, incluida la configuración de las celdas braille y la estandarización de los botones comunes que se encuentran en las pantallas Braille, como las teclas de enrutamiento, las teclas de entrada de puntos Braille, el espacio en braille y las teclas de panorámica. Se agregó una nueva página de uso a la especificación HID: HID_USAGE_PAGE_BRAILLE (0x41). Esta página contiene nuevos ID de uso como:
- BRAILLE_DISPLAY (0x1): el ID de uso para la colección de nivel superior del dispositivo HID.
- Colecciones como BRAILLE_ROW (para contener celdas braille)
- 8_dot_BRAILLE_CELL (0x3) y 6_dot_braille_cell (0x4), que es un valor de salida que representa una celda braille física en el dispositivo.
- BRAILLE_KEYBOARD_DOT_1 a BRAILLE_KEYBOARD_DOT_8: los botones de entrada de puntos Braille para escribir caracteres braille.
- Teclas de espacio braille izquierda, derecha y central (para escribir un espacio).
- Botones de joystick y dpad
- Botones de panorámica para desplazarse por la pantalla braille. los detalles sobre la cantidad de recopilaciones, usos e informes deben consultarse en tiempo de ejecución y pueden variar entre dispositivos e incluso con actualizaciones de firmware de dispositivos.
- Siga las instrucciones generales para enumerar y abrir un dispositivo HID, además de buscar dispositivos y capacidades de valor como se mencionó anteriormente en este documento.
- Asegúrese de que el dispositivo Hid sea realmente una pantalla Braille verificando que el
HIDP_CAPS.UsagePage
de la colección de nivel superior del dispositivo HID esté configurado enHID_USAGE_PAGE_BRAILLE
(0x41). - Encuentre la estructura de salida correcta
HIDP_VALUE_CAPS
que representa la matriz de celdas braille. Es decir el ID de uso es EIGHT_DOT_BRAILLE_CELL o six_dot_braille_cell. El miembroReportCount
de esta estructura indica el número de celdas del dispositivo. Esta estructura también debe guardarse, ya que luego se necesita cuando se escribe braille en la pantalla. - Recoger todas las
HIDP_VALUE_CAPS
estructuras para los botones / valores de entrada y almacenarlos en una asignación de enchavetado por suDataIndex
miembro (o un índice de datos calculado desplazamiento desde elDataIndexMin
miembro si elHIDP_VALUE_CAPS
representa un rango de valores) . - También puede ser útil almacenar un índice de cada estructura
HIDP_VALUE_CAPS
relativo a la primera estructuraHIDP_VALUE_CAPS
en la colección actual (es decir cuando el miembroLinkCollection
difirió por última vez de la estructura anterior). En otras palabras, el índice dentro de su colección. esto es necesario en algunas implementaciones para determinar qué clave de enrutamiento representa un valor, ya que el ID de uso para el valor será solo ROUTING_KEY y la colección será uno de los ID de uso de la colección ROUTER_SET_ *.
- Cree un informe de salida HID (bloque de memoria), estableciendo el ID del informe (primer byte) al valor del miembro ReportID de la estructura de celda Braille
HIDP_VALUE_CAPS
que se encuentra en el momento de la construcción. - Llame a
HidP_SetUsageValueArray
para colocar los datos (patrones de puntos de celda braille) en el informe en el lugar apropiado, utilizando el ID de uso y el número de colección, etc. de la estructura de celdaHIDP_VALUE_CAPS
. - Envíe el informe a la pantalla Braille usando
WriteFile
. El número de bytes escritos será el valor deHIDP_CAPS.OutputReportByteLength
.
- Leer un informe de entrada de tamaño
InputReportByteLength
conReadFile
(o una devolución de llamada IO solapado) -
HidP_GetData
se puede utilizar para extraer todas las estructurasHIDP_DATA
del informe. estos representan el estado de todos los botones de entrada y otros controles. - Usando el miembro
DataIndex
de cada elemento de datos recuperado, busque la estructura originalHIDP_VALUE_CAPS
para ese índice de datos para encontrar su página de uso y su ID de uso. Esto denotará el botón actual presionado o el valor cambiado. Si solo necesita averiguar qué botones están presionados, pero no más datos como el valor establecido real o el índice de datos, puede llamar aHidP_GetButtons
. Pero esto no sería útil para botones como las teclas de enrutamiento, ya que necesita saber específicamente qué tecla de enrutamiento se presionó.
-
Artículo de USB HID en wikipedia: https://en.wikipedia.org/wiki/USB_human_interface_device_class
-
Introducción a los dispositivos de interfaz humana (HID), documentos de controladores de Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/
-
Interpretación de informes HID, documentos de controladores de Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/interpreting-hid-reports
-
Usos de HID, documentos de controladores de Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/hid-usages
-
Tablas de uso HID 1.22 (contiene la página Braille HID): https://www.usb.org/document-library/hid-
Este es el protocolo que hay que implementar
HID USB standard for braille displays HID USB standard for braille displays
REFERENCIAS:
¿Qué es un dispositivo de interfaz humana (HID)?
Apple, Microsoft y Google colaboran en un nuevo estándar universal para pantallas Braille El objetivo es hacer que el uso de pantallas Braille sea un proceso simple plug-and-play https://www.theverge.com/circuitbreaker/2018/5/31/17413178/apple-microsoft-google-usb-universal-standard-braille-displays
BRLTTY es un proceso en segundo plano (demonio) que proporciona acceso a la consola Linux / Unix (cuando está en modo texto) para una persona ciega que usa una pantalla braille actualizable. Controla la pantalla braille y proporciona una función de revisión de pantalla completa. También se ha incorporado alguna capacidad de habla.
Unicode Range "Braille Patterns
USB-IF Establishes A Standard For Braille Displays
LECTORES DE PANTALLA
es importante recalcar que MVDA no dará mas soporte para controladores personalizado en el futuro es por eso que debemos adoptar el protocolo HID Braille y no necesitaremos tener controladores individuales en ningún lector de pantalla Cómo añadir soporte para una pantalla braille
Creemos que cada persona ciega + con discapacidad visual Merece el derecho a acceder libremente y fácilmente a una computadora! https://github.com/nvaccess/nvda
JAWS https://support.freedomscientific.com/Downloads/JAWS Un lector de pantalla para Windows de pago
ANDROID https://github.com/google/brailleback con talkcback
Google BrailleBack en conjunto con un lector de pantalla
LECTORES DE PANTALLA ANDROD deben trabajar en conjunto con brailleback para salida braille
talkback: se instala al instalar con el paquete Suite de Accesibilidad Android
Voice Assistant en el Samsung lector de pantalla de sansung viene ya preinstalada