Newer
Older
/**
* Created by aghassaei on 6/17/15.
*/
var serialport = require('serialport');
SerialPort = serialport.SerialPort;// make a local instance
//var http = require('http');
//var app = http.createServer();
var io = require('socket.io').listen(8080);
//var app = require('express')();
//var http = require('http').Server(app);
//var io = require('socket.io')(http);
//defaults
var portName = null;
var currentPort = null;
//io.sockets.on('connection', function (socket) {
// socket.emit('baudRate', baudRate);
//});
io.on('connection', function(socket){
refreshAvailablePorts(function(_allPorts, _portName, _baudRate){
currentPort = changePort(_portName, _baudRate);
refreshAvailablePorts(function(){
if (!checkThatPortExists(portName)) return;
currentPort = changePort(portName, value);
baudRate = value;
});
});
socket.on('portName', function(value){
refreshAvailablePorts(function(){
if (!checkThatPortExists(value)) return;
currentPort = changePort(value, baudRate);
portName = value;
});
console.log("Sending data: " + data);
currentPort.write(new Buffer([parseInt(data)]));
if (currentPort) currentPort.flush(function(){
console.log("port " + portName + " flushed");
});
});
socket.on('refreshPorts', function(){
console.log("refreshing ports list");
allPorts = refreshAvailablePorts();
function checkThatPortExists(_portName){
if (allPorts.indexOf(_portName) < 0) {
onPortError("no available port called " + _portName);
return false;
}
return true;
}
function refreshAvailablePorts(callback){
var _allPorts = [];
serialport.list(function(err, ports){
ports.forEach(function(port) {
_allPorts.push(port.comName);
});
if (!portName && _allPorts.length>0) portName = _allPorts[0];
if (callback) callback(allPorts, portName, baudRate);
socket.emit('connected', {
baudRate: baudRate,
portName: portName,
availablePorts: _allPorts
});
});
}
console.log("initing port " + _portName + " at " + _baudRate);
var port = new SerialPort(_portName, {
baudRate: _baudRate,
parser:serialport.parsers.readline("\n")
// parser: serialport.parsers.raw
}, false);
port.open(function(error){
if (error) {
onPortError(error);
currentPort = null;
return;
}
port.on('data', onPortData);
port.on('close', onPortClose);
port.on('error', onPortError);
});
return port;
}
function changePort(_portName, _baudRate){
onPortError("no port name specified");
return null;
}
if (currentPort) {
var oldBaud = baudRate;
var oldName = portName;
console.log("disconnecting port " + oldName + " at " + oldBaud);
if (currentPort.isOpen()) currentPort.close(function(error){
if (error) {
onPortError(error);
return null;
}
socket.emit("portDisconnected", {baudRate:oldBaud, portName:oldName});
});
}
return initPort(_portName, _baudRate);
function onPortOpen(name, baud){
socket.emit("portConnected", {baudRate:baud, portName:name});
// console.log(data);
socket.emit("dataIn", data);
}
function onPortError(error){
console.log("Serial port error " + error);