HIDDevice
=========

Limited availability
--------------------

This feature is not Baseline because it does not work in some of the most widely-used browsers.

* Learn more
* See full compatibility
* Report feedback
**Secure context:** This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

**Experimental:** **This is an experimental technology**  
Check the Browser compatibility table carefully before using this in production.

The **`HIDDevice`** interface of the `WebHID API` represents a HID Device. It provides properties for accessing information about the device, methods for opening and closing the connection, and the sending and receiving of reports.

EventTarget

HIDDeviceInstance properties
-------------------

This interface also inherits properties from `EventTarget`.

`HIDDevice.opened` Read only  
Experimental

Returns a `boolean`, true if the device has an open connection.

`HIDDevice.vendorId` Read only  
Experimental

Returns the vendorId of the HID device.

`HIDDevice.productId` Read only  
Experimental

Returns the productID of the HID device.

`HIDDevice.productName` Read only  
Experimental

Returns a string containing the product name of the HID device.

`HIDDevice.collections` Read only  
Experimental

Returns an array of report formats for the HID device.

### Events

`inputreport` 
Experimental

Fires when a report is sent from the device.

Instance methods
----------------

This interface also inherits methods from `EventTarget`.

`HIDDevice.open()` 
Experimental

Opens a connection to this HID device, and returns a `Promise` which resolves once the connection has been successful.

`HIDDevice.close()` 
Experimental

Closes the connection to this HID device, and returns a `Promise` which resolves once the connection has been closed.

`HIDDevice.forget()` 
Experimental

Closes the connection to this HID device and resets access permission, and returns a `Promise` which resolves once the permission was reset.

`HIDDevice.sendReport()` 
Experimental

Sends an output report to this HID Device, and returns a `Promise` which resolves once the report has been sent.

`HIDDevice.sendFeatureReport()` 
Experimental

Sends a feature report to this HID device, and returns a `Promise` which resolves once the report has been sent.

`HIDDevice.receiveFeatureReport()` 
Experimental

Receives a feature report from this HID device in the form of a `Promise` which resolves with a `DataView`. This allows typed access to the contents of this message.

Examples
--------

The following example demonstrates listening for an `inputreport` event that will allow the application to detect which button is pressed on a Joy-Con Right device.


```js
device.addEventListener("inputreport", (event) => {
  const { data, device, reportId } = event;

  // Handle only the Joy-Con Right device and a specific report ID.
  if (device.productId !== 0x2007 && reportId !== 0x3f) return;

  const value = data.getUint8(0);
  if (value === 0) return;

  const someButtons = { 1: "A", 2: "X", 4: "B", 8: "Y" };
  console.log(`User pressed button ${someButtons[value]}.`);
});
```


In the following example `sendFeatureReport` is used to make a device blink.


```js
const reportId = 1;
for (let i = 0; i < 10; i++) {
  // Turn off
  await device.sendFeatureReport(reportId, Uint32Array.from([0, 0]));
  await waitFor(100);
  // Turn on
  await device.sendFeatureReport(reportId, Uint32Array.from([512, 0]));
  await waitFor(100);
}
```


You can see more examples, and live demos in the article Connecting to uncommon HID devices.

Specifications
--------------

| Specification |
| --- |
| WebHID API # dom-hiddevice |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.