systeminformation 5.9.4 → 5.9.8

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.
package/lib/usb.js CHANGED
@@ -1,305 +1,305 @@
1
- 'use strict';
2
- // @ts-check
3
- // ==================================================================================
4
- // usb.js
5
- // ----------------------------------------------------------------------------------
6
- // Description: System Information - library
7
- // for Node.js
8
- // Copyright: (c) 2014 - 2021
9
- // Author: Sebastian Hildebrandt
10
- // ----------------------------------------------------------------------------------
11
- // License: MIT
12
- // ==================================================================================
13
- // 16. usb
14
- // ----------------------------------------------------------------------------------
15
-
16
- const exec = require('child_process').exec;
17
- // const execSync = require('child_process').execSync;
18
- const util = require('./util');
19
- // const fs = require('fs');
20
-
21
- let _platform = process.platform;
22
-
23
- const _linux = (_platform === 'linux');
24
- const _darwin = (_platform === 'darwin');
25
- const _windows = (_platform === 'win32');
26
- const _freebsd = (_platform === 'freebsd');
27
- const _openbsd = (_platform === 'openbsd');
28
- const _netbsd = (_platform === 'netbsd');
29
- const _sunos = (_platform === 'sunos');
30
-
31
- function getLinuxUsbType(type, name) {
32
- let result = type;
33
- const str = (name + ' ' + type).toLowerCase();
34
- if (str.indexOf('camera') >= 0) { result = 'Camera'; }
35
- else if (str.indexOf('hub') >= 0) { result = 'Hub'; }
36
- else if (str.indexOf('keybrd') >= 0) { result = 'Keyboard'; }
37
- else if (str.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
38
- else if (str.indexOf('mouse') >= 0) { result = 'Mouse'; }
39
- else if (str.indexOf('stora') >= 0) { result = 'Storage'; }
40
- else if (str.indexOf('mic') >= 0) { result = 'Microphone'; }
41
- else if (str.indexOf('headset') >= 0) { result = 'Audio'; }
42
- else if (str.indexOf('audio') >= 0) { result = 'Audio'; }
43
-
44
- return result;
45
- }
46
-
47
- function parseLinuxUsb(usb) {
48
- const result = {};
49
- const lines = usb.split('\n');
50
- if (lines && lines.length && lines[0].indexOf('Device') >= 0) {
51
- const parts = lines[0].split(' ');
52
- result.bus = parseInt(parts[0], 10);
53
- if (parts[2]) {
54
- result.deviceId = parseInt(parts[2], 10);
55
- } else {
56
- result.deviceId = null;
57
- }
58
- } else {
59
- result.bus = null;
60
- result.deviceId = null;
61
- }
62
- const idVendor = util.getValue(lines, 'idVendor', ' ', true).trim();
63
- let vendorParts = idVendor.split(' ');
64
- vendorParts.shift();
65
- const vendor = vendorParts.join(' ');
66
-
67
- const idProduct = util.getValue(lines, 'idProduct', ' ', true).trim();
68
- let productParts = idProduct.split(' ');
69
- productParts.shift();
70
- const product = productParts.join(' ');
71
-
72
- const interfaceClass = util.getValue(lines, 'bInterfaceClass', ' ', true).trim();
73
- let interfaceClassParts = interfaceClass.split(' ');
74
- interfaceClassParts.shift();
75
- const usbType = interfaceClassParts.join(' ');
76
-
77
- const iManufacturer = util.getValue(lines, 'iManufacturer', ' ', true).trim();
78
- let iManufacturerParts = iManufacturer.split(' ');
79
- iManufacturerParts.shift();
80
- const manufacturer = iManufacturerParts.join(' ');
81
-
82
- result.id = (idVendor.startsWith('0x') ? idVendor.split(' ')[0].substr(2, 10) : '') + ':' + (idProduct.startsWith('0x') ? idProduct.split(' ')[0].substr(2, 10) : '');
83
- result.name = product;
84
- result.type = getLinuxUsbType(usbType, product);
85
- result.removable = null;
86
- result.vendor = vendor;
87
- result.manufacturer = manufacturer;
88
- result.maxPower = util.getValue(lines, 'MaxPower', ' ', true);
89
- result.serialNumber = null;
90
-
91
- return result;
92
- }
93
-
94
- // bus
95
- // deviceId
96
- // id
97
- // name(product)
98
- // type(bInterfaceClass)
99
- // removable / hotplug
100
- // vendor
101
- // manufacturer
102
- // maxpower(linux)
103
-
104
- function getDarwinUsbType(name) {
105
- let result = '';
106
- if (name.indexOf('camera') >= 0) { result = 'Camera'; }
107
- else if (name.indexOf('touch bar') >= 0) { result = 'Touch Bar'; }
108
- else if (name.indexOf('controller') >= 0) { result = 'Controller'; }
109
- else if (name.indexOf('headset') >= 0) { result = 'Audio'; }
110
- else if (name.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
111
- else if (name.indexOf('trackpad') >= 0) { result = 'Trackpad'; }
112
- else if (name.indexOf('sensor') >= 0) { result = 'Sensor'; }
113
- else if (name.indexOf('bthusb') >= 0) { result = 'Bluetooth'; }
114
- else if (name.indexOf('bth') >= 0) { result = 'Bluetooth'; }
115
- else if (name.indexOf('rfcomm') >= 0) { result = 'Bluetooth'; }
116
- else if (name.indexOf('usbhub') >= 0) { result = 'Hub'; }
117
- else if (name.indexOf(' hub') >= 0) { result = 'Hub'; }
118
- else if (name.indexOf('mouse') >= 0) { result = 'Mouse'; }
119
- else if (name.indexOf('mic') >= 0) { result = 'Microphone'; }
120
- else if (name.indexOf('removable') >= 0) { result = 'Storage'; }
121
- return result;
122
- }
123
-
124
-
125
- function parseDarwinUsb(usb, id) {
126
- const result = {};
127
- result.id = id;
128
-
129
- usb = usb.replace(/ \|/g, '');
130
- usb = usb.trim();
131
- let lines = usb.split('\n');
132
- lines.shift();
133
- try {
134
- for (let i = 0; i < lines.length; i++) {
135
- lines[i] = lines[i].trim();
136
- lines[i] = lines[i].replace(/=/g, ':');
137
- if (lines[i] !== '{' && lines[i] !== '}' && lines[i + 1] && lines[i + 1].trim() !== '}') {
138
- lines[i] = lines[i] + ',';
139
- }
140
- lines[i] = lines[i].replace(': Yes,', ': "Yes",');
141
- lines[i] = lines[i].replace(': No,', ': "No",');
142
- }
143
- const usbObj = JSON.parse(lines.join('\n'));
144
- const removableDrive = usbObj['Built-In'].toLowerCase() !== 'yes' && usbObj['non-removable'].toLowerCase() === 'no';
145
-
146
- result.bus = null;
147
- result.deviceId = null;
148
- result.id = usbObj['USB Address'] || null;
149
- result.name = usbObj['kUSBProductString'] || usbObj['USB Product Name'] || null;
150
- result.type = getDarwinUsbType((usbObj['kUSBProductString'] || usbObj['USB Product Name'] || '').toLowerCase() + (removableDrive ? ' removable' : ''));
151
- result.removable = usbObj['non-removable'].toLowerCase() === 'no';
152
- result.vendor = usbObj['kUSBVendorString'] || usbObj['USB Vendor Name'] || null;
153
- result.manufacturer = usbObj['kUSBVendorString'] || usbObj['USB Vendor Name'] || null;
154
- result.maxPower = null;
155
- result.serialNumber = usbObj['kUSBSerialNumberString'] || null;
156
-
157
- if (result.name) {
158
- return result;
159
- } else {
160
- return null;
161
- }
162
- } catch (e) {
163
- return null;
164
- }
165
- }
166
-
167
- // function getWindowsUsbType(service) {
168
- // let result = ''
169
- // if (service.indexOf('usbhub3') >= 0) { result = 'Hub'; }
170
- // else if (service.indexOf('usbstor') >= 0) { result = 'Storage'; }
171
- // else if (service.indexOf('hidusb') >= 0) { result = 'Input'; }
172
- // else if (service.indexOf('usbccgp') >= 0) { result = 'Controller'; }
173
- // else if (service.indexOf('usbxhci') >= 0) { result = 'Controller'; }
174
- // else if (service.indexOf('usbehci') >= 0) { result = 'Controller'; }
175
- // else if (service.indexOf('kbdhid') >= 0) { result = 'Keyboard'; }
176
- // else if (service.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
177
- // else if (service.indexOf('pointing') >= 0) { result = 'Mouse'; }
178
- // else if (service.indexOf('disk') >= 0) { result = 'Storage'; }
179
- // else if (service.indexOf('usbhub') >= 0) { result = 'Hub'; }
180
- // else if (service.indexOf('bthusb') >= 0) { result = ''; }
181
- // else if (service.indexOf('bth') >= 0) { result = ''; }
182
- // else if (service.indexOf('rfcomm') >= 0) { result = ''; }
183
- // return result;
184
- // }
185
-
186
- function getWindowsUsbTypeCreation(creationclass, name) {
187
- let result = '';
188
- if (name.indexOf('storage') >= 0) { result = 'Storage'; }
189
- else if (name.indexOf('speicher') >= 0) { result = 'Storage'; }
190
- else if (creationclass.indexOf('usbhub') >= 0) { result = 'Hub'; }
191
- else if (creationclass.indexOf('storage') >= 0) { result = 'Storage'; }
192
- else if (creationclass.indexOf('usbcontroller') >= 0) { result = 'Controller'; }
193
- else if (creationclass.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
194
- else if (creationclass.indexOf('pointing') >= 0) { result = 'Mouse'; }
195
- else if (creationclass.indexOf('disk') >= 0) { result = 'Storage'; }
196
- return result;
197
- }
198
-
199
- function parseWindowsUsb(lines, id) {
200
- const usbType = getWindowsUsbTypeCreation(util.getValue(lines, 'CreationClassName', '=').toLowerCase(), util.getValue(lines, 'name', '=').toLowerCase());
201
-
202
- if (usbType) {
203
- const result = {};
204
- result.bus = null;
205
- result.deviceId = util.getValue(lines, 'deviceid', '=');
206
- result.id = id;
207
- result.name = util.getValue(lines, 'name', '=');
208
- result.type = usbType;
209
- result.removable = null;
210
- result.vendor = null;
211
- result.manufacturer = util.getValue(lines, 'Manufacturer', '=');
212
- result.maxPower = null;
213
- result.serialNumber = null;
214
-
215
- return result;
216
- } else {
217
- return null;
218
- }
219
-
220
- }
221
-
222
- function usb(callback) {
223
-
224
- return new Promise((resolve) => {
225
- process.nextTick(() => {
226
- let result = [];
227
- if (_linux) {
228
- const cmd = 'export LC_ALL=C; lsusb -v 2>/dev/null; unset LC_ALL';
229
- exec(cmd, { maxBuffer: 1024 * 1024 * 128 }, function (error, stdout) {
230
- if (!error) {
231
- const parts = ('\n\n' + stdout.toString()).split('\n\nBus ');
232
- for (let i = 1; i < parts.length; i++) {
233
- const usb = parseLinuxUsb(parts[i]);
234
- result.push(usb);
235
- }
236
- }
237
- if (callback) {
238
- callback(result);
239
- }
240
- resolve(result);
241
- });
242
- }
243
- if (_darwin) {
244
- let cmd = 'ioreg -p IOUSB -c AppleUSBRootHubDevice -w0 -l';
245
- exec(cmd, { maxBuffer: 1024 * 1024 * 128 }, function (error, stdout) {
246
- if (!error) {
247
- const parts = (stdout.toString()).split(' +-o ');
248
- for (let i = 1; i < parts.length; i++) {
249
- const usb = parseDarwinUsb(parts[i]);
250
- if (usb) {
251
- result.push(usb);
252
- }
253
- }
254
- if (callback) {
255
- callback(result);
256
- }
257
- resolve(result);
258
- }
259
- if (callback) {
260
- callback(result);
261
- }
262
- resolve(result);
263
- });
264
- }
265
- if (_windows) {
266
- util.wmic('Path CIM_LogicalDevice where "Description like \'USB%\'" get /value', function (error, stdout) {
267
- if (!error) {
268
- const parts = stdout.toString().split(/\n\s*\n/);
269
- for (let i = 0; i < parts.length; i++) {
270
- const usb = parseWindowsUsb(parts[i].split('\n'), i);
271
- if (usb) {
272
- result.push(usb);
273
- }
274
- }
275
- }
276
- if (callback) {
277
- callback(result);
278
- }
279
- resolve(result);
280
- });
281
-
282
- // util.powerShell("gwmi Win32_USBControllerDevice |\%{[wmi]($_.Dependent)}").then(data => {
283
-
284
- // const parts = data.toString().split(/\n\s*\n/);
285
- // for (let i = 0; i < parts.length; i++) {
286
- // const usb = parseWindowsUsb(parts[i].split('\n'), i)
287
- // if (usb) {
288
- // result.push(usb)
289
- // }
290
- // }
291
- // if (callback) {
292
- // callback(result);
293
- // }
294
- // resolve(result);
295
- // });
296
- }
297
- if (_sunos || _freebsd || _openbsd || _netbsd) {
298
- resolve(null);
299
- }
300
- });
301
- });
302
- }
303
-
304
- exports.usb = usb;
305
-
1
+ 'use strict';
2
+ // @ts-check
3
+ // ==================================================================================
4
+ // usb.js
5
+ // ----------------------------------------------------------------------------------
6
+ // Description: System Information - library
7
+ // for Node.js
8
+ // Copyright: (c) 2014 - 2021
9
+ // Author: Sebastian Hildebrandt
10
+ // ----------------------------------------------------------------------------------
11
+ // License: MIT
12
+ // ==================================================================================
13
+ // 16. usb
14
+ // ----------------------------------------------------------------------------------
15
+
16
+ const exec = require('child_process').exec;
17
+ // const execSync = require('child_process').execSync;
18
+ const util = require('./util');
19
+ // const fs = require('fs');
20
+
21
+ let _platform = process.platform;
22
+
23
+ const _linux = (_platform === 'linux');
24
+ const _darwin = (_platform === 'darwin');
25
+ const _windows = (_platform === 'win32');
26
+ const _freebsd = (_platform === 'freebsd');
27
+ const _openbsd = (_platform === 'openbsd');
28
+ const _netbsd = (_platform === 'netbsd');
29
+ const _sunos = (_platform === 'sunos');
30
+
31
+ function getLinuxUsbType(type, name) {
32
+ let result = type;
33
+ const str = (name + ' ' + type).toLowerCase();
34
+ if (str.indexOf('camera') >= 0) { result = 'Camera'; }
35
+ else if (str.indexOf('hub') >= 0) { result = 'Hub'; }
36
+ else if (str.indexOf('keybrd') >= 0) { result = 'Keyboard'; }
37
+ else if (str.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
38
+ else if (str.indexOf('mouse') >= 0) { result = 'Mouse'; }
39
+ else if (str.indexOf('stora') >= 0) { result = 'Storage'; }
40
+ else if (str.indexOf('mic') >= 0) { result = 'Microphone'; }
41
+ else if (str.indexOf('headset') >= 0) { result = 'Audio'; }
42
+ else if (str.indexOf('audio') >= 0) { result = 'Audio'; }
43
+
44
+ return result;
45
+ }
46
+
47
+ function parseLinuxUsb(usb) {
48
+ const result = {};
49
+ const lines = usb.split('\n');
50
+ if (lines && lines.length && lines[0].indexOf('Device') >= 0) {
51
+ const parts = lines[0].split(' ');
52
+ result.bus = parseInt(parts[0], 10);
53
+ if (parts[2]) {
54
+ result.deviceId = parseInt(parts[2], 10);
55
+ } else {
56
+ result.deviceId = null;
57
+ }
58
+ } else {
59
+ result.bus = null;
60
+ result.deviceId = null;
61
+ }
62
+ const idVendor = util.getValue(lines, 'idVendor', ' ', true).trim();
63
+ let vendorParts = idVendor.split(' ');
64
+ vendorParts.shift();
65
+ const vendor = vendorParts.join(' ');
66
+
67
+ const idProduct = util.getValue(lines, 'idProduct', ' ', true).trim();
68
+ let productParts = idProduct.split(' ');
69
+ productParts.shift();
70
+ const product = productParts.join(' ');
71
+
72
+ const interfaceClass = util.getValue(lines, 'bInterfaceClass', ' ', true).trim();
73
+ let interfaceClassParts = interfaceClass.split(' ');
74
+ interfaceClassParts.shift();
75
+ const usbType = interfaceClassParts.join(' ');
76
+
77
+ const iManufacturer = util.getValue(lines, 'iManufacturer', ' ', true).trim();
78
+ let iManufacturerParts = iManufacturer.split(' ');
79
+ iManufacturerParts.shift();
80
+ const manufacturer = iManufacturerParts.join(' ');
81
+
82
+ result.id = (idVendor.startsWith('0x') ? idVendor.split(' ')[0].substr(2, 10) : '') + ':' + (idProduct.startsWith('0x') ? idProduct.split(' ')[0].substr(2, 10) : '');
83
+ result.name = product;
84
+ result.type = getLinuxUsbType(usbType, product);
85
+ result.removable = null;
86
+ result.vendor = vendor;
87
+ result.manufacturer = manufacturer;
88
+ result.maxPower = util.getValue(lines, 'MaxPower', ' ', true);
89
+ result.serialNumber = null;
90
+
91
+ return result;
92
+ }
93
+
94
+ // bus
95
+ // deviceId
96
+ // id
97
+ // name(product)
98
+ // type(bInterfaceClass)
99
+ // removable / hotplug
100
+ // vendor
101
+ // manufacturer
102
+ // maxpower(linux)
103
+
104
+ function getDarwinUsbType(name) {
105
+ let result = '';
106
+ if (name.indexOf('camera') >= 0) { result = 'Camera'; }
107
+ else if (name.indexOf('touch bar') >= 0) { result = 'Touch Bar'; }
108
+ else if (name.indexOf('controller') >= 0) { result = 'Controller'; }
109
+ else if (name.indexOf('headset') >= 0) { result = 'Audio'; }
110
+ else if (name.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
111
+ else if (name.indexOf('trackpad') >= 0) { result = 'Trackpad'; }
112
+ else if (name.indexOf('sensor') >= 0) { result = 'Sensor'; }
113
+ else if (name.indexOf('bthusb') >= 0) { result = 'Bluetooth'; }
114
+ else if (name.indexOf('bth') >= 0) { result = 'Bluetooth'; }
115
+ else if (name.indexOf('rfcomm') >= 0) { result = 'Bluetooth'; }
116
+ else if (name.indexOf('usbhub') >= 0) { result = 'Hub'; }
117
+ else if (name.indexOf(' hub') >= 0) { result = 'Hub'; }
118
+ else if (name.indexOf('mouse') >= 0) { result = 'Mouse'; }
119
+ else if (name.indexOf('mic') >= 0) { result = 'Microphone'; }
120
+ else if (name.indexOf('removable') >= 0) { result = 'Storage'; }
121
+ return result;
122
+ }
123
+
124
+
125
+ function parseDarwinUsb(usb, id) {
126
+ const result = {};
127
+ result.id = id;
128
+
129
+ usb = usb.replace(/ \|/g, '');
130
+ usb = usb.trim();
131
+ let lines = usb.split('\n');
132
+ lines.shift();
133
+ try {
134
+ for (let i = 0; i < lines.length; i++) {
135
+ lines[i] = lines[i].trim();
136
+ lines[i] = lines[i].replace(/=/g, ':');
137
+ if (lines[i] !== '{' && lines[i] !== '}' && lines[i + 1] && lines[i + 1].trim() !== '}') {
138
+ lines[i] = lines[i] + ',';
139
+ }
140
+ lines[i] = lines[i].replace(': Yes,', ': "Yes",');
141
+ lines[i] = lines[i].replace(': No,', ': "No",');
142
+ }
143
+ const usbObj = JSON.parse(lines.join('\n'));
144
+ const removableDrive = usbObj['Built-In'].toLowerCase() !== 'yes' && usbObj['non-removable'].toLowerCase() === 'no';
145
+
146
+ result.bus = null;
147
+ result.deviceId = null;
148
+ result.id = usbObj['USB Address'] || null;
149
+ result.name = usbObj['kUSBProductString'] || usbObj['USB Product Name'] || null;
150
+ result.type = getDarwinUsbType((usbObj['kUSBProductString'] || usbObj['USB Product Name'] || '').toLowerCase() + (removableDrive ? ' removable' : ''));
151
+ result.removable = usbObj['non-removable'].toLowerCase() === 'no';
152
+ result.vendor = usbObj['kUSBVendorString'] || usbObj['USB Vendor Name'] || null;
153
+ result.manufacturer = usbObj['kUSBVendorString'] || usbObj['USB Vendor Name'] || null;
154
+ result.maxPower = null;
155
+ result.serialNumber = usbObj['kUSBSerialNumberString'] || null;
156
+
157
+ if (result.name) {
158
+ return result;
159
+ } else {
160
+ return null;
161
+ }
162
+ } catch (e) {
163
+ return null;
164
+ }
165
+ }
166
+
167
+ // function getWindowsUsbType(service) {
168
+ // let result = ''
169
+ // if (service.indexOf('usbhub3') >= 0) { result = 'Hub'; }
170
+ // else if (service.indexOf('usbstor') >= 0) { result = 'Storage'; }
171
+ // else if (service.indexOf('hidusb') >= 0) { result = 'Input'; }
172
+ // else if (service.indexOf('usbccgp') >= 0) { result = 'Controller'; }
173
+ // else if (service.indexOf('usbxhci') >= 0) { result = 'Controller'; }
174
+ // else if (service.indexOf('usbehci') >= 0) { result = 'Controller'; }
175
+ // else if (service.indexOf('kbdhid') >= 0) { result = 'Keyboard'; }
176
+ // else if (service.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
177
+ // else if (service.indexOf('pointing') >= 0) { result = 'Mouse'; }
178
+ // else if (service.indexOf('disk') >= 0) { result = 'Storage'; }
179
+ // else if (service.indexOf('usbhub') >= 0) { result = 'Hub'; }
180
+ // else if (service.indexOf('bthusb') >= 0) { result = ''; }
181
+ // else if (service.indexOf('bth') >= 0) { result = ''; }
182
+ // else if (service.indexOf('rfcomm') >= 0) { result = ''; }
183
+ // return result;
184
+ // }
185
+
186
+ function getWindowsUsbTypeCreation(creationclass, name) {
187
+ let result = '';
188
+ if (name.indexOf('storage') >= 0) { result = 'Storage'; }
189
+ else if (name.indexOf('speicher') >= 0) { result = 'Storage'; }
190
+ else if (creationclass.indexOf('usbhub') >= 0) { result = 'Hub'; }
191
+ else if (creationclass.indexOf('storage') >= 0) { result = 'Storage'; }
192
+ else if (creationclass.indexOf('usbcontroller') >= 0) { result = 'Controller'; }
193
+ else if (creationclass.indexOf('keyboard') >= 0) { result = 'Keyboard'; }
194
+ else if (creationclass.indexOf('pointing') >= 0) { result = 'Mouse'; }
195
+ else if (creationclass.indexOf('disk') >= 0) { result = 'Storage'; }
196
+ return result;
197
+ }
198
+
199
+ function parseWindowsUsb(lines, id) {
200
+ const usbType = getWindowsUsbTypeCreation(util.getValue(lines, 'CreationClassName', ':').toLowerCase(), util.getValue(lines, 'name', ':').toLowerCase());
201
+
202
+ if (usbType) {
203
+ const result = {};
204
+ result.bus = null;
205
+ result.deviceId = util.getValue(lines, 'deviceid', ':');
206
+ result.id = id;
207
+ result.name = util.getValue(lines, 'name', ':');
208
+ result.type = usbType;
209
+ result.removable = null;
210
+ result.vendor = null;
211
+ result.manufacturer = util.getValue(lines, 'Manufacturer', ':');
212
+ result.maxPower = null;
213
+ result.serialNumber = null;
214
+
215
+ return result;
216
+ } else {
217
+ return null;
218
+ }
219
+
220
+ }
221
+
222
+ function usb(callback) {
223
+
224
+ return new Promise((resolve) => {
225
+ process.nextTick(() => {
226
+ let result = [];
227
+ if (_linux) {
228
+ const cmd = 'export LC_ALL=C; lsusb -v 2>/dev/null; unset LC_ALL';
229
+ exec(cmd, { maxBuffer: 1024 * 1024 * 128 }, function (error, stdout) {
230
+ if (!error) {
231
+ const parts = ('\n\n' + stdout.toString()).split('\n\nBus ');
232
+ for (let i = 1; i < parts.length; i++) {
233
+ const usb = parseLinuxUsb(parts[i]);
234
+ result.push(usb);
235
+ }
236
+ }
237
+ if (callback) {
238
+ callback(result);
239
+ }
240
+ resolve(result);
241
+ });
242
+ }
243
+ if (_darwin) {
244
+ let cmd = 'ioreg -p IOUSB -c AppleUSBRootHubDevice -w0 -l';
245
+ exec(cmd, { maxBuffer: 1024 * 1024 * 128 }, function (error, stdout) {
246
+ if (!error) {
247
+ const parts = (stdout.toString()).split(' +-o ');
248
+ for (let i = 1; i < parts.length; i++) {
249
+ const usb = parseDarwinUsb(parts[i]);
250
+ if (usb) {
251
+ result.push(usb);
252
+ }
253
+ }
254
+ if (callback) {
255
+ callback(result);
256
+ }
257
+ resolve(result);
258
+ }
259
+ if (callback) {
260
+ callback(result);
261
+ }
262
+ resolve(result);
263
+ });
264
+ }
265
+ if (_windows) {
266
+ util.powerShell('Get-WmiObject CIM_LogicalDevice | where { $_.Description -match "^USB"}').then((stdout, error) => {
267
+ if (!error) {
268
+ const parts = stdout.toString().split(/\n\s*\n/);
269
+ for (let i = 0; i < parts.length; i++) {
270
+ const usb = parseWindowsUsb(parts[i].split('\n'), i);
271
+ if (usb) {
272
+ result.push(usb);
273
+ }
274
+ }
275
+ }
276
+ if (callback) {
277
+ callback(result);
278
+ }
279
+ resolve(result);
280
+ });
281
+
282
+ // util.powerShell("gwmi Win32_USBControllerDevice |\%{[wmi]($_.Dependent)}").then(data => {
283
+
284
+ // const parts = data.toString().split(/\n\s*\n/);
285
+ // for (let i = 0; i < parts.length; i++) {
286
+ // const usb = parseWindowsUsb(parts[i].split('\n'), i)
287
+ // if (usb) {
288
+ // result.push(usb)
289
+ // }
290
+ // }
291
+ // if (callback) {
292
+ // callback(result);
293
+ // }
294
+ // resolve(result);
295
+ // });
296
+ }
297
+ if (_sunos || _freebsd || _openbsd || _netbsd) {
298
+ resolve(null);
299
+ }
300
+ });
301
+ });
302
+ }
303
+
304
+ exports.usb = usb;
305
+