USBDevice
=========

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
**Experimental:** **This is an experimental technology**  
Check the Browser compatibility table carefully before using this in production.

The **`USBDevice`** interface of the WebUSB API provides access to metadata about a paired USB device and methods for controlling it.

Instance properties
-------------------

`USBDevice.configuration` Read only  
Experimental

A `USBConfiguration` object for the currently selected interface for a paired USB device.

`USBDevice.configurations` Read only  
Experimental

An `array` of device-specific interfaces for controlling a paired USB device.

`USBDevice.deviceClass` Read only  
Experimental

One of three properties that identify USB devices for the purpose of loading a USB driver that will work with that device. The other two properties are `USBDevice.deviceSubclass` and `USBDevice.deviceProtocol`.

`USBDevice.deviceProtocol` Read only  
Experimental

One of three properties that identify USB devices for the purpose of loading a USB driver that will work with that device. The other two properties are `USBDevice.deviceClass` and `USBDevice.deviceSubclass`.

`USBDevice.deviceSubclass` Read only  
Experimental

One of three properties that identify USB devices for the purpose of loading a USB driver that will work with that device. The other two properties are `USBDevice.deviceClass` and `USBDevice.deviceProtocol`.

`USBDevice.deviceVersionMajor` Read only  
Experimental

The major version number of the device in a semantic versioning scheme.

`USBDevice.deviceVersionMinor` Read only  
Experimental

The minor version number of the device in a semantic versioning scheme.

`USBDevice.deviceVersionSubminor` Read only  
Experimental

The patch version number of the device in a semantic versioning scheme.

`USBDevice.manufacturerName` Read only  
Experimental

The name of the organization that manufactured the USB device.

`USBDevice.opened` Read only  
Experimental

Indicates whether a session has been started with a paired USB device.

`USBDevice.productId` Read only  
Experimental

The manufacturer-defined code that identifies a USB device.

`USBDevice.productName` Read only  
Experimental

The manufacturer-defined name that identifies a USB device.

`USBDevice.serialNumber` Read only  
Experimental

The manufacturer-defined serial number for the specific USB device.

`USBDevice.usbVersionMajor` Read only  
Experimental

One of three properties that declare the USB protocol version supported by the device. The other two properties are `USBDevice.usbVersionMinor` and `USBDevice.usbVersionSubminor`.

`USBDevice.usbVersionMinor` Read only  
Experimental

One of three properties that declare the USB protocol version supported by the device. The other two properties are `USBDevice.usbVersionMajor` and `USBDevice.usbVersionSubminor`.

`USBDevice.usbVersionSubminor` Read only  
Experimental

One of three properties that declare the USB protocol version supported by the device. The other two properties are `USBDevice.usbVersionMajor` and `USBDevice.usbVersionMinor`.

`USBDevice.vendorId` Read only  
Experimental

The official usb.org-assigned vendor ID.

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

`USBDevice.claimInterface()` 
Experimental

Returns a `Promise` that resolves when the requested interface is claimed for exclusive access.

`USBDevice.clearHalt()` 
Experimental

Returns a `Promise` that resolves when a halt condition is cleared.

`USBDevice.controlTransferIn()` 
Experimental

Returns a `Promise` that resolves with a `USBInTransferResult` when a command or status operation has been transmitted to the USB device.

`USBDevice.controlTransferOut()` 
Experimental

Returns a `Promise` that resolves with a `USBOutTransferResult` when a command or status operation has been transmitted from the USB device.

`USBDevice.close()` 
Experimental

Returns a `Promise` that resolves when all open interfaces are released and the device session has ended.

`USBDevice.forget()` 
Experimental

Returns a `Promise` that resolves after all open interfaces are released, the device session has ended, and the permission is reset.

`USBDevice.isochronousTransferIn()` 
Experimental

Returns a `Promise` that resolves with a `USBIsochronousInTransferResult` when time sensitive information has been transmitted to the USB device.

`USBDevice.isochronousTransferOut()` 
Experimental

Returns a `Promise` that resolves with a `USBIsochronousOutTransferResult` when time sensitive information has been transmitted from the USB device.

`USBDevice.open()` 
Experimental

Returns a `Promise` that resolves when a device session has started.

`USBDevice.releaseInterface()` 
Experimental

Returns a `Promise` that resolves when a claimed interface is released from exclusive access.

`USBDevice.reset()` 
Experimental

Returns a `Promise` that resolves when the device is reset and all app operations canceled and their promises rejected.

`USBDevice.selectAlternateInterface()` 
Experimental

Returns a `Promise` that resolves when the specified alternative endpoint is selected.

`USBDevice.selectConfiguration()` 
Experimental

Returns a `Promise` that resolves when the specified configuration is selected.

`USBDevice.transferIn()` 
Experimental

Returns a `Promise` that resolves with a `USBInTransferResult` when bulk or interrupt data is received from the USB device.

`USBDevice.transferOut()` 
Experimental

Returns a `Promise` that resolves with a `USBOutTransferResult` when bulk or interrupt data is sent to the USB device.

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

| Specification |
| --- |
| WebUSB API # device-usage |

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

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