@@ -2,6 +2,7 @@ import os from "os";
22
33import { Adapter } from "@node-escpos/adapter" ;
44import type { Interface , InEndpoint , OutEndpoint , LibUSBException } from "usb" ;
5+ import { findBySerialNumber } from "usb" ;
56import { usb , getDeviceList , findByIds } from "usb" ;
67
78/**
@@ -61,26 +62,42 @@ export default class USBAdapter extends Adapter<[]> {
6162 usb . on ( event , listener ) ;
6263 }
6364
65+ static isPrinter ( device : usb . Device ) : boolean {
66+ try {
67+ const length = device . configDescriptor ?. interfaces . filter ( ( iface ) => {
68+ return iface . filter ( ( conf ) => {
69+ return conf . bInterfaceClass === IFACE_CLASS . PRINTER ;
70+ } ) . length ;
71+ } ) . length ;
72+ return ( length !== undefined && length > 0 ) ;
73+ }
74+ catch ( e ) {
75+ // console.warn(e)
76+ return false ;
77+ }
78+ }
79+
6480 static findPrinter ( ) {
65- return getDeviceList ( ) . filter ( ( device ) => {
81+ return getDeviceList ( ) . filter ( ( device ) => USBAdapter . isPrinter ( device ) ) ;
82+ }
83+
84+ static getDevice ( vid : number , pid : number ) {
85+ return new Promise ( ( resolve , reject ) => {
6686 try {
67- return device . configDescriptor ?. interfaces . filter ( ( iface ) => {
68- return iface . filter ( ( conf ) => {
69- return conf . bInterfaceClass === IFACE_CLASS . PRINTER ;
70- } ) . length ;
71- } ) . length ;
87+ const device = findByIds ( vid , pid ) ;
88+ device ?. open ( ) ;
89+ resolve ( device ) ;
7290 }
73- catch ( e ) {
74- // console.warn(e)
75- return false ;
91+ catch ( err ) {
92+ reject ( err ) ;
7693 }
7794 } ) ;
7895 }
7996
80- static getDevice ( vid : number , pid : number ) {
81- return new Promise ( ( resolve , reject ) => {
97+ static getDeviceBySerial ( serialNumber : string ) {
98+ return new Promise ( async ( resolve , reject ) => {
8299 try {
83- const device = findByIds ( vid , pid ) ;
100+ const device = await findBySerialNumber ( serialNumber ) ;
84101 device ?. open ( ) ;
85102 resolve ( device ) ;
86103 }
0 commit comments