Skip to content
Snippets Groups Projects
Commit a2d7acb6 authored by Amanda Ghassaei's avatar Amanda Ghassaei
Browse files

serial port talking

parent 085ac5c0
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,12 @@ html, body {
color: #888;
}
pre {
display: inline;
border: none;
background-color: rgba(0,0,0,0);
}
.navbar {
margin-bottom:0;
z-index: 2;
......
......@@ -77,6 +77,7 @@ define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'thre
if (!materials[id]) materials[id] = {};
_.extend(materials[id], data);//todo trigger change on all instances
if (materials[id].threeMaterial) materials[id].threeMaterial.color = new THREE.Color(this.get("color"));
else materials[id].threeMaterial = new THREE.MeshLambertMaterial({color:new THREE.Color(this.get("color")), shading:THREE.FlatShading})
},
deleteComposite: function(){
......
......@@ -13,13 +13,17 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
events: {
"click #serialFlushBuffer": "_flushBuffer",
"click #sendTestMessage": "_sendTestMessage",
"click #nodeSetupInstructions": "_setupInstructions"
"click #nodeSetupInstructions": "_setupInstructions",
"click #refreshPorts": "_refreshPorts"
},
_initialize: function(){
this.listenTo(serialComm, "change", this.render);
this.listenTo(serialComm, "change:lastMessageReceived", this._updateIncomingMesage);
this.inTimeout = false;
},
_sendTestMessage: function(e){
......@@ -28,11 +32,31 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
serialComm.send(message);
},
_updateIncomingMesage: function(){
var message = serialComm.get("lastMessageReceived");
var $message = $("#incomingSerialMessage");
$message.html(message);
$message.css("background", "#ffff99");
if (!this.inTimeout) {
this.inTimeout = true;
var self = this;
setTimeout(function(){
$message.css("background", "white");
self.inTimeout = false;
}, 100);
}
},
_flushBuffer: function(e){
e.preventDefault();
serialComm.flushBuffer();
},
_refreshPorts: function(e){
e.preventDefault();
serialComm.refreshPorts();
},
_setupInstructions: function(e){
e.preventDefault();
var self = this;
......@@ -71,7 +95,9 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
<li><a class="serialComm dropdownSelector" data-property="portName" data-value="<%= port %>" href="#"><%= port %></a></li>\
<% }); %>\
</ul>\
</div><br/><br/><br/>\
</div>\
&nbsp;&nbsp;<a href="#" id="refreshPorts" class="btn btn-lg btn-default"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></a><br/><br/>\
Incoming: &nbsp;&nbsp;<pre id="incomingSerialMessage"></pre><br/><br/>\
Stream: &nbsp;&nbsp;<span id="serialDataStream"></span>\
<a href="#" id="sendTestMessage" class="btn btn-block btn-lg btn-default">Send Test Message:</a><br/>\
<input id="seriallTestMessage" value="<%= testMessage %>" placeholder="Test Message" class="form-control fullWidth unresponsiveInput" type="text"><br/><br/>\
......
......@@ -15,12 +15,15 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
portName: "Select Port",
baudRate: 200,
error: null,
testMessage: ""
testMessage: "",
lastMessageReceived: ""
},
initialize: function(){
},
refreshPorts: function(){
socket.emit('refreshPorts');
},
send: function(data){
......@@ -31,7 +34,7 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
socket.emit("flush");
},
changeProperty: function(property, value){
changeProperty: function(property, value){//portName, baudRate
if (property === null || property === undefined || value === null || value === undefined) return;
socket.emit(property, value);//always pass user interaction on
this.set(property, value);
......@@ -49,23 +52,31 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
serialComm.trigger("change");
});
socket.on('disconnected', function(){
socket.on('disconnected', function(){//todo this never happens
serialComm.set("connected", false);
});
socket.on('dataIn', function(data){
serialComm.set("lastMessageReceived", data, {silent:true});
serialComm.trigger("change:lastMessageReceived");
});
socket.on('portConnected', function(data){
console.log("connected port " + data.portName + " at " + data.baudRate);
serialComm.set("baudRate", data.baudRate);
serialComm.set("portName", data.portName)
serialComm.set("portConnected", true);
serialComm.set("error", false);
});
socket.on('portDisconnected', function(data){
console.log("disconnected port " + data.portName + " at " + data.baudRate);
if (serialComm.get("baudRate") != data.baudRate) return;
if (serialComm.get("portName") != data.portName) return;
serialComm.set("portConnected", false);
});
socket.on("error", function(error){
socket.on("errorMsg", function(error){
serialComm.set("error", error);
});
......
......@@ -28,33 +28,25 @@ var baudRate = 9600;
io.on('connection', function(socket){
var allPorts = [];
serialport.list(function(err, ports){
ports.forEach(function(port) {
allPorts.push(port.comName);
refreshAvailablePorts(function(_allPorts, _portName, _baudRate){
currentPort = changePort(_portName, _baudRate);
});
if (!portName && allPorts.length>0) portName = allPorts[0];
if (portName) currentPort = changePort(portName, baudRate);
socket.emit('connected', {
baudRate: baudRate,
portName: portName,
availablePorts: allPorts
});
});
socket.on('baudRate', function(value){
refreshAvailablePorts(function(){
if (!checkThatPortExists(portName)) return;
currentPort = changePort(portName, value);
baudRate = value;
currentPort = changePort(portName, baudRate);
});
});
socket.on('portName', function(value){
if (allPorts.indexOf(value) < 0) {
onPortError("no available port called " + value);
return;
}
refreshAvailablePorts(function(){
if (!checkThatPortExists(value)) return;
currentPort = changePort(value, baudRate);
portName = value;
currentPort = changePort(portName, baudRate);
});
});
socket.on('dataOut', function(data){
......@@ -62,13 +54,50 @@ io.on('connection', function(socket){
});
socket.on('flush', function(){
console.log("flush");
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);
});
allPorts = _allPorts;
if (!portName && _allPorts.length>0) portName = _allPorts[0];
if (callback) callback(allPorts, portName, baudRate);
socket.emit('connected', {
baudRate: baudRate,
portName: portName,
availablePorts: _allPorts
});
});
}
function initPort(_portName, _baudRate){
console.log("initing port " + _portName + " at " + _baudRate);
var port = new SerialPort(_portName, {
baudRate: _baudRate,
parser:serialport.parsers.readline("\n")
......@@ -81,7 +110,7 @@ io.on('connection', function(socket){
currentPort = null;
return;
}
onPortOpen();
onPortOpen(_portName, _baudRate);
port.on('data', onPortData);
port.on('close', onPortClose);
port.on('error', onPortError);
......@@ -90,35 +119,42 @@ io.on('connection', function(socket){
}
function changePort(_portName, _baudRate){
if (!portName) {
console.log("change");
if (!_portName) {
onPortError("no port name specified");
return null;
}
if (currentPort) currentPort.close(function(error){
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;
}
return initPort(_portName, _baudRate);
socket.emit("portDisconnected", {baudRate:oldBaud, portName:oldName});
});
else return initPort(_portName, _baudRate);
}
return initPort(_portName, _baudRate);
}
function onPortOpen(){
socket.emit("portConnected", {baudRate: baudRate, portName:portName});
function onPortOpen(name, baud){
socket.emit("portConnected", {baudRate:baud, portName:name});
}
function onPortData(data){
// console.log(data);
socket.emit("dataIn", data);
}
function onPortClose(){
socket.emit("portDisconnected", {baudRate: baudRate, portName:portName});
// console.log("port closed");
}
function onPortError(error){
console.log("Serial port error " + error);
socket.emit("error", error);
socket.emit("errorMsg", error);
}
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment