@@ -89,7 +89,7 @@ export interface Adapter {
89
89
getConnected ( handle : string ) : boolean ;
90
90
getOpened ( handle : string ) : boolean ;
91
91
92
- listUSBDevices ( filters : Array < USBDeviceFilter > ) : Promise < Array < USBDevice > > ;
92
+ listUSBDevices ( preFilters ? : Array < USBDeviceFilter > ) : Promise < Array < USBDevice > > ;
93
93
open ( handle : string ) : Promise < void > ;
94
94
close ( handle : string ) : Promise < void > ;
95
95
selectConfiguration ( handle : string , id : number ) : Promise < void > ;
@@ -234,33 +234,28 @@ export class USBAdapter extends EventEmitter implements Adapter {
234
234
} ) ;
235
235
}
236
236
237
- private loadDevices ( filters : Array < USBDeviceFilter > ) : Promise < Array < Device > > {
237
+ private loadDevices ( preFilters ? : Array < USBDeviceFilter > ) : Promise < Array < Device > > {
238
238
// Reset device cache
239
239
this . devices = { } ;
240
240
let devices = getDeviceList ( ) ;
241
241
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
+
244
247
return this . serialPromises ( this . loadDevice , devices ) ;
245
248
}
246
249
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 => {
249
253
// Vendor
250
254
if ( filter . vendorId && filter . vendorId !== device . deviceDescriptor . idVendor ) return false ;
251
255
252
256
// Product
253
257
if ( filter . productId && filter . productId !== device . deviceDescriptor . idProduct ) return false ;
254
258
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
-
264
259
// Ignore serial number for node-usb as it requires device connection
265
260
return true ;
266
261
} ) ) ;
@@ -615,8 +610,8 @@ export class USBAdapter extends EventEmitter implements Adapter {
615
610
return ( device . interfaces !== null ) ;
616
611
}
617
612
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 )
620
615
. then ( ( ) => {
621
616
return this . serialPromises ( this . devicetoUSBDevice , Object . keys ( this . devices ) ) ;
622
617
} ) ;
0 commit comments