UNPKG

susi-forge

Version:
94 lines (85 loc) 3.34 kB
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); }); } };