diff --git a/lib/g2core-api.js b/lib/g2core-api.js index 4312711..a91d985 100644 --- a/lib/g2core-api.js +++ b/lib/g2core-api.js @@ -424,7 +424,7 @@ class G2coreAPI extends EventEmitter { this.emit('setupDone'); // Allow data to be sent. We'll start with 5 lines to fill the buffer. - this.linesRequested = 5; + this._resetLinesRequested(); this._sendLines(); }); }; // _completeConnection @@ -467,7 +467,15 @@ class G2coreAPI extends EventEmitter { this.emit('sentLine', lastLineSent); }; // _sendLines + + /** + * _resetLinesRequested - internal only + */ + _resetLinesRequested() { + this.linesRequested = 5; + }; // _resetLinesRequested + /** * flush - empty the send buffer, without sending what's left */ @@ -479,7 +487,7 @@ class G2coreAPI extends EventEmitter { this.lineBuffer.length = 0; // Reset line requested - this.linesRequested = 5; + this._resetLinesRequested(); // Send a queue flush followed by an alarm clear this._write('\x04'); // send the ^D @@ -603,6 +611,15 @@ class G2coreAPI extends EventEmitter { this.ignoredResponses++; } this._write(value); + + // handle flush command + if(typeof value === 'string' && value.match(/%+/)) { + this._resetLinesRequested(); + this.linesSent = 0; + this.ignoredResponses = 0; + this.lineBuffer.length = 0; + } + return; } @@ -1189,20 +1206,27 @@ class G2coreAPI extends EventEmitter { for (let i = 0; i < results.length; i++) { let item = results[i]; + let x; if (process.platform === 'win32') { // Windows: // pnpId: USB\VID_1D50&PID_606D&MI_00\6&3B3CEA53&0&0000 // pnpId: USB\VID_1D50&PID_606D&MI_02\6&3B3CEA53&0&0002 + // pnpId: USB\VID_1D50&PID_606D\0084-D639-0084-08C6 // WARNING -- explicit test against VIP/PID combo. - if ((x = item.pnpId.match(/^USB\\VID_([0-9A-Fa-f]+)&PID_([0-9A-Fa-f]+)&MI_([0-9]+)\\(.*)$/)) && // eslint-disable-line + if ((x = item.pnpId.match(/^USB\\VID_([0-9A-Fa-f]+)&PID_([0-9A-Fa-f]+)(?:(?:&MI_([0-9]+)\\(.*))|(?:\\(.*)))$/)) && // eslint-disable-line (x[1] == '1D50') && (x[2] == '606D') ) { + let serialNumber; // let vendor = x[1]; // never used // let pid = x[2]; // never used - let theRest = x[4].split('&'); - let serialNumber = theRest[1]; + if(x[4]) { + let theRest = x[4].split('&'); + serialNumber = theRest[1]; + } else { + serialNumber = x[5]; + } if ( (g2s.length > 0) &&