| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 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 module device.usb; | |
| 6 | |
| 7 enum TransferDirection { | |
| 8 IN, | |
| 9 OUT, | |
| 10 }; | |
| 11 | |
| 12 enum ControlTransferType { | |
| 13 STANDARD, | |
| 14 CLASS, | |
| 15 VENDOR, | |
| 16 RESERVED | |
| 17 }; | |
| 18 | |
| 19 enum ControlTransferRecipient { | |
| 20 DEVICE, | |
| 21 INTERFACE, | |
| 22 ENDPOINT, | |
| 23 OTHER | |
| 24 }; | |
| 25 | |
| 26 enum EndpointType { | |
| 27 BULK, | |
| 28 INTERRUPT, | |
| 29 ISOCHRONOUS, | |
| 30 }; | |
| 31 | |
| 32 struct EndpointInfo { | |
| 33 uint8 endpoint_number; | |
| 34 TransferDirection direction; | |
| 35 EndpointType type; | |
| 36 uint32 packet_size; | |
| 37 }; | |
| 38 | |
| 39 struct AlternateInterfaceInfo { | |
| 40 uint8 alternate_setting; | |
| 41 uint8 class_code; | |
| 42 uint8 subclass_code; | |
| 43 uint8 protocol_code; | |
| 44 string? interface_name; | |
| 45 array<EndpointInfo> endpoints; | |
| 46 }; | |
| 47 | |
| 48 struct InterfaceInfo { | |
| 49 uint8 interface_number; | |
| 50 array<AlternateInterfaceInfo> alternates; | |
| 51 }; | |
| 52 | |
| 53 struct ConfigurationInfo { | |
| 54 uint8 configuration_value; | |
| 55 string? configuration; | |
| 56 array<InterfaceInfo> interfaces; | |
| 57 }; | |
| 58 | |
| 59 struct DeviceInfo { | |
| 60 string guid; | |
| 61 uint16 usb_version; | |
| 62 uint8 class_code; | |
| 63 uint8 subclass_code; | |
| 64 uint8 protocol_code; | |
| 65 uint16 vendor_id; | |
| 66 uint16 product_id; | |
| 67 uint16 device_version; | |
| 68 string? manufacturer; | |
| 69 string? product; | |
| 70 string? serial_number; | |
| 71 array<ConfigurationInfo> configurations; | |
| 72 }; | |
| 73 | |
| 74 struct ControlTransferParams { | |
| 75 ControlTransferType type; | |
| 76 ControlTransferRecipient recipient; | |
| 77 uint8 request; | |
| 78 uint16 value; | |
| 79 uint16 index; | |
| 80 }; | |
| 81 | |
| 82 enum TransferStatus { | |
| 83 // The transfer completed successfully. | |
| 84 COMPLETED, | |
| 85 | |
| 86 // The transfer failed due to a non-specific error. | |
| 87 ERROR, | |
| 88 | |
| 89 // The transfer timed out. | |
| 90 TIMEOUT, | |
| 91 | |
| 92 // The transfer was cancelled. | |
| 93 CANCELLED, | |
| 94 | |
| 95 // The transfer stalled. | |
| 96 STALLED, | |
| 97 | |
| 98 // The transfer failed because the device was disconnected from the host. | |
| 99 DISCONNECT, | |
| 100 | |
| 101 // The transfer succeeded, but the device sent more data than was requested. | |
| 102 // This applies only to inbound transfers. | |
| 103 BABBLE, | |
| 104 | |
| 105 // The transfer succeeded, but the device sent less data than was requested. | |
| 106 // This applies only to inbound transfers. | |
| 107 SHORT_PACKET, | |
| 108 }; | |
| 109 | |
| 110 interface Device { | |
| 111 // Closes the device. Calling this effectively invalidates the Device object. | |
| 112 Close() => (); | |
| 113 | |
| 114 // Retrieve a DeviceInfo struct containing metadata about the device, | |
| 115 // including the set of all available device configurations. May return null | |
| 116 // if the device has been closed. | |
| 117 GetDeviceInfo() => (DeviceInfo? info); | |
| 118 | |
| 119 // Initiates a device control transfer to set the device's configuration to | |
| 120 // one with the configuration value |value|. | |
| 121 SetConfiguration(uint8 value) => (bool success); | |
| 122 | |
| 123 // Claims a single interface in the current device configuration. | |
| 124 ClaimInterface(uint8 interface_number) => (bool success); | |
| 125 | |
| 126 // Releases a claimed interface in the current device configuration. | |
| 127 ReleaseInterface(uint8 interface_number) => (bool success); | |
| 128 | |
| 129 // Selects an alternate setting for a given claimed interface. | |
| 130 SetInterfaceAlternateSetting(uint8 interface_number, uint8 alternate_setting) | |
| 131 => (bool success); | |
| 132 | |
| 133 // Resets the device. | |
| 134 Reset() => (bool success); | |
| 135 | |
| 136 // Initiates an inbound control transfer request. |params| determine the | |
| 137 // details of the request. Transfers to recipients other than DEVICE require a | |
| 138 // corresponding interface to be claimed. | |
| 139 // | |
| 140 // |length| specifies the expected number of bytes to receive for this | |
| 141 // transfer. The size of |data| will never exceed |length|, and |data| will be | |
| 142 // null if |status| is neither COMPLETED, BABBLE, or SHORT_PACKET. | |
| 143 // | |
| 144 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 145 // indicates no timeout: the request will remain pending indefinitely until | |
| 146 // completed or otherwise terminated. | |
| 147 ControlTransferIn(ControlTransferParams params, uint32 length, uint32 timeout) | |
| 148 => (TransferStatus status, array<uint8>? data); | |
| 149 | |
| 150 // Initiates an inbound control transfer request. |params| determine the | |
| 151 // details of the request. Transfers to recipients other than DEVICE require a | |
| 152 // corresponding interface to be claimed. | |
| 153 // | |
| 154 // |data| specifies the bytes to send the device in the body of the request. | |
| 155 // | |
| 156 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 157 // indicates no timeout: the request will remain pending indefinitely until | |
| 158 // completed or otherwise terminated. | |
| 159 ControlTransferOut(ControlTransferParams params, | |
| 160 array<uint8> data, | |
| 161 uint32 timeout) | |
| 162 => (TransferStatus status); | |
| 163 | |
| 164 // Initiates an inbound bulk transfer request on a specific endpoint. The | |
| 165 // interface to which |endpoint_number| belongs must be claimed, and the | |
| 166 // appropriate alternate setting must be set on that interface before | |
| 167 // transfers can be initiated on the endpoint. The endpoint must be of type | |
| 168 // BULK. | |
| 169 // | |
| 170 // |length| specifies the expected number of bytes to receive for this | |
| 171 // transfer. The size of |data| will never exceed |length|, and |data| will be | |
| 172 // null if |status| is neither COMPLETED, BABBLE, or SHORT_PACKET. | |
| 173 // | |
| 174 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 175 // indicates no timeout: the request will remain pending indefinitely until | |
| 176 // completed or otherwise terminated. | |
| 177 BulkTransferIn(uint8 endpoint_number, uint32 length, uint32 timeout) | |
| 178 => (TransferStatus status, array<uint8>? data); | |
| 179 | |
| 180 // Initiates an outbound bulk transfer request on a specific endpoint. The | |
| 181 // interface to which |endpoint_number| belongs must be claimed, and the | |
| 182 // appropriate alternate setting must be set on that interface before | |
| 183 // transfers can be initiated on the endpoint. The endpoint must be of type | |
| 184 // BULK. | |
| 185 // | |
| 186 // |data| specifies the bytes to send the device in the body of the request. | |
| 187 // | |
| 188 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 189 // indicates no timeout: the request will remain pending indefinitely until | |
| 190 // completed or otherwise terminated. | |
| 191 BulkTransferOut(uint8 endpoint_number, array<uint8> data, uint32 timeout) | |
| 192 => (TransferStatus status); | |
| 193 | |
| 194 // Initiates an inbound interrupt transfer request on a specific endpoint. The | |
| 195 // interface to which |endpoint_number| belongs must be claimed, and the | |
| 196 // appropriate alternate setting must be set on that interface before | |
| 197 // transfers can be initiated on the endpoint. The endpoint must be of type | |
| 198 // INTERRUPT. | |
| 199 // | |
| 200 // |length| specifies the expected number of bytes to receive for this | |
| 201 // transfer. The size of |data| will never exceed |length|, and |data| will be | |
| 202 // null if |status| is neither COMPLETED, BABBLE, or SHORT_PACKET. | |
| 203 // | |
| 204 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 205 // indicates no timeout: the request will remain pending indefinitely until | |
| 206 // completed or otherwise terminated. | |
| 207 InterruptTransferIn(uint8 endpoint_number, uint32 length, uint32 timeout) | |
| 208 => (TransferStatus status, array<uint8>? data); | |
| 209 | |
| 210 // Initiates an outbound interrupt transfer request on a specific endpoint. | |
| 211 // The interface to which |endpoint_number| belongs must be claimed, and the | |
| 212 // appropriate alternate setting must be set on that interface before | |
| 213 // transfers can be initiated on the endpoint. The endpoint must be of type | |
| 214 // INTERRUPT. | |
| 215 // | |
| 216 // |data| specifies the bytes to send the device in the body of the request. | |
| 217 // | |
| 218 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 219 // indicates no timeout: the request will remain pending indefinitely until | |
| 220 // completed or otherwise terminated. | |
| 221 InterruptTransferOut(uint8 endpoint_number, array<uint8> data, uint32 timeout) | |
| 222 => (TransferStatus status); | |
| 223 | |
| 224 // Initiates an inbound isochronous transfer request on a specific endpoint. | |
| 225 // The interface to which |endpoint_number| belongs must be claimed, and the | |
| 226 // appropriate alternate setting must be set on that interface before | |
| 227 // transfers can be initiated on the endpoint. The endpoint must be of type | |
| 228 // ISOCHRONOUS. | |
| 229 // | |
| 230 // |packet_length| specifies the maximum expected number of bytes to receive | |
| 231 // for each packet in this transfer. |num_packets| specifies the maximum total | |
| 232 // number of packets to receive. | |
| 233 // | |
| 234 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 235 // indicates no timeout: the request will remain pending indefinitely until | |
| 236 // completed or otherwise terminated. | |
| 237 // | |
| 238 // |packets| contains the set of packets received from the device, in order. | |
| 239 // No received packet's size will exceed |packet_length|, and will be null | |
| 240 // if |status| is neither COMPLETED, BABBLE, or SHORT_PACKET. | |
| 241 IsochronousTransferIn(uint8 endpoint_number, | |
| 242 uint32 num_packets, | |
| 243 uint32 packet_length, | |
| 244 uint32 timeout) | |
| 245 => (TransferStatus status, array<array<uint8>>? packets); | |
| 246 | |
| 247 // Initiates an outbound isochronous transfer request on a specific endpoint. | |
| 248 // The interface to which |endpoint_number| belongs must be claimed, and the | |
| 249 // appropriate alternate setting must be set on that interface before | |
| 250 // transfers can be initiated on the endpoint. The endpoint must be of type | |
| 251 // ISOCHRONOUS. | |
| 252 // | |
| 253 // |packets| specifies the series of data packets to send to the device for | |
| 254 // this transfer. | |
| 255 // | |
| 256 // |timeout| specifies the request timeout in milliseconds. A timeout of 0 | |
| 257 // indicates no timeout: the request will remain pending indefinitely until | |
| 258 // completed or otherwise terminated. | |
| 259 IsochronousTransferOut(uint8 endpoint_number, | |
| 260 array<array<uint8>> packets, | |
| 261 uint32 timeout) | |
| 262 => (TransferStatus status); | |
| 263 }; | |
| OLD | NEW |