| OLD | NEW |
| (Empty) |
| 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 // Returned by |getDevices| to identify a connected USB device. | |
| 23 dictionary Device { | |
| 24 // The id of the USB device. It remains unchanged until the device is | |
| 25 // unplugged. | |
| 26 long device; | |
| 27 long vendorId; | |
| 28 long productId; | |
| 29 }; | |
| 30 | |
| 31 // Returned by |openDevice| to be used for USB communication. | |
| 32 // Every time a device is opened, a new connection handle is created. | |
| 33 // | |
| 34 // A connection handle represents the underlying data structure that contains | |
| 35 // all the data we need to communicate with a USB device, including the status | |
| 36 // of interfaces, the pending transfers, the descriptors, and etc. A connectin | |
| 37 // handle id is different from a USB device id. | |
| 38 // | |
| 39 // All connection handles can work together if the device allows it. | |
| 40 // The connection handle will be automatically closed when the app is reloaded | |
| 41 // or suspended. | |
| 42 // | |
| 43 // When a connection handle is closed, all the interfaces it claimed will be | |
| 44 // released and all the transfers in progress will be canceled immediately. | |
| 45 dictionary ConnectionHandle { | |
| 46 // The id of the USB connection handle. | |
| 47 long handle; | |
| 48 long vendorId; | |
| 49 long productId; | |
| 50 }; | |
| 51 | |
| 52 dictionary EndpointDescriptor { | |
| 53 long address; | |
| 54 TransferType type; | |
| 55 Direction direction; | |
| 56 long maximumPacketSize; | |
| 57 | |
| 58 // Used for isochronous mode. | |
| 59 SynchronizationType? synchronization; | |
| 60 UsageType? usage; | |
| 61 | |
| 62 // If this is an interrupt endpoint, this will be 1-255. | |
| 63 long? pollingInterval; | |
| 64 }; | |
| 65 | |
| 66 dictionary InterfaceDescriptor { | |
| 67 long interfaceNumber; | |
| 68 long alternateSetting; | |
| 69 long interfaceClass; | |
| 70 long interfaceSubclass; | |
| 71 long interfaceProtocol; | |
| 72 DOMString? description; | |
| 73 EndpointDescriptor[] endpoints; | |
| 74 }; | |
| 75 | |
| 76 // ControlTransferInfo represents that parameters to a single USB control | |
| 77 // transfer. | |
| 78 dictionary ControlTransferInfo { | |
| 79 // The direction of this transfer. | |
| 80 Direction direction; | |
| 81 | |
| 82 // The intended recipient for this transfer. | |
| 83 Recipient recipient; | |
| 84 | |
| 85 // The type of this request. | |
| 86 RequestType requestType; | |
| 87 | |
| 88 long request; | |
| 89 long value; | |
| 90 long index; | |
| 91 | |
| 92 // If this transfer is an input transfer, then this field must be set to | |
| 93 // indicate the expected data length. If this is an output transfer, then | |
| 94 // this field is ignored. | |
| 95 long? length; | |
| 96 | |
| 97 // The data payload carried by this transfer. If this is an output transfer | |
| 98 // then this field must be set. | |
| 99 ArrayBuffer? data; | |
| 100 }; | |
| 101 | |
| 102 // GenericTransferInfo is used by both bulk and interrupt transfers to | |
| 103 // specify the parameters of the transfer. | |
| 104 dictionary GenericTransferInfo { | |
| 105 // The direction of this transfer. | |
| 106 Direction direction; | |
| 107 | |
| 108 long endpoint; | |
| 109 | |
| 110 // If this is an input transfer then this field indicates the size of the | |
| 111 // input buffer. If this is an output transfer then this field is ignored. | |
| 112 long? length; | |
| 113 | |
| 114 // If this is an output transfer then this field must be populated. | |
| 115 // Otherwise, it will be ignored. | |
| 116 ArrayBuffer? data; | |
| 117 }; | |
| 118 | |
| 119 // IsochronousTransferInfo describes a single multi-packet isochronous | |
| 120 // transfer. | |
| 121 dictionary IsochronousTransferInfo { | |
| 122 // All of the normal transfer parameters are encapsulated in the | |
| 123 // transferInfo parameters. Note that the data specified in this parameter | |
| 124 // block is split along packetLength boundaries to form the individual | |
| 125 // packets of the transfer. | |
| 126 GenericTransferInfo transferInfo; | |
| 127 | |
| 128 // The total number of packets in this transfer. | |
| 129 long packets; | |
| 130 | |
| 131 // The length of each of the packets in this transfer. | |
| 132 long packetLength; | |
| 133 }; | |
| 134 | |
| 135 dictionary TransferResultInfo { | |
| 136 // A value of 0 indicates that the transfer was a success. Other values | |
| 137 // indicate failure. | |
| 138 long? resultCode; | |
| 139 | |
| 140 // If the transfer was an input transfer then this field will contain all | |
| 141 // of the input data requested. | |
| 142 ArrayBuffer? data; | |
| 143 }; | |
| 144 | |
| 145 // Describes the properties of devices which are found via |getDevices|. | |
| 146 dictionary EnumerateDevicesOptions { | |
| 147 long vendorId; | |
| 148 long productId; | |
| 149 }; | |
| 150 | |
| 151 // Describes the properties of devices which are found via |findDevices|. | |
| 152 dictionary EnumerateDevicesAndRequestAccessOptions { | |
| 153 long vendorId; | |
| 154 long productId; | |
| 155 // The interface id to request access against. | |
| 156 // Only available on ChromeOS. It has no effect on other platforms. | |
| 157 long? interfaceId; | |
| 158 }; | |
| 159 | |
| 160 callback VoidCallback = void (); | |
| 161 callback GetDevicesCallback = void (Device[] devices); | |
| 162 callback RequestAccessCallback = void (boolean sucess); | |
| 163 callback OpenDeviceCallback = void (ConnectionHandle handle); | |
| 164 callback FindDevicesCallback = void (ConnectionHandle[] handles); | |
| 165 callback ListInterfacesCallback = void (InterfaceDescriptor[] descriptors); | |
| 166 callback CloseDeviceCallback = void (); | |
| 167 callback TransferCallback = void (TransferResultInfo info); | |
| 168 callback ResetDeviceCallback = void(boolean result); | |
| 169 | |
| 170 interface Functions { | |
| 171 // Lists USB devices specified by vendorId/productId/interfaceId tuple. | |
| 172 // |options|: The properties to search for on target devices. | |
| 173 // |callback|: Invoked with a list of |Device|s on complete. | |
| 174 static void getDevices(EnumerateDevicesOptions options, | |
| 175 GetDevicesCallback callback); | |
| 176 | |
| 177 // This method is ChromeOS specific. Calling this method on other platforms | |
| 178 // will fail. | |
| 179 // Requests access from the permission broker to an OS claimed device if the | |
| 180 // given interface on the device is not claimed. | |
| 181 // | |
| 182 // |device|: The device to request access to. | |
| 183 // |interfaceId|: | |
| 184 static void requestAccess(Device device, | |
| 185 long interfaceId, | |
| 186 RequestAccessCallback callback); | |
| 187 | |
| 188 // Opens a USB device returned by |getDevices|. | |
| 189 // |device|: The device to open. | |
| 190 // |callback|: Invoked with the created ConnectionHandle on complete. | |
| 191 static void openDevice(Device device, OpenDeviceCallback callback); | |
| 192 | |
| 193 // Finds USB devices specified by the vendorId/productId/interfaceId tuple | |
| 194 // and, if permissions allow, opens them for use. | |
| 195 // | |
| 196 // On Chrome OS, you can specify the interfaceId. In that case the method | |
| 197 // will request access from permission broker in the same way as in | |
| 198 // |requestUsbAcess|. | |
| 199 // | |
| 200 // If the access request is rejected, or the device is failed to be opened, | |
| 201 // its connection handle will not be created or returned. | |
| 202 // | |
| 203 // Calling this method is equivalent to calling |getDevices| followed by | |
| 204 // a series of |requestAccess| (if it is on ChromeOs) and |openDevice| | |
| 205 // calls, and returning all the successfully opened connection handles. | |
| 206 // | |
| 207 // |options|: The properties to search for on target devices. | |
| 208 // |callback|: Invoked with the opened ConnectionHandle on complete. | |
| 209 static void findDevices(EnumerateDevicesAndRequestAccessOptions options, | |
| 210 FindDevicesCallback callback); | |
| 211 | |
| 212 // Closes a connection handle. Invoking operations on a device after it | |
| 213 // has been closed is a safe operation, but causes no action to be taken. | |
| 214 // |handle|: The connection handle to close. | |
| 215 // |callback|: The callback to invoke once the device is closed. | |
| 216 static void closeDevice(ConnectionHandle handle, | |
| 217 optional CloseDeviceCallback callback); | |
| 218 | |
| 219 // Lists all the interfaces on the USB device. | |
| 220 // |handle|: The device from which the interfaces should be listed. | |
| 221 // |callback|: The callback to invoke when the interfaces are enumerated. | |
| 222 static void listInterfaces(ConnectionHandle handle, | |
| 223 ListInterfacesCallback callback); | |
| 224 | |
| 225 // Claims an interface on the specified USB device. | |
| 226 // Before you can transfer data with endpoints, you must claim their parent | |
| 227 // interfaces. Only one connection handle on the same host can claim each | |
| 228 // interface. If the interface is already claimed, this call will fail. | |
| 229 // | |
| 230 // You shall call releaseInterface when the interface is not needed anymore. | |
| 231 // | |
| 232 // |handle|: The device on which the interface is to be claimed. | |
| 233 // |interface|: The interface number to be claimed. | |
| 234 // |callback|: The callback to invoke once the interface is claimed. | |
| 235 static void claimInterface(ConnectionHandle handle, long interfaceNumber, | |
| 236 VoidCallback callback); | |
| 237 | |
| 238 // Releases a claim to an interface on the provided device. | |
| 239 // |handle|: The device on which the interface is to be released. | |
| 240 // |interface|: The interface number to be released. | |
| 241 // |callback|: The callback to invoke once the interface is released. | |
| 242 static void releaseInterface(ConnectionHandle handle, long interfaceNumber, | |
| 243 VoidCallback callback); | |
| 244 | |
| 245 // Selects an alternate setting on a previously claimed interface on a | |
| 246 // device. | |
| 247 // |handle|: The device on which the interface settings are to be set. | |
| 248 // |interface|: The interface number to be set. | |
| 249 // |alternateSetting|: The alternate setting to set. | |
| 250 // |callback|: The callback to invoke once the interface setting is set. | |
| 251 static void setInterfaceAlternateSetting(ConnectionHandle handle, | |
| 252 long interfaceNumber, | |
| 253 long alternateSetting, | |
| 254 VoidCallback callback); | |
| 255 | |
| 256 // Performs a control transfer on the specified device. See the | |
| 257 // ControlTransferInfo structure for the parameters required to make a | |
| 258 // transfer. | |
| 259 // | |
| 260 // Conceptually control transfer talks to the device itself. You do not need | |
| 261 // to claim interface 0 to perform a control transfer. | |
| 262 // | |
| 263 // |handle|: A connection handle to make the transfer on. | |
| 264 // |transferInfo|: The parameters to the transfer. See ControlTransferInfo. | |
| 265 // |callback|: Invoked once the transfer has completed. | |
| 266 static void controlTransfer(ConnectionHandle handle, | |
| 267 ControlTransferInfo transferInfo, | |
| 268 TransferCallback callback); | |
| 269 | |
| 270 // Performs a bulk transfer on the specified device. | |
| 271 // |handle|: A connection handle to make the transfer on. | |
| 272 // |transferInfo|: The parameters to the transfer. See GenericTransferInfo. | |
| 273 // |callback|: Invoked once the transfer has completed. | |
| 274 static void bulkTransfer(ConnectionHandle handle, | |
| 275 GenericTransferInfo transferInfo, | |
| 276 TransferCallback callback); | |
| 277 | |
| 278 // Performs an interrupt transfer on the specified device. | |
| 279 // |handle|: A connection handle to make the transfer on. | |
| 280 // |transferInfo|: The parameters to the transfer. See GenericTransferInfo. | |
| 281 // |callback|: Invoked once the transfer has completed. | |
| 282 static void interruptTransfer(ConnectionHandle handle, | |
| 283 GenericTransferInfo transferInfo, | |
| 284 TransferCallback callback); | |
| 285 | |
| 286 // Performs an isochronous transfer on the specific device. | |
| 287 // |handle|: A connection handle to make the transfer on. | |
| 288 // |transferInfo|: The parameters to the transfer. See | |
| 289 // IsochronousTransferInfo. | |
| 290 // |callback|: Invoked once the transfer has been completed. | |
| 291 static void isochronousTransfer(ConnectionHandle handle, | |
| 292 IsochronousTransferInfo transferInfo, | |
| 293 TransferCallback callback); | |
| 294 | |
| 295 // Tries to reset the USB device and restores it to the previous status. | |
| 296 // If the reset fails, the given connection handle will be closed and the | |
| 297 // USB device will appear to be disconnected then reconnected. | |
| 298 // In that case you must call |getDevices| or |findDevices| again to acquire | |
| 299 // the device. | |
| 300 // | |
| 301 // |handle|: A connection handle to reset. | |
| 302 // |callback|: Invoked once the device is reset with a boolean indicating | |
| 303 // whether the reset is completed successfully. | |
| 304 static void resetDevice(ConnectionHandle handle, | |
| 305 ResetDeviceCallback callback); | |
| 306 }; | |
| 307 }; | |
| OLD | NEW |