From 89c7dd1c49fc4f6430d9c284ce625b7782edd30d Mon Sep 17 00:00:00 2001 From: Mike Fair Date: Sat, 30 Jul 2022 22:23:06 -0400 Subject: [PATCH 1/3] prevent crash if cameraBuffer is empty on error prevent crash if camerBuffer is empty on error --- src/visca/camera.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/visca/camera.ts b/src/visca/camera.ts index b51e700..eddd24f 100644 --- a/src/visca/camera.ts +++ b/src/visca/camera.ts @@ -491,7 +491,11 @@ export class Camera extends EventEmitter { break; } console.log(`CAMERA ERROR: id: ${this.index}, command socket: ${viscaCommand.socket}, message: ${message}\nRECEIVED: ${viscaCommand.toString()}`); - this.cameraBuffers[socketKey].handleError(message); + if(this.cameraBuffers[socketKey]){ + this.cameraBuffers[socketKey].handleError(message); + }else{ + console.log("Error: Camera buffer missing!!!"); + } delete (this.cameraBuffers[socketKey]); this._update(); } From bb3dc72c8b30d5d61096e9ee578fd31acb022ff4 Mon Sep 17 00:00:00 2001 From: Mike Fair Date: Sat, 30 Jul 2022 22:41:21 -0400 Subject: [PATCH 2/3] fix biding context and double start - fix binding context on serialconnection events - comment out start in startSerial because it is called in constructor --- src/visca/controller.ts | 10 +++++----- src/visca/visca-serial.ts | 33 +++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/visca/controller.ts b/src/visca/controller.ts index 294e07d..a2707f3 100644 --- a/src/visca/controller.ts +++ b/src/visca/controller.ts @@ -72,13 +72,13 @@ export class ViscaController extends EventEmitter { closeSerial() { this.serialConnection.close(); } startSerial(portname = "/dev/ttyUSB0", baudRate = 9600, timeout = 1, debug = false) { this.serialConnection = new SerialTransport(portname, timeout, baudRate, debug); - this.serialConnection.start(); + //this.serialConnection.start(); // create callbacks - this.serialConnection.on('open', this.onSerialOpen); - this.serialConnection.on('close', this.onSerialClose); - this.serialConnection.on('error', this.onSerialError); - this.serialConnection.on('data', this.onSerialData); + this.serialConnection.on('open', this.onSerialOpen.bind(this)); + this.serialConnection.on('close', this.onSerialClose.bind(this)); + this.serialConnection.on('error', this.onSerialError.bind(this)); + this.serialConnection.on('data', this.onSerialData.bind(this)); // send enumeration command (on reply, we will send the IF clear command) this.enumerateSerial(); diff --git a/src/visca/visca-serial.ts b/src/visca/visca-serial.ts index fbbc3a1..96479ad 100644 --- a/src/visca/visca-serial.ts +++ b/src/visca/visca-serial.ts @@ -26,13 +26,30 @@ export class SerialTransport extends EventEmitter implements ViscaTransport { // open the serial port try { - this.serialport = new SerialPort( this.portname, { baudRate: this.baudRate } ); - this.serialport.on( 'open', this.onOpen ); // provides error object - this.serialport.on( 'close', this.onClose ); // if disconnected, err.disconnected == true - this.serialport.on( 'error', this.onError ); // provides error object + this.serialport = new SerialPort( {path:this.portname, baudRate: this.baudRate, autoOpen:false } ); + this.serialport.open((err: any) => { + if (err) { + return console.log('Error opening port: ', err.message); + } + }); + + this.serialport = new SerialPort( this.portname, { baudRate: this.baudRate, autoOpen: false } ); + this.serialport.on( 'open', this.onOpen.bind(this) ); // provides error object + this.serialport.on( 'close', this.onClose.bind(this) ); // if disconnected, err.disconnected == true + this.serialport.on( 'error', this.onError.bind(this) ); // provides error object this.serialport.pipe( new Delimiter( { delimiter: [ 0xff ] } ) ) - .on( 'data', this.onData ); // provides a Buffer object + .on( 'data', this.onData.bind(this) ); // provides a Buffer object + this.serialport.open((err)=>{ + if(err){ + console.log("################### Error opening serial port "+ this.portname +":"); + console.log(err); + }else{ + console.log("################### " + this.portname +" successfully opened!!"); + } + + + }) } catch ( e ) { console.log( `Exception opening serial port '${this.portname}' for (display) ${e}\n` ); @@ -44,7 +61,11 @@ export class SerialTransport extends EventEmitter implements ViscaTransport { onOpen() { this.started = true; this.emit( 'open' ); } onClose( e :string ) { console.log( e ); this.started = false; this.emit( 'close' ); } - onError( e :string ) { console.log( e ); this.started = false; this.emit( 'error', e ); } + onError( e :string ) { + console.log( e ); + this.started = false; + this.emit( 'error', e ); + } onData( packet:Buffer ) { // the socket parser gives us only full visca packets From f93e7cb07609db8398d78a18ed07298d916869bf Mon Sep 17 00:00:00 2001 From: Mike Fair Date: Sat, 30 Jul 2022 22:42:03 -0400 Subject: [PATCH 3/3] fix binding context in message event --- src/visca/visca-ip.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/visca/visca-ip.ts b/src/visca/visca-ip.ts index cdb0399..bb64fa1 100644 --- a/src/visca/visca-ip.ts +++ b/src/visca/visca-ip.ts @@ -99,7 +99,7 @@ export class UDPTransport extends EventEmitter { this.socket = udp.createSocket( 'udp4' ); // handle replies - this.socket.on( 'message', function ( msg, info ) { + this.socket.on( 'message', ( msg, info ) =>{ console.log( 'Data received from client : ' + msg.toString() ); console.log( 'Received %d bytes from %s:%d\n', msg.length, info.address, info.port ); this.onData( [...msg] );