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.

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.

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.

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.

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 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
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.
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
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.
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
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.
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.