diff --git a/nodes/analysis/73-parsexml.js b/nodes/analysis/73-parsexml.js index f7a73d411..c2624b887 100644 --- a/nodes/analysis/73-parsexml.js +++ b/nodes/analysis/73-parsexml.js @@ -31,19 +31,19 @@ function Xml2jsNode(n) { var node = this; this.on("input", function(msg) { try { - parseString(msg.payload, function (err, result) { - if (err) { node.error(err); } - else { - msg.payload = result; - node.send(msg); - if (node.useEyes == true) { - if (gotEyes == true) { eyes.inspect(msg); } - else { node.log(JSON.stringify(msg)); } - } - } - }); - } - catch(e) { console.log(e); } + parseString(msg.payload, function (err, result) { + if (err) { node.error(err); } + else { + msg.payload = result; + node.send(msg); + if (node.useEyes == true) { + if (gotEyes == true) { eyes.inspect(msg); } + else { node.log(JSON.stringify(msg)); } + } + } + }); + } + catch(e) { util.log("[73-parsexml.js] "+e); } }); } RED.nodes.registerType("xml2js",Xml2jsNode); diff --git a/nodes/hardware/36-rpi-gpio.js b/nodes/hardware/36-rpi-gpio.js index de73f11fd..e461c81cf 100644 --- a/nodes/hardware/36-rpi-gpio.js +++ b/nodes/hardware/36-rpi-gpio.js @@ -20,124 +20,124 @@ var exec = require('child_process').exec; var fs = require('fs'); if (!fs.existsSync("/usr/local/bin/gpio")) { - exec("cat /proc/cpuinfo | grep BCM27",function(err,stdout,stderr) { - if (stdout.indexOf('BCM27') > -1) { - util.log('[36-rpi-gpio.js] Error: Cannot find Wiring-Pi "gpio" command'); - } - // else not on a Pi so don't worry anyone with needless messages. - }); - return; + exec("cat /proc/cpuinfo | grep BCM27",function(err,stdout,stderr) { + if (stdout.indexOf('BCM27') > -1) { + util.log('[36-rpi-gpio.js] Error: Cannot find Wiring-Pi "gpio" command. http://wiringpi.com/download-and-install/'); + } + // else not on a Pi so don't worry anyone with needless messages. + }); + return; } // Map physical P1 pins to Gordon's Wiring-Pi Pins (as they should be V1/V2 tolerant) var pintable = { // Physical : WiringPi - "7":"7", - "11":"0", - "12":"1", - "13":"2", - "15":"3", - "16":"4", - "18":"5", - "22":"6" + "7":"7", + "11":"0", + "12":"1", + "13":"2", + "15":"3", + "16":"4", + "18":"5", + "22":"6" } var tablepin = { // WiringPi : Physical - "7":"7", - "0":"11", - "1":"12", - "2":"13", - "3":"15", - "4":"16", - "5":"18", - "6":"22" + "7":"7", + "0":"11", + "1":"12", + "2":"13", + "3":"15", + "4":"16", + "5":"18", + "6":"22" } function GPIOInNode(n) { - RED.nodes.createNode(this,n); - this.buttonState = -1; - this.pin = pintable[n.pin]; - this.intype = n.intype; - var node = this; + RED.nodes.createNode(this,n); + this.buttonState = -1; + this.pin = pintable[n.pin]; + this.intype = n.intype; + var node = this; - if (this.pin) { - exec("gpio mode "+node.pin+" "+node.intype, function(err,stdout,stderr) { - if (err) node.error(err); - else { - node._interval = setInterval( function() { - exec("gpio read "+node.pin, function(err,stdout,stderr) { - if (err) node.error(err); - else { - if (node.buttonState !== Number(stdout)) { - var previousState = node.buttonState; - node.buttonState = Number(stdout); - if (previousState !== -1) { - var msg = {topic:"pi/"+tablepin[node.pin], payload:node.buttonState}; - node.send(msg); - } - } - } - }); - }, 250); - } - }); - } - else { - this.error("Invalid GPIO pin: "+this.pin); - } + if (this.pin) { + exec("gpio mode "+node.pin+" "+node.intype, function(err,stdout,stderr) { + if (err) node.error(err); + else { + node._interval = setInterval( function() { + exec("gpio read "+node.pin, function(err,stdout,stderr) { + if (err) node.error(err); + else { + if (node.buttonState !== Number(stdout)) { + var previousState = node.buttonState; + node.buttonState = Number(stdout); + if (previousState !== -1) { + var msg = {topic:"pi/"+tablepin[node.pin], payload:node.buttonState}; + node.send(msg); + } + } + } + }); + }, 250); + } + }); + } + else { + this.error("Invalid GPIO pin: "+this.pin); + } } function GPIOOutNode(n) { - RED.nodes.createNode(this,n); - this.pin = pintable[n.pin]; - var node = this; + RED.nodes.createNode(this,n); + this.pin = pintable[n.pin]; + var node = this; - if (this.pin) { - process.nextTick(function() { - exec("gpio mode "+node.pin+" out", function(err,stdout,stderr) { - if (err) node.error(err); - else { - node.on("input", function(msg) { - if (msg.payload === "true") msg.payload = true; - if (msg.payload === "false") msg.payload = false; - var out = Number(msg.payload); - if ((out == 0)|(out == 1)) { - exec("gpio write "+node.pin+" "+out, function(err,stdout,stderr) { - if (err) node.error(err); - }); - } - else node.warn("Invalid input - not 0 or 1"); - }); - } - }); - }); - } - else { - this.error("Invalid GPIO pin: "+this.pin); - } + if (this.pin) { + process.nextTick(function() { + exec("gpio mode "+node.pin+" out", function(err,stdout,stderr) { + if (err) node.error(err); + else { + node.on("input", function(msg) { + if (msg.payload === "true") msg.payload = true; + if (msg.payload === "false") msg.payload = false; + var out = Number(msg.payload); + if ((out == 0)|(out == 1)) { + exec("gpio write "+node.pin+" "+out, function(err,stdout,stderr) { + if (err) node.error(err); + }); + } + else node.warn("Invalid input - not 0 or 1"); + }); + } + }); + }); + } + else { + this.error("Invalid GPIO pin: "+this.pin); + } } exec("gpio mode 0 in",function(err,stdout,stderr) { - if (err) { - util.log('[36-rpi-gpio.js] Error: "gpio" command failed for some reason.'); - } - exec("gpio mode 1 in"); - exec("gpio mode 2 in"); - exec("gpio mode 3 in"); - exec("gpio mode 4 in"); - exec("gpio mode 5 in"); - exec("gpio mode 6 in"); - exec("gpio mode 7 in",function(err,stdout,stderr) { - RED.nodes.registerType("rpi-gpio in",GPIOInNode); - RED.nodes.registerType("rpi-gpio out",GPIOOutNode); + if (err) { + util.log('[36-rpi-gpio.js] Error: "gpio" command failed for some reason.'); + } + exec("gpio mode 1 in"); + exec("gpio mode 2 in"); + exec("gpio mode 3 in"); + exec("gpio mode 4 in"); + exec("gpio mode 5 in"); + exec("gpio mode 6 in"); + exec("gpio mode 7 in",function(err,stdout,stderr) { + RED.nodes.registerType("rpi-gpio in",GPIOInNode); + RED.nodes.registerType("rpi-gpio out",GPIOOutNode); - GPIOInNode.prototype.close = function() { - clearInterval(this._interval); - } + GPIOInNode.prototype.close = function() { + clearInterval(this._interval); + } - GPIOOutNode.prototype.close = function() { - exec("gpio mode "+this.pin+" in"); - } + GPIOOutNode.prototype.close = function() { + exec("gpio mode "+this.pin+" in"); + } - }); + }); }); diff --git a/nodes/io/25-serial.js b/nodes/io/25-serial.js index e0b9cd9f2..0f90e9d0c 100644 --- a/nodes/io/25-serial.js +++ b/nodes/io/25-serial.js @@ -15,11 +15,10 @@ **/ var RED = require("../../red/red"); - +var settings = RED.settings; var events = require("events"); var util = require("util"); var serialp = require("serialport"); -var settings = RED.settings; // TODO: 'serialPool' should be encapsulated in SerialPortNode @@ -58,9 +57,9 @@ function SerialOutNode(n) { this.error("missing serial config"); } } - RED.nodes.registerType("serial out",SerialOutNode); + SerialOutNode.prototype.close = function() { if (this.serialConfig) { serialPool.close(this.serialConfig.serialport); @@ -90,9 +89,9 @@ function SerialInNode(n) { this.error("missing serial config"); } } - RED.nodes.registerType("serial in",SerialInNode); + SerialInNode.prototype.close = function() { if (this.serialConfig) { try { @@ -121,48 +120,50 @@ var serialPool = function() { } newline = newline.replace("\\n","\n").replace("\\r","\r"); var setupSerial = function() { - if (newline == "") { - obj.serial = new serialp.SerialPort(port,{ - baudrate: baud, - parser: serialp.parsers.raw - }); - } - else { - obj.serial = new serialp.SerialPort(port,{ - baudrate: baud, - parser: serialp.parsers.readline(newline) - }); - } - obj.serial.on('error', function(err) { - util.log("[serial] serial port "+port+" error "+err); - obj.tout = setTimeout(function() { - setupSerial(); - },settings.serialReconnectTime); - }); - obj.serial.on('close', function() { - if (!obj._closing) { - util.log("[serial] serial port "+port+" closed unexpectedly"); + try { + if (newline == "") { + obj.serial = new serialp.SerialPort(port,{ + baudrate: baud, + parser: serialp.parsers.raw + }); + } + else { + obj.serial = new serialp.SerialPort(port,{ + baudrate: baud, + parser: serialp.parsers.readline(newline) + }); + } + obj.serial.on('error', function(err) { + util.log("[serial] serial port "+port+" error "+err); obj.tout = setTimeout(function() { setupSerial(); },settings.serialReconnectTime); + }); + obj.serial.on('close', function() { + if (!obj._closing) { + util.log("[serial] serial port "+port+" closed unexpectedly"); + obj.tout = setTimeout(function() { + setupSerial(); + },settings.serialReconnectTime); + } + }); + obj.serial.on('open',function() { + util.log("[serial] serial port "+port+" opened at "+baud+" baud"); + obj.serial.flush(); + obj._emitter.emit('ready'); + }); + obj.serial.on('data',function(d) { + if (typeof d !== "string") { + d = d.toString(); + for (i=0; i