WebHID API: Control Everything via USB

This ad is not shown to multipass and full ticket holders
JS Nation
JSNation 2026
June 11 - 15, 2026
Amsterdam & Online
The main JavaScript conference of the year
Upcoming event
JSNation 2026
JSNation 2026
June 11 - 15, 2026. Amsterdam & Online
Learn more
Bookmark
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

El sistema operativo permite controlar diferentes dispositivos utilizando el protocolo Human Interface Device desde hace mucho tiempo. Con WebHID API puedes hacer lo mismo directamente desde el navegador. Hablemos sobre las características y limitaciones del protocolo. Intentaremos conectar algunos dispositivos al portátil y controlarlos con JavaScript.

This talk has been presented at JSNation 2022, check out the latest edition of this JavaScript Conference.

FAQ

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.

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.

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.

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.

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 webHID API, que permite a los desarrolladores controlar dispositivos reales desde el navegador a través de USB. Se explora la interfaz HID, incluidos 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 demostraciones muestran el trabajo con diferentes dispositivos, incluido un controlador DualShock, micrófono, gamepad y Stream Deck drum pad. La charla concluye con recomendaciones y recursos para una mayor exploración.

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 teclado, ratones y gamepad. 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 hablaremos solo de USB.

¿Quién soy yo? Soy Nikita Dubko, soy desarrollador web, con unos 15 años de experiencia. Soy un poco podcaster, jugador de D&D, realmente me encanta hacer kayak con mis amigos y soy un poco baterista y pianista y lo usaremos en esta charla. Así que también soy un experto desarrollador de Google, y para mí GDE es sobre conocimiento. Y es realmente genial visitar algunas reuniones de GDE y saber algo sobre nuevas APIs web. Por ejemplo, sobre WebHAD y hablamos de ello ahora mismo gracias a las reuniones de GDE.

¿Y cómo empezó todo? Tal vez viste en Twitter algún tipo de frontend, no es programación real. Solo mueves algunos píxeles, coloreas algunos botones y ni siquiera tienes acceso a dispositivos reales. Nosotros, los programadores de C++, somos desarrolladores reales, 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 de algún tipo de lenguajes C++, no solo C++.

Para trabajar con dispositivos reales, debes usar la interfaz HID. HID — son Dispositivos de Interfaz Humana. Y lo usas mucho. Por ejemplo, es teclado, ratones, 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. Así que puede ser clase USB y 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 saber 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 datos en bruto para comunicarse con este dispositivo real. Pregunta al dispositivo real, ¿tienes algunos datos?, el hardware puede responder, sí, los tengo, tómalo. El sistema operativo procesa estos datos y devuelve el resultado de dicho procesamiento a la aplicación. Así que, es como una capa de abstracción, puedes escribir esta capa y nombrarla controlador. Pero para ser honesto, tenemos una encuesta en nuestro sistema operativo. Así que, cuando conectas algún dispositivo real a través de USB al sistema operativo, pregunta al dispositivo real, ¿tienes algo? Dispositivo real, no, no tengo.

2. Polling, Device Enumeration, and Reports

Short description:

Hoy discutiremos la encuesta en el contexto de la API webHAD y los dispositivos USB. Exploraremos el concepto de enumeración de dispositivos y el uso de IDs de dispositivos. 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 pueden ser manipulados usando métodos como set report y set feature. Para más detalles, consulte la sección de dispositivos de interfaz humana de la especificación USB.

¿Tienes? Está bien, tengo algo. Es encuesta. Es como encuesta HTTP en tus sitios web. Por defecto, es 125 GHz o 125 veces por segundo. Se trata de valores predeterminados, se trata de 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 tales valores, pero es por ejemplo. Y cuando conectas tu dispositivo al sistema operativo, este dispositivo debe ser enumerado. ¿Por qué? Por ejemplo, si usas un hub USB, solo tienes una salida para este hub, una entrada para tu laptop, por ejemplo, y puedes conectar muchos dispositivos a este hub. Así que 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 algún ID de dispositivo, y es un número. Así que cada paquete puede tener este ID de dispositivo para ayudar al sistema operativo a entender, está bien, eso es teclado, está bien, eso es gamepad y así sucesivamente. Y sí, tiene encuesta, pregunta a los dispositivos muchas veces por segundo. ¿Tenemos algo? Por favor, dame algunos datos. 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 datos, conjunto de bytes. Y estos informes de entrada son sobre algunos datos de un dispositivo real a tu laptop, a tu sistema operativo. Informes de características e informes de salida, es salida para tu laptop. Así que son datos de la laptop a tu dispositivo real.

