API WebHID: Controla Todo a través de USB

Rate this content
Bookmark

El sistema operativo permite controlar diferentes dispositivos utilizando el protocolo de dispositivo de interfaz humana desde hace mucho tiempo. Con la API WebHID, puedes hacer lo mismo directamente desde el navegador. Vamos a hablar sobre las características y limitaciones del protocolo. Intentaremos conectar algunos dispositivos a la laptop y controlarlos con JavaScript.

FAQ

La API webHAD permite controlar dispositivos reales, como gamepads y otros dispositivos de interfaz humana, directamente desde el navegador a través de USB. No es un estándar de W3C pero está habilitada por defecto en Chrome 89.

Sí, además de USB, webHAD también puede trabajar con dispositivos a través de Bluetooth, aunque en la discusión actual se enfoca principalmente en USB.

Mozilla no implementa webHAD debido a problemas relacionados con la privacidad de la huella digital y Safari no lo hace debido a la prevención del seguimiento.

Necesitas un navegador que soporte webHAD, como Chrome 89, y utilizar el atributo HID del navegador para interactuar con los dispositivos mediante filtros específicos como el ID de proveedor y el ID de producto.

Puedes encontrar el ID de proveedor y el ID de producto en la página de bloqueo de dispositivos en Chromium, donde se listan todos los dispositivos conectados a tu computadora.

Son conjuntos de datos usados para la comunicación entre el dispositivo y el sistema operativo. Los informes de entrada envían datos del dispositivo al sistema, mientras que los informes de salida y de características envían datos desde el sistema al dispositivo, con características especiales en algunos casos.

No, al igual que en otros casos de automatización de medios, webHID requiere un gesto del usuario para iniciar acciones que afecten la reproducción de audio u otras funciones similares por razones de seguridad y privacidad.

webHID requiere gestos del usuario para activar la comunicación con dispositivos y no funciona con entradas confiables, como datos de tarjetas de crédito o contraseñas, para evitar riesgos de seguridad.

Puedes explorar el repositorio webHID en GitHub, que incluye artículos, especificaciones y ejemplos. También se recomienda el artículo en web.dev sobre cómo conectar tu dispositivo a tu laptop.

Nikita Dubko
Nikita Dubko
23 min
20 Jun, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla de hoy presenta la API WebHID, que permite a los desarrolladores controlar dispositivos reales desde el navegador a través de USB. Se explora la interfaz HID, incluyendo teclados, ratones y gamepads. La charla cubre la enumeración de dispositivos, informes de entrada, informes de características e informes de salida. Se destaca el uso de HID en el navegador, especialmente en Chrome. Varias demos muestran cómo trabajar con diferentes dispositivos, incluyendo un controlador DualShock, un micrófono, un gamepad y un pad de batería Stream Deck. La charla concluye con recomendaciones y recursos para una exploración adicional.

1. Introducción a la API webHAD y la interfaz HID

Short description:

Hoy hablaremos sobre la API webHAD como una forma de controlar dispositivos reales desde el navegador a través de USB. Exploraremos la interfaz HID, que incluye teclados, ratones y gamepads. También discutiremos los controladores, que actúan como una capa de abstracción entre las aplicaciones y el sistema operativo.

Hola, mi nombre es Nikita y hoy hablaremos sobre la API webHAD como una forma de controlar algunos dispositivos reales directamente desde el navegador a través de USB. Pero un pequeño aviso, no solo USB, también puedes trabajar con Bluetooth, pero hoy solo hablaremos de USB.

¿Quién soy? Soy Nikita Dubko, soy desarrollador web, con unos 15 años de experiencia. Soy un podcaster un poco, jugador de D&D, me encanta hacer kayak con mis amigos y también toco un poco la batería y el piano, y lo usaremos en esta charla. También soy un experto desarrollador de Google, y para mí GDE se trata de conocimiento. Y es realmente genial asistir a algunas reuniones de GDE y aprender algo sobre nuevas API web. Por ejemplo, sobre WebHAD y hablaremos de eso ahora mismo debido a las reuniones de GDE.

¿Y cómo comenzó todo? Tal vez hayas visto en Twitter algún tipo de front-end, no es una programación real. Solo mueves algunos píxeles, coloreas algunos botones y ni siquiera tienes acceso a dispositivos reales. Nosotros, los programadores de C++, los verdaderos desarrolladores, trabajamos con dispositivos reales, usamos controladores y así sucesivamente. Pero realmente, tal vez tengamos alguna posibilidad de trabajar con dispositivos reales. Así que exploremos. Hablemos sobre algún tipo de lenguajes C++, no solo C++.

Para trabajar con dispositivos reales, debes usar la interfaz HID. HID: son los Dispositivos de Interfaz Humana. Y lo usas mucho. Por ejemplo, es el teclado, el ratón, el gamepad, todos los dispositivos que ayudan a las personas a comunicarse con laptops, PCs. Y es como una capa entre la PC y el humano. Puede ser una clase USB y una clase Bluetooth. Hoy hablaremos sobre la clase USB, pero trabajar con Bluetooth no es tan complicado.

