susi-forge
Version:
94 lines (85 loc) • 3.34 kB
JavaScript
var LedController = {
init: function(){
susi.registerProcessor("demo::led::on", this.setLedOn.bind(this));
susi.registerProcessor("demo::led::off", this.setLedOff.bind(this));
susi.registerProcessor("demo::led::rgb", this.setRGB.bind(this));
susi.registerProcessor("demo::led::red", this.setTrafficRed.bind(this));
susi.registerProcessor("demo::led::yellow", this.setTrafficYellow.bind(this));
susi.registerProcessor("demo::led::green", this.setTrafficGreen.bind(this));
log("LED-Controller init ready.");
},
setLedOn: function(event){
MainController.syscall("led-on",function(res){
event.payload = {success: (res.payload.return === 0)};
susi.ack(event);
});
},
setLedOff: function(event){
MainController.syscall("led-off",function(res){
event.payload = {success: (res.payload.return === 0)};
susi.ack(event);
});
},
setTrafficRed: function(event){
MainController.syscall("led-red",function(res){
event.payload = {success: (res.payload.return === 0)};
susi.ack(event);
});
},
setTrafficYellow: function(event){
MainController.syscall("led-yellow",function(res){
event.payload = {success: (res.payload.return === 0)};
susi.ack(event);
});
},
setTrafficGreen: function(event){
MainController.syscall("led-green",function(res){
event.payload = {success: (res.payload.return === 0)};
susi.ack(event);
});
},
setRGB: function(event){
if( event.payload === undefined ||
event.payload.red === undefined ||
event.payload.green === undefined ||
event.payload.blue === undefined ){
throw "you must specify payload fields 'red', 'green' and 'blue'.";
}
if( !typeof event.payload.red === 'number' ||
!typeof event.payload.green === 'number' ||
!typeof event.payload.blue === 'number' ){
throw "you must specify payload fields 'red', 'green' and 'blue' as integers.";
}
if( !(event.payload.red >= 0 && event.payload.red <= 255) ||
!(event.payload.green >= 0 && event.payload.green <= 255) ||
!(event.payload.blue >= 0 && event.payload.blue <= 255)){
throw "you must specify payload fields 'red', 'green' and 'blue' as integers between 0 and 255.";
}
var redHex = event.payload.red.toString(16),
greenHex = event.payload.green.toString(16),
blueHex = event.payload.blue.toString(16);
if(redHex.length == 1){
redHex = '0'+redHex;
}
if(greenHex.length == 1){
greenHex = '0'+greenHex;
}
if(blueHex.length == 1){
blueHex = '0'+blueHex;
}
susi.publish({
topic: 'syscall::exec',
payload: {
cmd: 'set-rgb',
args: {
RED: redHex,
GREEN: greenHex,
BLUE: blueHex
}
}
},function(res){
event.payload = {success: (res.payload.return === 0)};
susi.ack(event);
});
}
};