Skip to content

Commit

Permalink
connect/disconnect, configurable reconnect time
Browse files Browse the repository at this point in the history
  • Loading branch information
htmltiger committed Jun 18, 2023
1 parent 05e3a1b commit cbfbfc8
Showing 1 changed file with 32 additions and 3 deletions.
35 changes: 32 additions & 3 deletions io/serialport/25-serial.js
Expand Up @@ -5,7 +5,6 @@ module.exports = function(RED) {
var events = require("events");
const { SerialPort } = require('serialport');
var bufMaxSize = 32768; // Max serial buffer size, for inputs...
const serialReconnectTime = settings.serialReconnectTime || 15000;

// TODO: 'serialPool' should be encapsulated in SerialPortNode

Expand All @@ -27,6 +26,7 @@ module.exports = function(RED) {
this.out = n.out || "char";
this.waitfor = n.waitfor || "";
this.responsetimeout = n.responsetimeout || 10000;
this.serialReconnectTime = n.serialReconnectTime || 15000;
}
RED.nodes.registerType("serial-port",SerialPortNode);

Expand All @@ -42,7 +42,15 @@ module.exports = function(RED) {
node.port = serialPool.get(this.serialConfig);

node.on("input",function(msg) {
if (msg.hasOwnProperty("baudrate")) {
if (msg.hasOwnProperty("disconnect") && this.serialConfig) {
serialPool.disconnect(this.serialConfig.serialport);
return;
}
if (msg.hasOwnProperty("connect") && this.serialConfig) {
serialPool.connect(this.serialConfig.serialport);
return;
}
if (msg.hasOwnProperty("baudrate")) {
var baud = parseInt(msg.baudrate);
if (isNaN(baud)) {
node.error(RED._("serial.errors.badbaudrate"),msg);
Expand Down Expand Up @@ -219,7 +227,8 @@ module.exports = function(RED) {
waitfor = serialConfig.waitfor,
binoutput = serialConfig.bin,
addchar = serialConfig.addchar,
responsetimeout = serialConfig.responsetimeout;
responsetimeout = serialConfig.responsetimeout,
serialReconnectTime = serialConfig.responsetimeout;
var id = port;
// just return the connection object if already have one
// key is the port (file path)
Expand Down Expand Up @@ -260,6 +269,8 @@ module.exports = function(RED) {
queue: [],
on: function(a,b) { this._emitter.on(a,b); },
close: function(cb) { this.serial.close(cb); },
connect: function() { setupSerial(); },
disconnect: function(cb) { this.serial.close(cb); },
encodePayload: function (payload) {
if (!Buffer.isBuffer(payload)) {
if (typeof payload === "object") {
Expand Down Expand Up @@ -483,6 +494,24 @@ module.exports = function(RED) {
else {
done();
}
},
connect: function(port) {
if (connections[port]) {
try {
connections[port].connect();
}
catch(err) { }
}
},
disconnect: function(port) {
if (connections[port]) {
try {
connections[port].disconnect(function() {
RED.log.info(RED._("serial.errors.closed",{port:port}), {});
});
}
catch(err) { }
}
}
}
}());
Expand Down

0 comments on commit cbfbfc8

Please sign in to comment.