Y hablemos de los controladores, tales controladores. Para escribir un controlador, debes conocer mucho sobre tu dispositivo y, ya sabes, los controladores son como una capa de abstracción para ayudar a nuestra aplicación a trabajar con el sistema operativo. Si tenemos alguna aplicación y quiere comunicarse con algún dispositivo real, con hardware, debe llamar a alguna biblioteca del sistema operativo que puede ser un controlador. Y este controlador usará algunos data sin procesar para comunicarse con este dispositivo real. Pregunta al dispositivo real, ¿tienes algún data? El hardware puede responder, sí, lo tengo, tómalo. El sistema operativo procesa este data y devuelve el resultado de dicho procesamiento a la aplicación. Entonces, es como una capa de abstracción, puedes escribir esta capa y llamarla controlador. Pero para ser honesto, tenemos una encuesta en nuestro sistema operativo. Entonces, cuando conectas algún dispositivo real a través de USB al sistema operativo, le pregunta al dispositivo real, ¿tienes algo? Dispositivo real, no, no tengo. ¿Tienes?

2. Polling, Device Enumeration, and Reports

Short description:

Hoy discutiremos el polling en el contexto de la API webHAD y los dispositivos USB. Exploraremos el concepto de enumeración de dispositivos y el uso de identificadores de dispositivo. Además, cubriremos los informes de entrada, informes de características e informes de salida, que son conjuntos de datos intercambiados entre dispositivos y el sistema operativo. Estos informes se pueden manipular utilizando métodos como set report y set feature. Para obtener más detalles, consulta la sección de dispositivos de interfaz humana de la especificación USB.

¿Tienes algo? Bien, tengo algo. Es el polling. Es como el polling HTTP en tus sitios web. Por defecto, es de 125 GHz o 125 veces por segundo. Son los valores predeterminados, es sobre USB 2.0, pero hoy tenemos USB 3.0, tenemos USB tipo-C, es mucho más rápido.

Por ejemplo, redibujamos nuestra pantalla solo 60 veces por segundo en un navegador. Entiendo que no es correcto comparar esos valores, pero es un ejemplo. Y cuando conectas tu dispositivo al sistema operativo, este dispositivo debe ser enumerado. ¿Por qué? Por ejemplo, si usas un concentrador USB, solo tienes una salida para este concentrador, una entrada para tu laptop, por ejemplo, y puedes conectar muchos dispositivos a este concentrador. Entonces, el protocolo USB tiene algunas características que pueden ayudarte a usar algún bus USB para trabajar con muchos dispositivos. Y cada dispositivo tiene un identificador de dispositivo, que es un número. Entonces, cada paquete puede tener este identificador de dispositivo para ayudar al sistema operativo a entender, okay, eso es un teclado, okay, eso es un gamepad, y así sucesivamente. Y sí, tiene polling, pregunta a los dispositivos muchas veces por segundo. ¿Tenemos algo? Por favor, dame algunos data. Pero si hablamos de algunas entidades, estas entidades son informes de entrada, informes de características, e informes de salida. Es solo un conjunto de data, un conjunto de bytes. Y estos informes de entrada son sobre algunos data de un dispositivo real a tu laptop, a tu sistema operativo. Los informes de características e informes de salida son la salida para tu laptop. Entonces es data de la laptop al dispositivo real.