Y los informes de características, son como informes de salida, pero tienen algunas características especiales. Para enviar algunos datos, para dar algunos datos 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 simple de números. Es un array de bytes. No sé. Así que este es un informe, y no es realmente legible, ¿verdad? Es solo byte, byte, byte, algunos desplazamientos. ¿Qué es? Deberías leer una especificación USB. Tiene parte de dispositivos de interfaz humana. Así que puedes encontrar que es 2001. Es una especificación realmente antigua. Así que sí, tiene muchos descriptores, y un descriptor es una forma de describir cómo un informe de entrada o salida debería verse.

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
Learn how to build brain-controlled interfaces using JavaScript and brain sensors. Understand the functions of different parts of the brain and how they relate to sensor placement. Explore examples of calm and focus detection, as well as the Kinesis API for mental commands. Discover the applications of brain-controlled interfaces, such as scrolling web pages and password-less authentication. Understand the limits and opportunities of brain control and the potential for using brain sensors in medical applications.
Instala Nada: Interfaces de Usuario de Aplicaciones con APIs Nativas del Navegador
JSNation 2024JSNation 2024
31 min
Instala Nada: Interfaces de Usuario de Aplicaciones con APIs Nativas del Navegador
Top Content
This Talk introduces real demos using HTML, CSS, and JavaScript to showcase new or underutilized browser APIs, with ship scores provided for each API. The dialogue element allows for the creation of modals with minimal JavaScript and is supported by 96% of browsers. The web animations API is a simple and well-supported solution for creating animations, while the view transitions API offers easy animation workarounds without CSS. The scroll snap API allows for swipers without JavaScript, providing a smooth scrolling experience.
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
Top Content
ChirpX is a technology to securely run binary code in the browser, written in C++ and compiled to JavaScript WebAssembly. It can run a full virtualized system in the browser, including Bash and other languages like Python and JavaScript. ChirpX aims for scalability and the ability to work with large code bases, supporting multiprocessing and multithreading. It uses a two-tiered execution engine with an interpreter and a JIT engine. Future plans include running the full X.Org server in the browser and implementing the Windows system call. WebVM, the underlying technology, has a virtual file system backed by Cloudflare.
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á
TensorFlow.js enables machine learning in the browser and beyond, with features like face mesh, body segmentation, and pose estimation. It offers JavaScript prototyping and transfer learning capabilities, as well as the ability to recognize custom objects using the Image Project feature. TensorFlow.js can be used with Cloud AutoML for training custom vision models and provides performance benefits in both JavaScript and Python development. It offers interactivity, reach, scale, and performance, and encourages community engagement and collaboration between the JavaScript and machine learning communities.
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
This Talk explores the challenges and solutions in video encoding with web codecs. It discusses drawing and recording video on the web, capturing and encoding video frames, and introduces the WebCodecs API. The Talk also covers configuring the video encoder, understanding codecs and containers, and the video encoding process with muxing using ffmpeg. The speaker shares their experience in building a video editing tool on the browser and showcases Slantit, a tool for making product videos.
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
Welcome to MakePad, a new way to build UI for web and native using WebAssembly and Rust. JavaScript is not suitable for complex applications like IDEs and design tools. Rust, a new programming language, was used to reimagine MakePad, resulting in a fast and efficient platform. MakePad offers live editing, high CPU performance, and the ability to load native instrument components. The future of MakePad includes an open-source release, a design tool, and support for importing 3D models.

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.