Index: extensions/common/api/usb.idl |
diff --git a/extensions/common/api/usb.idl b/extensions/common/api/usb.idl |
index 278171e4b6e5dff9f3ea17f9cbfd4b676a2f8ff9..e1f53c23676c54415822fb7d960321cb4cb51dd3 100644 |
--- a/extensions/common/api/usb.idl |
+++ b/extensions/common/api/usb.idl |
@@ -5,6 +5,10 @@ |
// Use the <code>chrome.usb</code> API to interact with connected USB |
// devices. This API provides access to USB operations from within the context |
// of an app. Using this API, apps can function as drivers for hardware devices. |
+// |
+// Errors generated by this API are reported by setting |
+// $(ref:runtime.lastError) and executing the function's regular callback. The |
+// callback's regular parameters will be undefined in this case. |
namespace usb { |
// Direction, Recipient, RequestType, and TransferType all map to their |
@@ -19,110 +23,107 @@ namespace usb { |
enum SynchronizationType {asynchronous, adaptive, synchronous}; |
enum UsageType {data, feedback, explicitFeedback}; |
- // Returned by |getDevices| to identify a connected USB device. |
dictionary Device { |
- // The id of the USB device. It remains unchanged until the device is |
+ // An opaque ID for the USB device. It remains unchanged until the device is |
// unplugged. |
long device; |
+ // The device vendor ID. |
long vendorId; |
+ // The product ID. |
long productId; |
}; |
- // Returned by |openDevice| to be used for USB communication. |
- // Every time a device is opened, a new connection handle is created. |
- // |
- // A connection handle represents the underlying data structure that contains |
- // all the data we need to communicate with a USB device, including the status |
- // of interfaces, the pending transfers, the descriptors, and etc. A connectin |
- // handle id is different from a USB device id. |
- // |
- // All connection handles can work together if the device allows it. |
- // The connection handle will be automatically closed when the app is reloaded |
- // or suspended. |
- // |
- // When a connection handle is closed, all the interfaces it claimed will be |
- // released and all the transfers in progress will be canceled immediately. |
dictionary ConnectionHandle { |
- // The id of the USB connection handle. |
+ // An opaque handle representing this connection to the USB device and all |
+ // associated claimed interfaces and pending transfers. A new handle is |
+ // created each time the device is opened. The connection handle is |
+ // different from $(ref:Device.device). |
long handle; |
+ // The device vendor ID. |
long vendorId; |
+ // The product ID. |
long productId; |
}; |
- dictionary EndpointDescriptor { |
+ [noinline_doc] dictionary EndpointDescriptor { |
+ // Endpoint address. |
long address; |
+ // Transfer type. |
TransferType type; |
+ // Transfer direction. |
Direction direction; |
+ // Maximum packet size. |
long maximumPacketSize; |
- |
- // Used for isochronous mode. |
+ // Transfer synchronization mode (isochronous only). |
SynchronizationType? synchronization; |
+ // Endpoint usage hint. |
UsageType? usage; |
- |
- // If this is an interrupt endpoint, this will be 1-255. |
+ // Polling interval (interrupt and isochronous only). |
long? pollingInterval; |
}; |
- dictionary InterfaceDescriptor { |
+ [noinline_doc] dictionary InterfaceDescriptor { |
+ // The interface number. |
long interfaceNumber; |
+ // The interface alternate setting number (defaults to <code>0</code). |
long alternateSetting; |
+ // The USB interface class. |
long interfaceClass; |
+ // The USB interface sub-class. |
long interfaceSubclass; |
+ // The USB interface protocol. |
long interfaceProtocol; |
+ // Description of the interface. |
DOMString? description; |
+ // Available endpoints. |
EndpointDescriptor[] endpoints; |
}; |
- // ControlTransferInfo represents that parameters to a single USB control |
- // transfer. |
dictionary ControlTransferInfo { |
- // The direction of this transfer. |
+ // The transfer direction (<code>"in"</code> or <code>"out"</code>). |
Direction direction; |
- // The intended recipient for this transfer. |
+ // The transfer target. The target given by <code>index</code> must be |
+ // claimed if <code>"interface"</code> or <code>"endpoint"</code>. |
Recipient recipient; |
- // The type of this request. |
+ // The request type. |
RequestType requestType; |
+ // The <code>bRequest</code> field, see <i>Universal Serial Bus Specification |
+ // Revision 1.1</i> § 9.3. |
long request; |
+ // The <code>wValue</code> field, see <i>Ibid</i>. |
long value; |
+ // The <code>wIndex</code> field, see <i>Ibid</i>. |
long index; |
- // If this transfer is an input transfer, then this field must be set to |
- // indicate the expected data length. If this is an output transfer, then |
- // this field is ignored. |
+ // The amount of data to receive (required only by input transfers). |
long? length; |
- // The data payload carried by this transfer. If this is an output transfer |
- // then this field must be set. |
+ // The data to transmit (required only by output transfers). |
ArrayBuffer? data; |
}; |
- // GenericTransferInfo is used by both bulk and interrupt transfers to |
- // specify the parameters of the transfer. |
dictionary GenericTransferInfo { |
- // The direction of this transfer. |
+ // The transfer direction (<code>"in"</code> or <code>"out"</code>). |
Direction direction; |
+ // The target endpoint address. The interface containing this endpoint must |
+ // be claimed. |
long endpoint; |
- // If this is an input transfer then this field indicates the size of the |
- // input buffer. If this is an output transfer then this field is ignored. |
+ // The amount of data to receive (required only by input transfers). |
long? length; |
- // If this is an output transfer then this field must be populated. |
- // Otherwise, it will be ignored. |
+ // The data to transmit (required only by output transfers). |
ArrayBuffer? data; |
}; |
- // IsochronousTransferInfo describes a single multi-packet isochronous |
- // transfer. |
dictionary IsochronousTransferInfo { |
- // All of the normal transfer parameters are encapsulated in the |
- // transferInfo parameters. Note that the data specified in this parameter |
- // block is split along packetLength boundaries to form the individual |
- // packets of the transfer. |
+ // Transfer parameters. The transfer length or data buffer specified in this |
+ // parameter block is split along <code>packetLength</code> boundaries to |
+ // form the individual packets of the transfer. |
GenericTransferInfo transferInfo; |
// The total number of packets in this transfer. |
@@ -133,174 +134,176 @@ namespace usb { |
}; |
dictionary TransferResultInfo { |
- // A value of 0 indicates that the transfer was a success. Other values |
- // indicate failure. |
+ // A value of <code>0</code> indicates that the transfer was a success. |
+ // Other values indicate failure. |
long? resultCode; |
- // If the transfer was an input transfer then this field will contain all |
- // of the input data requested. |
+ // The data returned by an input transfer. <code>undefined</code> for output |
+ // transfers. |
ArrayBuffer? data; |
}; |
- // Describes the properties of devices which are found via |getDevices|. |
+ [noinline_doc] dictionary DeviceFilter { |
+ // Device vendor ID. |
+ long? vendorId; |
+ // Device product ID, checked only if the vendor ID matches. |
+ long? productId; |
+ // USB interface class, matches any interface on the device. |
+ long? interfaceClass; |
+ // USB interface sub-class, checked only if the interface class matches. |
+ long? interfaceSubclass; |
+ // USB interface protocol, checked only if the interface sub-class matches. |
+ long? interfaceProtocol; |
+ }; |
+ |
dictionary EnumerateDevicesOptions { |
- long vendorId; |
- long productId; |
+ [deprecated="Equivalent to setting $(ref:DeviceFilter.vendorId)."] |
+ long? vendorId; |
+ [deprecated="Equivalent to setting $(ref:DeviceFilter.productId)."] |
+ long? productId; |
+ // A device matching any given filter will be returned. An empty filter list |
+ // will return all devices the app has permission for. |
+ DeviceFilter[]? filters; |
}; |
- // Describes the properties of devices which are found via |findDevices|. |
dictionary EnumerateDevicesAndRequestAccessOptions { |
+ // The device vendor ID. |
long vendorId; |
+ // The product ID. |
long productId; |
- // The interface id to request access against. |
+ // The interface ID to request access to. |
// Only available on ChromeOS. It has no effect on other platforms. |
long? interfaceId; |
}; |
callback VoidCallback = void (); |
callback GetDevicesCallback = void (Device[] devices); |
- callback RequestAccessCallback = void (boolean sucess); |
+ callback RequestAccessCallback = void (boolean success); |
callback OpenDeviceCallback = void (ConnectionHandle handle); |
callback FindDevicesCallback = void (ConnectionHandle[] handles); |
callback ListInterfacesCallback = void (InterfaceDescriptor[] descriptors); |
callback CloseDeviceCallback = void (); |
callback TransferCallback = void (TransferResultInfo info); |
- callback ResetDeviceCallback = void(boolean result); |
+ callback ResetDeviceCallback = void(boolean success); |
interface Functions { |
- // Lists USB devices specified by vendorId/productId/interfaceId tuple. |
+ // Enumerate connected USB devices. |
// |options|: The properties to search for on target devices. |
- // |callback|: Invoked with a list of |Device|s on complete. |
static void getDevices(EnumerateDevicesOptions options, |
GetDevicesCallback callback); |
// This method is ChromeOS specific. Calling this method on other platforms |
// will fail. |
- // Requests access from the permission broker to an OS claimed device if the |
- // given interface on the device is not claimed. |
+ // Requests access from the permission broker to a device claimed by |
+ // ChromeOS if the given interface on the device is not claimed. |
// |
- // |device|: The device to request access to. |
- // |interfaceId|: |
+ // |device|: The $(ref:Device) to request access to. |
+ // |interfaceId|: The particular interface requested. |
static void requestAccess(Device device, |
long interfaceId, |
RequestAccessCallback callback); |
- // Opens a USB device returned by |getDevices|. |
- // |device|: The device to open. |
- // |callback|: Invoked with the created ConnectionHandle on complete. |
+ // Opens a USB device returned by $(ref:getDevices). |
+ // |device|: The $(ref:Device) to open. |
static void openDevice(Device device, OpenDeviceCallback callback); |
- // Finds USB devices specified by the vendorId/productId/interfaceId tuple |
- // and, if permissions allow, opens them for use. |
+ // Finds USB devices specified by the vendor, product and (optionally) |
+ // interface IDs and if permissions allow opens them for use. |
// |
- // On Chrome OS, you can specify the interfaceId. In that case the method |
- // will request access from permission broker in the same way as in |
- // |requestUsbAcess|. |
+ // On Chrome OS, you can specify the interface ID. In that case the method |
+ // will request access from permission broker in the same way as |
+ // $(ref:requestUsbAccess). |
// |
- // If the access request is rejected, or the device is failed to be opened, |
- // its connection handle will not be created or returned. |
+ // If the access request is rejected or the device fails to be opened a |
+ // connection handle will not be created or returned. |
// |
- // Calling this method is equivalent to calling |getDevices| followed by |
- // a series of |requestAccess| (if it is on ChromeOs) and |openDevice| |
- // calls, and returning all the successfully opened connection handles. |
+ // Calling this method is equivalent to calling $(ref:getDevices followed by |
+ // $(ref:requestAccess) (if it is on ChromeOS) and $(ref:openDevice) for |
+ // each device. |
// |
// |options|: The properties to search for on target devices. |
- // |callback|: Invoked with the opened ConnectionHandle on complete. |
static void findDevices(EnumerateDevicesAndRequestAccessOptions options, |
FindDevicesCallback callback); |
- // Closes a connection handle. Invoking operations on a device after it |
- // has been closed is a safe operation, but causes no action to be taken. |
- // |handle|: The connection handle to close. |
- // |callback|: The callback to invoke once the device is closed. |
+ // Closes a connection handle. Invoking operations on a handle after it |
+ // has been closed is a safe operation but causes no action to be taken. |
+ // |handle|: The $(ref:ConnectionHandle) to close. |
static void closeDevice(ConnectionHandle handle, |
optional CloseDeviceCallback callback); |
- // Lists all the interfaces on the USB device. |
- // |handle|: The device from which the interfaces should be listed. |
- // |callback|: The callback to invoke when the interfaces are enumerated. |
+ // Lists all interfaces on a USB device. |
+ // |handle|: An open connection to the device. |
static void listInterfaces(ConnectionHandle handle, |
ListInterfacesCallback callback); |
- // Claims an interface on the specified USB device. |
- // Before you can transfer data with endpoints, you must claim their parent |
- // interfaces. Only one connection handle on the same host can claim each |
- // interface. If the interface is already claimed, this call will fail. |
+ // Claims an interface on a USB device. |
+ // Before data can be transfered to an interface or associated endpoints the |
+ // interface must be claimed. Only one connection handle can claim an |
+ // interface at any given time. If the interface is already claimed, this |
+ // call will fail. |
// |
- // You shall call releaseInterface when the interface is not needed anymore. |
+ // $(ref:releaseInterface) should be called when the interface is no longer |
+ // needed. |
// |
- // |handle|: The device on which the interface is to be claimed. |
- // |interface|: The interface number to be claimed. |
- // |callback|: The callback to invoke once the interface is claimed. |
+ // |handle|: An open connection to the device. |
+ // |interfaceNumber|: The interface to be claimed. |
static void claimInterface(ConnectionHandle handle, long interfaceNumber, |
VoidCallback callback); |
- // Releases a claim to an interface on the provided device. |
- // |handle|: The device on which the interface is to be released. |
- // |interface|: The interface number to be released. |
- // |callback|: The callback to invoke once the interface is released. |
+ // Releases a claimed interface. |
+ // |handle|: An open connection to the device. |
+ // |interfaceNumber|: The interface to be released. |
static void releaseInterface(ConnectionHandle handle, long interfaceNumber, |
VoidCallback callback); |
- // Selects an alternate setting on a previously claimed interface on a |
- // device. |
- // |handle|: The device on which the interface settings are to be set. |
- // |interface|: The interface number to be set. |
- // |alternateSetting|: The alternate setting to set. |
- // |callback|: The callback to invoke once the interface setting is set. |
+ // Selects an alternate setting on a previously claimed interface. |
+ // |handle|: An open connection to the device where this interface has been |
+ // claimed. |
+ // |interfaceNumber|: The interface to configure. |
+ // |alternateSetting|: The alternate setting to configure. |
static void setInterfaceAlternateSetting(ConnectionHandle handle, |
long interfaceNumber, |
long alternateSetting, |
VoidCallback callback); |
- // Performs a control transfer on the specified device. See the |
- // ControlTransferInfo structure for the parameters required to make a |
- // transfer. |
+ // Performs a control transfer on the specified device. |
// |
- // Conceptually control transfer talks to the device itself. You do not need |
- // to claim interface 0 to perform a control transfer. |
+ // Control transfers refer to either the device, an interface or an |
+ // endpoint. Transfers to an interface or endpoint require the interface to |
+ // be claimed. |
// |
- // |handle|: A connection handle to make the transfer on. |
- // |transferInfo|: The parameters to the transfer. See ControlTransferInfo. |
- // |callback|: Invoked once the transfer has completed. |
+ // |handle|: An open connection to the device. |
static void controlTransfer(ConnectionHandle handle, |
ControlTransferInfo transferInfo, |
TransferCallback callback); |
// Performs a bulk transfer on the specified device. |
- // |handle|: A connection handle to make the transfer on. |
- // |transferInfo|: The parameters to the transfer. See GenericTransferInfo. |
- // |callback|: Invoked once the transfer has completed. |
+ // |handle|: An open connection to the device. |
+ // |transferInfo|: The transfer parameters. |
static void bulkTransfer(ConnectionHandle handle, |
GenericTransferInfo transferInfo, |
TransferCallback callback); |
// Performs an interrupt transfer on the specified device. |
- // |handle|: A connection handle to make the transfer on. |
- // |transferInfo|: The parameters to the transfer. See GenericTransferInfo. |
- // |callback|: Invoked once the transfer has completed. |
+ // |handle|: An open connection to the device. |
+ // |transferInfo|: The transfer parameters. |
static void interruptTransfer(ConnectionHandle handle, |
GenericTransferInfo transferInfo, |
TransferCallback callback); |
// Performs an isochronous transfer on the specific device. |
- // |handle|: A connection handle to make the transfer on. |
- // |transferInfo|: The parameters to the transfer. See |
- // IsochronousTransferInfo. |
- // |callback|: Invoked once the transfer has been completed. |
+ // |handle|: An open connection to the device. |
static void isochronousTransfer(ConnectionHandle handle, |
IsochronousTransferInfo transferInfo, |
TransferCallback callback); |
- // Tries to reset the USB device and restores it to the previous status. |
+ // Try to reset the USB device. |
Ken Rockot(use gerrit already)
2014/09/02 21:25:38
Please make the tense of these overview descriptio
Reilly Grant (use Gerrit)
2014/09/02 22:03:35
Done. Function comments are descriptive.
|
// If the reset fails, the given connection handle will be closed and the |
// USB device will appear to be disconnected then reconnected. |
- // In that case you must call |getDevices| or |findDevices| again to acquire |
- // the device. |
+ // In this case $(ref:getDevices) or $(ref:findDevices) must be called again |
+ // to acquire the device. |
// |
// |handle|: A connection handle to reset. |
- // |callback|: Invoked once the device is reset with a boolean indicating |
- // whether the reset is completed successfully. |
static void resetDevice(ConnectionHandle handle, |
ResetDeviceCallback callback); |
}; |