UNPKG

4.06 kBJavaScriptView Raw
1declare class USBConnectionEvent extends Event {
2 device: USBDevice;
3};
4
5declare type USBConnectionEventHandler = (event: USBConnectionEvent) => mixed;
6
7declare type BufferSource = ArrayBuffer | DataView | $TypedArray;
8
9declare class USB extends EventTarget {
10 onconnect: ?USBConnectionEventHandler;
11 ondisconnect: ?USBConnectionEventHandler;
12 getDevices: () => Promise<Array<USBDevice>>;
13 requestDevice: (options?: USBDeviceRequestOptions) => Promise<USBDevice>;
14};
15
16declare type USBDeviceRequestOptions = {
17 filters: Array<USBDeviceFilter>;
18};
19
20declare type USBDeviceFilter = {
21 vendorId?: number;
22 productId?: number;
23 classCode?: number;
24 subclassCode?: number;
25 protocolCode?: number;
26 serialNumber?: string;
27
28};
29
30declare class USBDevice {
31 usbVersionMajor: number;
32 usbVersionMinor: number;
33 usbVersionSubminor: number;
34 deviceClass: number;
35 deviceSubclass: number;
36 deviceProtocol: number;
37 vendorId: number;
38 productId: number;
39 deviceVersionMajor: number;
40 deviceVersionMinor: number;
41 deviceVersionSubminor: number;
42 manufacturerName: ?string;
43 productName: ?string;
44 serialNumber: ?string;
45 configuration: ?USBConfiguration;
46 configurations: Array<USBConfiguration>;
47 opened: boolean;
48 open: () => Promise<void>;
49 close: () => Promise<void>;
50 selectConfiguration: (configurationValue: number) => Promise<void>;
51 claimInterface: (interfaceNumber: number) => Promise<void>;
52 releaseInterface: (interfaceNumber: number) => Promise<void>;
53 selectAlternateInterface: (interfaceNumber: number, alternateSetting: number) => Promise<void>;
54 controlTransferIn: (setup: USBControlTransferParameters, length: number) => Promise<USBInTransferResult>;
55 controlTransferOut: (setup: USBControlTransferParameters, data?: BufferSource) => Promise<USBOutTransferResult>;
56 clearHalt: (direction: USBDirection, endpointNumber: number) => Promise<void>;
57 transferIn: (endpointNumber: number, length: number) => Promise<USBInTransferResult>;
58 transferOut: (endpointNumber: number, data: BufferSource) => Promise<USBOutTransferResult>;
59 isochronousTransferIn: (endpointNumber: number, packetLengths: Array<number>) => Promise<USBIsochronousInTransferResult>;
60 isochronousTransferOut: (endpointNumber: number, data: BufferSource, packetLengths: Array<number>) => Promise<USBIsochronousOutTransferResult>;
61 reset: () => Promise<void>;
62};
63
64declare type USBDirection = 'in' | 'out';
65
66declare class USBConfiguration {
67 configurationValue: number;
68 configurationName: ?string;
69 interfaces: Array<USBInterface>;
70};
71
72declare class USBInterface {
73 interfaceNumber: number;
74 alternate: USBAlternateInterface;
75 alternates: Array<USBAlternateInterface>;
76 claimed: boolean;
77};
78
79declare class USBAlternateInterface {
80 alternateSetting: number;
81 interfaceClass: number;
82 interfaceSubclass: number;
83 interfaceProtocol: number;
84 interfaceName: ?string;
85 endpoints: Array<USBEndpoint>;
86};
87
88declare class USBEndpoint {
89 endpointNumber: number;
90 direction: USBDirection;
91 type: 'bulk' | 'interrupt' | 'isochronous';
92 packetSize: number;
93};
94
95declare type USBRequestType = 'standard' | 'class' | 'vendor';
96declare type USBRecipient = 'device' | 'interface' | 'endpoint' | 'other';
97
98declare type USBControlTransferParameters = {
99 requestType: USBRequestType;
100 recipient: USBRecipient;
101 request: number;
102 value: number;
103 index: number;
104};
105
106declare type USBTransferStatus = 'ok' | 'stall' | 'babble';
107
108declare class USBInTransferResult {
109 data: DataView;
110 status: USBTransferStatus;
111};
112
113declare class USBOutTransferResult {
114 bytesWritten: number;
115 status: USBTransferStatus;
116};
117
118declare class USBIsochronousInTransferPacket {
119 data: DataView;
120 status: USBTransferStatus;
121};
122
123declare class USBIsochronousInTransferResult {
124 data: DataView;
125 packets: Array<USBIsochronousInTransferPacket>;
126};
127
128declare class USBIsochronousOutTransferPacket {
129 protocolCode?: number,
130 bytesWritten: number;
131 status: USBTransferStatus;
132};
133
134declare class USBIsochronousOutTransferResult {
135 packets: Array<USBIsochronousOutTransferPacket>;
136};