Home | History | Annotate | Download | only in api
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Use the <code>chrome.usb</code> API to interact with connected USB
      6 // devices. This API provides access to USB operations from within the context
      7 // of an app. Using this API, apps can function as drivers for hardware devices.
      8 namespace usb {
      9 
     10   // Direction, Recipient, RequestType, and TransferType all map to their
     11   // namesakes within the USB specification.
     12   enum Direction {in, out};
     13   enum Recipient {device, _interface, endpoint, other};
     14   enum RequestType {standard, class, vendor, reserved};
     15   enum TransferType {control, interrupt, isochronous, bulk};
     16 
     17   // For isochronous mode, SynchronizationType and UsageType map to their
     18   // namesakes within the USB specification.
     19   enum SynchronizationType {asynchronous, adaptive, synchronous};
     20   enum UsageType {data, feedback, explicitFeedback};
     21 
     22   // A Device encapsulates everything that is needed to communicate with a USB
     23   // device. They are returned by findDevice calls and have all of their
     24   // fields populated before being returned.
     25   dictionary Device {
     26     long handle;
     27     long vendorId;
     28     long productId;
     29   };
     30 
     31   dictionary EndpointDescriptor {
     32     long address;
     33     TransferType type;
     34     Direction direction;
     35     long maximumPacketSize;
     36 
     37     // Used for isochronous mode.
     38     SynchronizationType? synchronization;
     39     UsageType? usage;
     40 
     41     // If this is an interrupt endpoint, this will be 1-255
     42     long? pollingInterval;
     43   };
     44 
     45   dictionary InterfaceDescriptor {
     46     long interfaceNumber;
     47     long alternateSetting;
     48     long interfaceClass;
     49     long interfaceSubclass;
     50     long interfaceProtocol;
     51     DOMString? description;
     52     EndpointDescriptor[] endpoints;
     53   };
     54 
     55   // ControlTransferInfo represents that parameters to a single USB control
     56   // transfer.
     57   dictionary ControlTransferInfo {
     58     // The direction of this transfer.
     59     Direction direction;
     60 
     61     // The intended recipient for this transfer.
     62     Recipient recipient;
     63 
     64     // The type of this request.
     65     RequestType requestType;
     66 
     67     long request;
     68     long value;
     69     long index;
     70 
     71     // If this transfer is an input transfer, then this field must be set to
     72     // indicate the expected data length. If this is an output transfer, then
     73     // this field is ignored.
     74     long? length;
     75 
     76     // The data payload carried by this transfer. If this is an output tranfer
     77     // then this field must be set.
     78     ArrayBuffer? data;
     79   };
     80 
     81   // GenericTransferInfo is used by both bulk and interrupt transfers to
     82   // specify the parameters of the transfer.
     83   dictionary GenericTransferInfo {
     84     // The direction of this transfer.
     85     Direction direction;
     86 
     87     long endpoint;
     88 
     89     // If this is an input transfer then this field indicates the size of the
     90     // input buffer. If this is an output transfer then this field is ignored.
     91     long? length;
     92 
     93     // If this is an output transfer then this field must be populated.
     94     // Otherwise, it will be ignored.
     95     ArrayBuffer? data;
     96   };
     97 
     98   // IsochronousTransferInfo describes a single multi-packet isochronous
     99   // transfer.
    100   dictionary IsochronousTransferInfo {
    101     // All of the normal transfer parameters are encapsulated in the
    102     // transferInfo parameters. Note that the data specified in this parameter
    103     // block is split along packetLength boundaries to form the individual
    104     // packets of the transfer.
    105     GenericTransferInfo transferInfo;
    106 
    107     // The total number of packets in this transfer.
    108     long packets;
    109 
    110     // The length of each of the packets in this transfer.
    111     long packetLength;
    112   };
    113 
    114   dictionary TransferResultInfo {
    115     // A value of 0 indicates that the transfer was a success. Other values
    116     // indicate failure.
    117     long? resultCode;
    118 
    119     // If the transfer was an input transfer then this field will contain all
    120     // of the input data requested.
    121     ArrayBuffer? data;
    122   };
    123 
    124   // FindDevicesOptions describes the properties of devices which are found and
    125   // opened via findDevices.
    126   dictionary FindDevicesOptions {
    127     long vendorId;
    128     long productId;
    129     long? interfaceId;
    130   };
    131 
    132   callback VoidCallback = void ();
    133   callback FindDevicesCallback = void (Device[] device);
    134   callback ListInterfacesCallback = void (InterfaceDescriptor[] descriptors);
    135   callback CloseDeviceCallback = void ();
    136   callback TransferCallback = void (TransferResultInfo info);
    137   callback ResetDeviceCallback = void(boolean result);
    138 
    139   interface Functions {
    140     // Finds the first instance of the USB device specified by the vendorId/
    141     // productId pair and, if permissions allow, opens it for use.
    142     // Upon successfully opening a device the callback is invoked with a
    143     // populated Device object. On failure, the callback is invoked with null.
    144     // |options|: The properties to search for on target devices.
    145     // |callback|: Invoked with the opened Device on success.
    146     static void findDevices(FindDevicesOptions options,
    147         FindDevicesCallback callback);
    148 
    149     // Closes an open device instance. Invoking operations on a device after it
    150     // has been closed is a safe operation, but causes no action to be taken.
    151     // |device|: The device to close.
    152     // |callback|: The callback to invoke once the device is closed.
    153     static void closeDevice(Device device,
    154         optional CloseDeviceCallback callback);
    155 
    156     // Lists all the interfaces on the USB device.
    157     // |device|: The device from which the interfaces should be listed.
    158     // |callback|: The callback to invoke when the interfaces are enumerated.
    159     static void listInterfaces(Device device,
    160         ListInterfacesCallback callback);
    161 
    162     // Claims an interface on the specified USB device.
    163     // |device|: The device on which the interface is to be claimed.
    164     // |interface|: The interface number to be claimed.
    165     // |callback|: The callback to invoke once the interface is claimed.
    166     static void claimInterface(Device device, long interfaceNumber,
    167         VoidCallback callback);
    168 
    169     // Releases a claim to an interface on the provided device.
    170     // |device|: The device on which the interface is to be released.
    171     // |interface|: The interface number to be released.
    172     // |callback|: The callback to invoke once the interface is released.
    173     static void releaseInterface(Device device, long interfaceNumber,
    174         VoidCallback callback);
    175 
    176     // Selects an alternate setting on a previously claimed interface on a
    177     // device.
    178     // |device|: The device on which the interface settings are to be set.
    179     // |interface|: The interface number to be set.
    180     // |alternateSetting|: The alternate setting to set.
    181     // |callback|: The callback to invoke once the interface setting is set.
    182     static void setInterfaceAlternateSetting(Device device,
    183         long interfaceNumber, long alternateSetting, VoidCallback callback);
    184 
    185     // Performs a control transfer on the specified device. See the
    186     // ControlTransferInfo structure for the parameters required to make a
    187     // transfer.
    188     // |device|: An open device to make the transfer on.
    189     // |transferInfo|: The parameters to the transfer. See ControlTransferInfo.
    190     // |callback|: Invoked once the transfer has completed.
    191     static void controlTransfer(Device device,
    192         ControlTransferInfo transferInfo, TransferCallback callback);
    193 
    194     // Performs a bulk transfer on the specified device.
    195     // |device|: An open device to make the transfer on.
    196     // |transferInfo|: The paramters to the transfer. See GenericTransferInfo.
    197     // |callback|: Invoked once the transfer has completed.
    198     static void bulkTransfer(Device device, GenericTransferInfo transferInfo,
    199         TransferCallback callback);
    200 
    201     // Performs an interrupt transfer on the specified device.
    202     // |device|: An open device to make the transfer on.
    203     // |transferInfo|: The paramters to the transfer. See GenericTransferInfo.
    204     // |callback|: Invoked once the transfer has completed.
    205     static void interruptTransfer(Device device,
    206         GenericTransferInfo transferInfo, TransferCallback callback);
    207 
    208     // Performs an isochronous transfer on the specific device.
    209     // |device|: An open device to make the transfer on.
    210     // |transferInfo|: The parameters to the transfer. See
    211     // IsochronousTransferInfo.
    212     // |callback|: Invoked once the transfer has been completed.
    213     static void isochronousTransfer(Device device,
    214         IsochronousTransferInfo transferInfo,
    215         TransferCallback callback);
    216 
    217     // Try to reset the USB device and restore the previous status.
    218     //
    219     // If the reset fails, the given device will be closed and the USB device
    220     // will appear to be disconected and reconnected.
    221     // You must call <code>findDevice</code> again to acquire the device.
    222     //
    223     // |device|: An opened device to reset.
    224     // |callback|: Invoked once the device is reset with a boolean indicating
    225     // whether the reset is completed successfully.
    226     static void resetDevice(Device device,
    227         ResetDeviceCallback callback);
    228   };
    229 };
    230