usb 1.9.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.json +87 -0
  3. package/.gitattributes +1 -0
  4. package/.vscode/launch.json +15 -0
  5. package/.vscode/tasks.json +23 -0
  6. package/CHANGELOG.md +13 -0
  7. package/README.md +400 -175
  8. package/dist/index.d.ts +17 -0
  9. package/dist/index.js +133 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/usb/bindings.d.ts +253 -0
  12. package/dist/usb/bindings.js +10 -0
  13. package/dist/usb/bindings.js.map +1 -0
  14. package/dist/usb/capability.d.ts +14 -0
  15. package/dist/usb/capability.js +18 -0
  16. package/dist/usb/capability.js.map +1 -0
  17. package/dist/usb/descriptors.d.ts +129 -0
  18. package/dist/usb/descriptors.js +3 -0
  19. package/dist/usb/descriptors.js.map +1 -0
  20. package/dist/usb/device.d.ts +94 -0
  21. package/dist/usb/device.js +300 -0
  22. package/dist/usb/device.js.map +1 -0
  23. package/dist/usb/endpoint.d.ts +91 -0
  24. package/dist/usb/endpoint.js +236 -0
  25. package/dist/usb/endpoint.js.map +1 -0
  26. package/dist/usb/index.d.ts +25 -0
  27. package/dist/usb/index.js +116 -0
  28. package/dist/usb/index.js.map +1 -0
  29. package/dist/usb/interface.d.ts +78 -0
  30. package/dist/usb/interface.js +137 -0
  31. package/dist/usb/interface.js.map +1 -0
  32. package/dist/webusb/index.d.ts +56 -0
  33. package/dist/webusb/index.js +412 -0
  34. package/dist/webusb/index.js.map +1 -0
  35. package/dist/webusb/mutex.d.ts +22 -0
  36. package/dist/webusb/mutex.js +89 -0
  37. package/dist/webusb/mutex.js.map +1 -0
  38. package/dist/webusb/webusb-device.d.ts +49 -0
  39. package/dist/webusb/webusb-device.js +888 -0
  40. package/dist/webusb/webusb-device.js.map +1 -0
  41. package/package.json +28 -15
  42. package/prebuilds/android-arm/node.napi.armv7.node +0 -0
  43. package/prebuilds/android-arm64/node.napi.armv8.node +0 -0
  44. package/prebuilds/darwin-x64+arm64/node.napi.node +0 -0
  45. package/prebuilds/linux-arm/node.napi.armv6.node +0 -0
  46. package/prebuilds/linux-arm/node.napi.armv7.node +0 -0
  47. package/prebuilds/linux-arm64/node.napi.armv8.node +0 -0
  48. package/prebuilds/linux-ia32/node.napi.node +0 -0
  49. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
  50. package/prebuilds/linux-x64/node.napi.musl.node +0 -0
  51. package/prebuilds/win32-ia32/node.napi.node +0 -0
  52. package/prebuilds/win32-x64/node.napi.node +0 -0
  53. package/src/device.cc +6 -6
  54. package/test/usb.coffee +13 -7
  55. package/test/webusb.coffee +189 -0
  56. package/tsc/index.ts +67 -0
  57. package/tsc/usb/bindings.ts +304 -0
  58. package/tsc/usb/capability.ts +22 -0
  59. package/tsc/usb/descriptors.ts +180 -0
  60. package/tsc/usb/device.ts +325 -0
  61. package/tsc/usb/endpoint.ts +228 -0
  62. package/tsc/usb/index.ts +111 -0
  63. package/tsc/usb/interface.ts +172 -0
  64. package/tsc/webusb/index.ts +363 -0
  65. package/tsc/webusb/mutex.ts +38 -0
  66. package/tsc/webusb/webusb-device.ts +534 -0
  67. package/tsconfig.json +17 -0
  68. package/typedoc.json +9 -0
  69. package/usb.js +0 -573