Y los informes de características, son como los informes de salida, pero tienen algunas características especiales. Para enviar algunos data, para dar algunos data a tu dispositivo real, puedes, por ejemplo, usar algunos métodos en el controlador llamados set report, set feature. Y sí, ¿qué es un informe? Un informe es solo un conjunto plano de números. Es una matriz de bytes. No lo sé. Entonces, esto es un informe, y no es realmente legible, ¿verdad? Es solo byte, byte, byte, algunos desplazamientos. ¿Qué es eso? Debes leer una especificación USB. Tiene la sección de dispositivos de interfaz humana. Entonces puedes encontrar que es de 2001. Es una especificación muy antigua. Entonces sí, tiene muchos descriptores, y un descriptor es una forma de describir cómo debería verse un informe de entrada o salida.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Construyendo Interfaces Controladas por el Cerebro en JavaScript
JSNation Live 2021JSNation Live 2021
27 min
Construyendo Interfaces Controladas por el Cerebro en JavaScript
Top Content
La neurotecnología es el uso de herramientas tecnológicas para entender más sobre el cerebro y permitir una conexión directa con el sistema nervioso. La investigación en este campo no es nueva, sin embargo, su accesibilidad para los desarrolladores de JavaScript sí lo es.En los últimos años, los sensores cerebrales se han puesto a disposición del público, con herramientas que hacen posible que los desarrolladores web experimenten construyendo interfaces controladas por el cerebro.A medida que esta tecnología evoluciona y desbloquea nuevas oportunidades, vamos a analizar uno de los últimos dispositivos disponibles, cómo funciona, las posibilidades que abre y cómo empezar a construir tu primera aplicación controlada por la mente usando JavaScript.
TensorFlow.js 101: Aprendizaje automático en el navegador y más allá
ML conf EU 2020ML conf EU 2020
41 min
TensorFlow.js 101: Aprendizaje automático en el navegador y más allá
Descubre cómo aprovechar el aprendizaje automático en JavaScript utilizando TensorFlow.js en el navegador y más allá en esta charla rápida. Inspírate a través de un montón de prototipos creativos que empujan los límites de lo que es posible en el navegador web moderno (las cosas han avanzado mucho) y luego da tus primeros pasos con el aprendizaje automático en minutos. Al final de la charla, todos entenderán cómo reconocer un objeto de su elección que luego se puede utilizar de cualquier manera creativa que puedas imaginar. Se asume familiaridad con JavaScript, pero no se requiere experiencia en aprendizaje automático. ¡Ven y da tus primeros pasos con TensorFlow.js!
Creando lo Imposible: Virtualización X86 en el Navegador con WebAssembly
JSNation 2022JSNation 2022
21 min
Creando lo Imposible: Virtualización X86 en el Navegador con WebAssembly
WebAssembly es una característica del navegador diseñada para brindar un rendimiento predecible y alto a las aplicaciones web, pero sus capacidades a menudo son mal entendidas.
Esta charla explorará cómo WebAssembly es diferente de JavaScript, desde el punto de vista tanto del desarrollador como del motor del navegador, con un enfoque particular en la implementación V8/Chrome.
WebVM es nuestra solución para ejecutar eficientemente binarios x86 sin modificaciones en el navegador y muestra lo que se puede hacer con WebAssembly hoy en día. Se discutirá una descripción general de los componentes del proyecto, incluido el motor JIT, la capa de emulación de Linux y el backend de almacenamiento, seguido de demostraciones en vivo.
Instalar Nada: Interfaces de Aplicación con APIs Nativas del Navegador
JSNation 2024JSNation 2024
31 min
Instalar Nada: Interfaces de Aplicación con APIs Nativas del Navegador
Tal vez no necesites tanto JS como crees para lograr patrones comunes de UI con estas nuevas APIs nativas del navegador. Sumérgete en las nuevas y futuras APIs de CSS, HTML y JS que hacen que nuestro código sea más liviano y rápido de implementar.
Ampliando los límites de la codificación de video en navegadores con WebCodecs
JSNation 2023JSNation 2023
25 min
Ampliando los límites de la codificación de video en navegadores con WebCodecs
Top Content
La codificación de video de alta calidad en los navegadores ha sido tradicionalmente lenta, de baja calidad y no permitía mucha personalización. Esto se debe a que los navegadores nunca tuvieron una forma nativa de codificar videos aprovechando la aceleración de hardware. En esta charla, repasaré los secretos de la creación de videos de alta calidad en los navegadores de manera eficiente con el poder de WebCodecs y WebAssembly. Desde contenedores de video hasta muxing, audio y más allá, esta charla te dará todo lo que necesitas para renderizar tus videos en los navegadores hoy en día!
Makepad - Aprovechando Rust + Wasm + WebGL para construir aplicaciones multiplataforma increíbles
JSNation 2022JSNation 2022
22 min
Makepad - Aprovechando Rust + Wasm + WebGL para construir aplicaciones multiplataforma increíbles
Top Content
En esta charla mostraré Makepad, una nueva pila de UI que utiliza Rust, Wasm y WebGL. A diferencia de otras pilas de UI, que utilizan un enfoque híbrido, todo el renderizado en Makepad se realiza en la GPU. Esto permite aplicaciones altamente pulidas y visualmente impresionantes que hasta ahora no han sido posibles en la web. Debido a que Makepad utiliza Rust, las aplicaciones se ejecutan tanto de forma nativa como en la Web a través de wasm. Las aplicaciones de Makepad pueden ser muy pequeñas, del orden de solo unos pocos cientos de kilobytes para wasm, hasta unos pocos megabytes con nativo. Nuestro objetivo es desarrollar Makepad en la pila de UI de elección para aplicaciones multiplataforma ligeras y de alto rendimiento. Tenemos la intención de enviar con nuestra propia aplicación de diseño e IDE.

Workshops on related topic

Escribiendo Módulos Universales para Deno, Node y el Navegador
Node Congress 2022Node Congress 2022
57 min
Escribiendo Módulos Universales para Deno, Node y el Navegador
Workshop
Luca Casonato
Luca Casonato
En este masterclass te guiaré en la escritura de un módulo en TypeScript que pueda ser utilizado por usuarios de Deno, Node y los navegadores. Explicaré cómo configurar el formato, linting y pruebas en Deno, y luego cómo publicar tu módulo en deno.land/x y npm. Comenzaremos con una breve introducción sobre qué es Deno.