Skip to content

Commit fe4c858

Browse files
committed
Slacken device pre-filters
1 parent 79862a3 commit fe4c858

File tree

2 files changed

+14
-19
lines changed

2 files changed

+14
-19
lines changed

src/adapter.ts

+12-17
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export interface Adapter {
8989
getConnected(handle: string): boolean;
9090
getOpened(handle: string): boolean;
9191

92-
listUSBDevices(filters: Array<USBDeviceFilter>): Promise<Array<USBDevice>>;
92+
listUSBDevices(preFilters?: Array<USBDeviceFilter>): Promise<Array<USBDevice>>;
9393
open(handle: string): Promise<void>;
9494
close(handle: string): Promise<void>;
9595
selectConfiguration(handle: string, id: number): Promise<void>;
@@ -234,33 +234,28 @@ export class USBAdapter extends EventEmitter implements Adapter {
234234
});
235235
}
236236

237-
private loadDevices(filters: Array<USBDeviceFilter>): Promise<Array<Device>> {
237+
private loadDevices(preFilters?: Array<USBDeviceFilter>): Promise<Array<Device>> {
238238
// Reset device cache
239239
this.devices = {};
240240
let devices = getDeviceList();
241241

242-
// Pre-filter devices
243-
devices = this.filterDevices(devices, filters);
242+
if (preFilters) {
243+
// Pre-filter devices
244+
devices = this.preFilterDevices(devices, preFilters);
245+
}
246+
244247
return this.serialPromises(this.loadDevice, devices);
245248
}
246249

247-
private filterDevices(devices: Array<Device>, filters: Array<USBDeviceFilter>): Array<Device> {
248-
return devices.filter(device => filters.some(filter => {
250+
private preFilterDevices(devices: Array<Device>, preFilters: Array<USBDeviceFilter>): Array<Device> {
251+
// Just pre-filter on vid/pid
252+
return devices.filter(device => preFilters.some(filter => {
249253
// Vendor
250254
if (filter.vendorId && filter.vendorId !== device.deviceDescriptor.idVendor) return false;
251255

252256
// Product
253257
if (filter.productId && filter.productId !== device.deviceDescriptor.idProduct) return false;
254258

255-
// Class
256-
if (filter.classCode && filter.classCode !== device.deviceDescriptor.bDeviceClass) return false;
257-
258-
// Subclass
259-
if (filter.subclassCode && filter.subclassCode !== device.deviceDescriptor.bDeviceSubClass) return false;
260-
261-
// Protocol
262-
if (filter.protocolCode && filter.protocolCode !== device.deviceDescriptor.bDeviceProtocol) return false;
263-
264259
// Ignore serial number for node-usb as it requires device connection
265260
return true;
266261
}));
@@ -615,8 +610,8 @@ export class USBAdapter extends EventEmitter implements Adapter {
615610
return (device.interfaces !== null);
616611
}
617612

618-
public listUSBDevices(filters: Array<USBDeviceFilter>): Promise<Array<USBDevice>> {
619-
return this.loadDevices(filters)
613+
public listUSBDevices(preFilters?: Array<USBDeviceFilter>): Promise<Array<USBDevice>> {
614+
return this.loadDevices(preFilters)
620615
.then(() => {
621616
return this.serialPromises(this.devicetoUSBDevice, Object.keys(this.devices));
622617
});

src/usb.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ export class USB extends (EventDispatcher as new() => TypedDispatcher<USBEvents>
211211
*/
212212
public getDevices(): Promise<Array<USBDevice>> {
213213
// Create pre-filters
214-
const filters = this.allowedDevices.map(device => ({
214+
const preFilters = this.allowedDevices.map(device => ({
215215
vendorId: device.vendorId || undefined,
216216
productId: device.productId || undefined,
217217
classCode: device.deviceClass || undefined,
@@ -221,7 +221,7 @@ export class USB extends (EventDispatcher as new() => TypedDispatcher<USBEvents>
221221
}));
222222

223223
// Refresh devices and filter for allowed ones
224-
return adapter.listUSBDevices(filters)
224+
return adapter.listUSBDevices(preFilters)
225225
.then(devices => {
226226
const allowed = devices.filter(device => {
227227
if (!device.connected) {

0 commit comments

Comments
 (0)