@@ -0,0 +1,412 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __values = (this && this.__values) || function(o) {
39
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
+ if (m) return m.call(o);
41
+ if (o && typeof o.length === "number") return {
42
+ next: function () {
43
+ if (o && i >= o.length) o = void 0;
44
+ return { value: o && o[i++], done: !o };
45
+ }
46
+ };
47
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.WebUSB = void 0;
51
+ var usb = require("../usb");
52
+ var events_1 = require("events");
53
+ var webusb_device_1 = require("./webusb-device");
54
+ var WebUSB = /** @class */ (function () {
55
+ function WebUSB(options) {
56
+ var _this = this;
57
+ if (options === void 0) { options = {}; }
58
+ this.options = options;
59
+ this.emitter = new events_1.EventEmitter();
60
+ this.knownDevices = new Map();
61
+ this.allowedDevices = options.allowedDevices || [];
62
+ var deviceConnectCallback = function (device) { return __awaiter(_this, void 0, void 0, function () {
63
+ var webDevice, deviceId, event_1;
64
+ return __generator(this, function (_a) {
65
+ switch (_a.label) {
66
+ case 0: return [4 /*yield*/, webusb_device_1.WebUSBDevice.createInstance(device)];
67
+ case 1:
68
+ webDevice = _a.sent();
69
+ // When connected, emit an event if it is an allowed device
70
+ if (webDevice && this.isAllowedDevice(webDevice)) {
71
+ deviceId = this.getDeviceId(device);
72
+ if (deviceId) {
73
+ this.knownDevices.set(deviceId, webDevice);
74
+ }
75
+ event_1 = {
76
+ type: 'connect',
77
+ device: webDevice
78
+ };
79
+ this.emitter.emit('connect', event_1);
80
+ }
81
+ return [2 /*return*/];
82
+ }
83
+ });
84
+ }); };
85
+ var deviceDisconnectCallback = function (device) { return __awaiter(_this, void 0, void 0, function () {
86
+ var deviceId, webDevice, event_2;
87
+ return __generator(this, function (_a) {
88
+ deviceId = this.getDeviceId(device);
89
+ // When disconnected, emit an event if the device was a known allowed device
90
+ if (deviceId !== undefined && this.knownDevices.has(deviceId)) {
91
+ webDevice = this.knownDevices.get(deviceId);
92
+ if (webDevice && this.isAllowedDevice(webDevice)) {
93
+ event_2 = {
94
+ type: 'disconnect',
95
+ device: webDevice
96
+ };
97
+ this.emitter.emit('disconnect', event_2);
98
+ }
99
+ }
100
+ return [2 /*return*/];
101
+ });
102
+ }); };
103
+ this.emitter.on('newListener', function (event) {
104
+ var listenerCount = _this.emitter.listenerCount(event);
105
+ if (listenerCount !== 0) {
106
+ return;
107
+ }
108
+ if (event === 'connect') {
109
+ usb.addListener('attach', deviceConnectCallback);
110
+ }
111
+ else if (event === 'disconnect') {
112
+ usb.addListener('detach', deviceDisconnectCallback);
113
+ }
114
+ });
115
+ this.emitter.on('removeListener', function (event) {
116
+ var listenerCount = _this.emitter.listenerCount(event);
117
+ if (listenerCount !== 0) {
118
+ return;
119
+ }
120
+ if (event === 'connect') {
121
+ usb.removeListener('attach', deviceConnectCallback);
122
+ }
123
+ else if (event === 'disconnect') {
124
+ usb.removeListener('detach', deviceDisconnectCallback);
125
+ }
126
+ });
127
+ }
128
+ Object.defineProperty(WebUSB.prototype, "onconnect", {
129
+ set: function (fn) {
130
+ if (this._onconnect) {
131
+ this.removeEventListener('connect', this._onconnect);
132
+ this._onconnect = undefined;
133
+ }
134
+ if (fn) {
135
+ this._onconnect = fn;
136
+ this.addEventListener('connect', this._onconnect);
137
+ }
138
+ },
139
+ enumerable: false,
140
+ configurable: true
141
+ });
142
+ Object.defineProperty(WebUSB.prototype, "ondisconnect", {
143
+ set: function (fn) {
144
+ if (this._ondisconnect) {
145
+ this.removeEventListener('disconnect', this._ondisconnect);
146
+ this._ondisconnect = undefined;
147
+ }
148
+ if (fn) {
149
+ this._ondisconnect = fn;
150
+ this.addEventListener('disconnect', this._ondisconnect);
151
+ }
152
+ },
153
+ enumerable: false,
154
+ configurable: true
155
+ });
156
+ WebUSB.prototype.addEventListener = function (type, listener) {
157
+ this.emitter.addListener(type, listener);
158
+ };
159
+ WebUSB.prototype.removeEventListener = function (type, callback) {
160
+ this.emitter.removeListener(type, callback);
161
+ };
162
+ WebUSB.prototype.dispatchEvent = function (_event) {
163
+ // Don't dispatch from here
164
+ return false;
165
+ };
166
+ /**
167
+ * Requests a single Web USB device
168
+ * @param options The options to use when scanning
169
+ * @returns Promise containing the selected device
170
+ */
171
+ WebUSB.prototype.requestDevice = function (options) {
172
+ return __awaiter(this, void 0, void 0, function () {
173
+ var devices, device, _a, error_1;
174
+ var _this = this;
175
+ return __generator(this, function (_b) {
176
+ switch (_b.label) {
177
+ case 0:
178
+ // Must have options
179
+ if (!options) {
180
+ throw new TypeError('requestDevice error: 1 argument required, but only 0 present');
181
+ }
182
+ // Options must be an object
183
+ if (options.constructor !== {}.constructor) {
184
+ throw new TypeError('requestDevice error: parameter 1 (options) is not an object');
185
+ }
186
+ // Must have a filter
187
+ if (!options.filters) {
188
+ throw new TypeError('requestDevice error: required member filters is undefined');
189
+ }
190
+ // Filter must be an array
191
+ if (options.filters.constructor !== [].constructor) {
192
+ throw new TypeError('requestDevice error: the provided value cannot be converted to a sequence');
193
+ }
194
+ // Check filters
195
+ options.filters.forEach(function (filter) {
196
+ // Protocol & Subclass
197
+ if (filter.protocolCode && !filter.subclassCode) {
198
+ throw new TypeError('requestDevice error: subclass code is required');
199
+ }
200
+ // Subclass & Class
201
+ if (filter.subclassCode && !filter.classCode) {
202
+ throw new TypeError('requestDevice error: class code is required');
203
+ }
204
+ });
205
+ return [4 /*yield*/, this.loadDevices(options.filters)];
206
+ case 1:
207
+ devices = _b.sent();
208
+ devices = devices.filter(function (device) { return _this.filterDevice(options, device); });
209
+ if (devices.length === 0) {
210
+ throw new Error('requestDevice error: no devices found');
211
+ }
212
+ _b.label = 2;
213
+ case 2:
214
+ _b.trys.push([2, 6, , 7]);
215
+ if (!this.options.devicesFound) return [3 /*break*/, 4];
216
+ return [4 /*yield*/, this.options.devicesFound(devices)];
217
+ case 3:
218
+ _a = _b.sent();
219
+ return [3 /*break*/, 5];
220
+ case 4:
221
+ _a = devices[0];
222
+ _b.label = 5;
223
+ case 5:
224
+ device = _a;
225
+ if (!device) {
226
+ throw new Error('selected device not found');
227
+ }
228
+ if (!this.isAllowedDevice(device)) {
229
+ this.allowedDevices.push({
230
+ vendorId: device.vendorId,
231
+ productId: device.productId,
232
+ serialNumber: device.serialNumber
233
+ });
234
+ }
235
+ return [2 /*return*/, device];
236
+ case 6:
237
+ error_1 = _b.sent();
238
+ throw new Error("requestDevice error: " + error_1);
239
+ case 7: return [2 /*return*/];
240
+ }
241
+ });
242
+ });
243
+ };
244
+ /**
245
+ * Gets all allowed Web USB devices which are connected
246
+ * @returns Promise containing an array of devices
247
+ */
248
+ WebUSB.prototype.getDevices = function () {
249
+ return __awaiter(this, void 0, void 0, function () {
250
+ var preFilters, devices;
251
+ var _this = this;
252
+ return __generator(this, function (_a) {
253
+ switch (_a.label) {
254
+ case 0:
255
+ if (!this.options.allowAllDevices) {
256
+ // Create pre-filters
257
+ preFilters = this.allowedDevices.map(function (device) { return ({
258
+ vendorId: device.vendorId || undefined,
259
+ productId: device.productId || undefined,
260
+ serialNumber: device.serialNumber || undefined
261
+ }); });
262
+ }
263
+ return [4 /*yield*/, this.loadDevices(preFilters)];
264
+ case 1:
265
+ devices = _a.sent();
266
+ return [2 /*return*/, devices.filter(function (device) { return _this.isAllowedDevice(device); })];
267
+ }
268
+ });
269
+ });
270
+ };
271
+ WebUSB.prototype.loadDevices = function (preFilters) {
272
+ return __awaiter(this, void 0, void 0, function () {
273
+ var devices, webDevices, devices_1, devices_1_1, device, webDevice, deviceId, e_1_1;
274
+ var e_1, _a;
275
+ return __generator(this, function (_b) {
276
+ switch (_b.label) {
277
+ case 0:
278
+ devices = usb.getDeviceList();
279
+ // Pre-filter devices
280
+ devices = this.preFilterDevices(devices, preFilters);
281
+ webDevices = [];
282
+ _b.label = 1;
283
+ case 1:
284
+ _b.trys.push([1, 6, 7, 8]);
285
+ devices_1 = __values(devices), devices_1_1 = devices_1.next();
286
+ _b.label = 2;
287
+ case 2:
288
+ if (!!devices_1_1.done) return [3 /*break*/, 5];
289
+ device = devices_1_1.value;
290
+ if (this.options.deviceTimeout) {
291
+ device.timeout = this.options.deviceTimeout;
292
+ }
293
+ return [4 /*yield*/, webusb_device_1.WebUSBDevice.createInstance(device)];
294
+ case 3:
295
+ webDevice = _b.sent();
296
+ if (webDevice) {
297
+ webDevices.push(webDevice);
298
+ deviceId = this.getDeviceId(device);
299
+ if (deviceId) {
300
+ this.knownDevices.set(deviceId, webDevice);
301
+ }
302
+ }
303
+ _b.label = 4;
304
+ case 4:
305
+ devices_1_1 = devices_1.next();
306
+ return [3 /*break*/, 2];
307
+ case 5: return [3 /*break*/, 8];
308
+ case 6:
309
+ e_1_1 = _b.sent();
310
+ e_1 = { error: e_1_1 };
311
+ return [3 /*break*/, 8];
312
+ case 7:
313
+ try {
314
+ if (devices_1_1 && !devices_1_1.done && (_a = devices_1.return)) _a.call(devices_1);
315
+ }
316
+ finally { if (e_1) throw e_1.error; }
317
+ return [7 /*endfinally*/];
318
+ case 8: return [2 /*return*/, webDevices];
319
+ }
320
+ });
321
+ });
322
+ };
323
+ WebUSB.prototype.preFilterDevices = function (devices, preFilters) {
324
+ if (!preFilters || !preFilters.length) {
325
+ return devices;
326
+ }
327
+ // Just pre-filter on vid/pid
328
+ return devices.filter(function (device) { return preFilters.some(function (filter) {
329
+ // Vendor
330
+ if (filter.vendorId && filter.vendorId !== device.deviceDescriptor.idVendor)
331
+ return false;
332
+ // Product
333
+ if (filter.productId && filter.productId !== device.deviceDescriptor.idProduct)
334
+ return false;
335
+ // Ignore serial number for node-usb as it requires device connection
336
+ return true;
337
+ }); });
338
+ };
339
+ WebUSB.prototype.filterDevice = function (options, device) {
340
+ if (!options.filters || !options.filters.length) {
341
+ return true;
342
+ }
343
+ return options.filters.some(function (filter) {
344
+ // Vendor
345
+ if (filter.vendorId && filter.vendorId !== device.vendorId)
346
+ return false;
347
+ // Product
348
+ if (filter.productId && filter.productId !== device.productId)
349
+ return false;
350
+ // Class
351
+ if (filter.classCode) {
352
+ if (!device.configuration) {
353
+ return false;
354
+ }
355
+ // Interface Descriptors
356
+ var match = device.configuration.interfaces.some(function (iface) {
357
+ // Class
358
+ if (filter.classCode && filter.classCode !== iface.alternate.interfaceClass)
359
+ return false;
360
+ // Subclass
361
+ if (filter.subclassCode && filter.subclassCode !== iface.alternate.interfaceSubclass)
362
+ return false;
363
+ // Protocol
364
+ if (filter.protocolCode && filter.protocolCode !== iface.alternate.interfaceProtocol)
365
+ return false;
366
+ return true;
367
+ });
368
+ if (match) {
369
+ return true;
370
+ }
371
+ }
372
+ // Class
373
+ if (filter.classCode && filter.classCode !== device.deviceClass)
374
+ return false;
375
+ // Subclass
376
+ if (filter.subclassCode && filter.subclassCode !== device.deviceSubclass)
377
+ return false;
378
+ // Protocol
379
+ if (filter.protocolCode && filter.protocolCode !== device.deviceProtocol)
380
+ return false;
381
+ // Serial
382
+ if (filter.serialNumber && filter.serialNumber !== device.serialNumber)
383
+ return false;
384
+ return true;
385
+ });
386
+ };
387
+ WebUSB.prototype.getDeviceId = function (device) {
388
+ if (device.busNumber === undefined || device.deviceAddress === undefined) {
389
+ return undefined;
390
+ }
391
+ return device.busNumber + "." + device.deviceAddress;
392
+ };
393
+ WebUSB.prototype.isAllowedDevice = function (device) {
394
+ if (this.options.allowAllDevices) {
395
+ return true;
396
+ }
397
+ var isSameDevice = function (device1, device2) {
398
+ return (device1.productId === device2.productId
399
+ && device1.vendorId === device2.vendorId
400
+ && device1.serialNumber === device2.serialNumber);
401
+ };
402
+ for (var i in this.allowedDevices) {
403
+ if (isSameDevice(device, this.allowedDevices[i])) {
404
+ return true;
405
+ }
406
+ }
407
+ return false;
408
+ };
409
+ return WebUSB;
410
+ }());
411
+ exports.WebUSB = WebUSB;
412
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../tsc/webusb/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A mutex implementation that can be used to lock access between concurrent async functions
3
+ */
4
+ export declare class Mutex {
5
+ private locked;
6
+ /**
7
+ * Create a new Mutex
8
+ */
9
+ constructor();
10
+ /**
11
+ * Yield the current execution context, effectively moving it to the back of the promise queue
12
+ */
13
+ private sleep;
14
+ /**
15
+ * Wait until the Mutex is available and claim it
16
+ */
17
+ lock(): Promise<void>;
18
+ /**
19
+ * Unlock the Mutex
20
+ */
21
+ unlock(): void;
22
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Mutex = void 0;
40
+ /**
41
+ * A mutex implementation that can be used to lock access between concurrent async functions
42
+ */
43
+ var Mutex = /** @class */ (function () {
44
+ /**
45
+ * Create a new Mutex
46
+ */
47
+ function Mutex() {
48
+ this.locked = false;
49
+ }
50
+ /**
51
+ * Yield the current execution context, effectively moving it to the back of the promise queue
52
+ */
53
+ Mutex.prototype.sleep = function () {
54
+ return __awaiter(this, void 0, void 0, function () {
55
+ return __generator(this, function (_a) {
56
+ return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, 1); })];
57
+ });
58
+ });
59
+ };
60
+ /**
61
+ * Wait until the Mutex is available and claim it
62
+ */
63
+ Mutex.prototype.lock = function () {
64
+ return __awaiter(this, void 0, void 0, function () {
65
+ return __generator(this, function (_a) {
66
+ switch (_a.label) {
67
+ case 0:
68
+ if (!this.locked) return [3 /*break*/, 2];
69
+ return [4 /*yield*/, this.sleep()];
70
+ case 1:
71
+ _a.sent();
72
+ return [3 /*break*/, 0];
73
+ case 2:
74
+ this.locked = true;
75
+ return [2 /*return*/];
76
+ }
77
+ });
78
+ });
79
+ };
80
+ /**
81
+ * Unlock the Mutex
82
+ */
83
+ Mutex.prototype.unlock = function () {
84
+ this.locked = false;
85
+ };
86
+ return Mutex;
87
+ }());
88
+ exports.Mutex = Mutex;
89
+ //# sourceMappingURL=mutex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../tsc/webusb/mutex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH;IAGI;;OAEG;IACH;QACI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;OAEG;IACW,qBAAK,GAAnB;;;gBACI,sBAAO,IAAI,OAAO,CAAC,UAAA,OAAO,IAAI,OAAA,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAtB,CAAsB,CAAC,EAAC;;;KACzD;IAED;;OAEG;IACU,oBAAI,GAAjB;;;;;6BACW,IAAI,CAAC,MAAM;wBACd,qBAAM,IAAI,CAAC,KAAK,EAAE,EAAA;;wBAAlB,SAAkB,CAAC;;;wBAGvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;;;;;KACtB;IAED;;OAEG;IACI,sBAAM,GAAb;QACI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IACL,YAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCY,sBAAK"}
@@ -0,0 +1,49 @@
1
+ /// <reference types="w3c-web-usb" />
2
+ import * as usb from '../usb';
3
+ /**
4
+ * Wrapper to make a node-usb device look like a webusb device
5
+ */
6
+ export declare class WebUSBDevice implements USBDevice {
7
+ private device;
8
+ static createInstance(device: usb.Device): Promise<WebUSBDevice | undefined>;
9
+ readonly usbVersionMajor: number;
10
+ readonly usbVersionMinor: number;
11
+ readonly usbVersionSubminor: number;
12
+ readonly deviceClass: number;
13
+ readonly deviceSubclass: number;
14
+ readonly deviceProtocol: number;
15
+ readonly vendorId: number;
16
+ readonly productId: number;
17
+ readonly deviceVersionMajor: number;
18
+ readonly deviceVersionMinor: number;
19
+ readonly deviceVersionSubminor: number;
20
+ manufacturerName?: string | undefined;
21
+ productName?: string | undefined;
22
+ serialNumber?: string | undefined;
23
+ configurations: USBConfiguration[];
24
+ private deviceMutex;
25
+ private constructor();
26
+ get configuration(): USBConfiguration | undefined;
27
+ get opened(): boolean;
28
+ open(): Promise<void>;
29
+ close(): Promise<void>;
30
+ selectConfiguration(configurationValue: number): Promise<void>;
31
+ claimInterface(interfaceNumber: number): Promise<void>;
32
+ releaseInterface(interfaceNumber: number): Promise<void>;
33
+ selectAlternateInterface(interfaceNumber: number, alternateSetting: number): Promise<void>;
34
+ controlTransferIn(setup: USBControlTransferParameters, length: number): Promise<USBInTransferResult>;
35
+ controlTransferOut(setup: USBControlTransferParameters, data?: ArrayBuffer): Promise<USBOutTransferResult>;
36
+ clearHalt(direction: USBDirection, endpointNumber: number): Promise<void>;
37
+ transferIn(endpointNumber: number, length: number): Promise<USBInTransferResult>;
38
+ transferOut(endpointNumber: number, data: ArrayBuffer): Promise<USBOutTransferResult>;
39
+ isochronousTransferIn(_endpointNumber: number, _packetLengths: number[]): Promise<USBIsochronousInTransferResult>;
40
+ isochronousTransferOut(_endpointNumber: number, _data: BufferSource, _packetLengths: number[]): Promise<USBIsochronousOutTransferResult>;
41
+ reset(): Promise<void>;
42
+ private initialize;
43
+ private decodeVersion;
44
+ private getStringDescriptor;
45
+ private getConfigurations;
46
+ private getEndpoint;
47
+ private controlTransferParamsToType;
48
+ private _releaseInterface;
49
+ }