Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / api / usb.idl
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 };