Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var http = require('http');
- var url = require('url');
- var m = require('mraa'); //Import MRAA for I2C functions
- var toByte = function(value) {
- return (value & 255) || 0;
- }
- var devices = {
- servo: {
- addr: [0x74],
- fields: ['actuator', 'speed', 'direction'],
- fn: function(device, data) {
- //the actuator only accepts 1-11
- if(!/^[1-9]|1[01]$/.test(data.actuator)) {
- return false;
- }
- device.writeReg((data.actuator*2)-1, toByte(data.speed));
- device.writeReg(data.actuator*2, toByte(data.direction));
- return true;
- }
- },
- led: {
- addr: [0x69],
- fields: ['intentity','actuator'],
- fn: function(device, data) {
- if(!/^RED|GREEN|BLUE|WHITE$/i.test(data.actuator)) {
- return false;
- }
- device.writeReg(data.actuator.toUpperCase(), toByte(data.intentity) );
- return true;
- }
- }
- };
- var executeDevice = function(query) {
- if(!('type' in query)) {
- return false;
- }
- if(!devices.hasOwnProperty(query.type)) {
- return false;
- }
- if(!('id' in query) || isNaN(query.id)) {
- return false;
- }
- var deviceData = devices[query.type];
- if(!deviceData.addr[query.id]) {
- return false;
- }
- //we need to check if all required fields exist
- var length = deviceData.fields.length;
- for(var i = 0; i < length; i++) {
- if(!(deviceData.fields[i] in query)) {
- return false;
- }
- }
- var device = new m.I2c(0);
- device.address(deviceData.addr[query.id]);
- return deviceData.fn(device, query);
- };
- var handleGetRequest = function(res, url_parsed) {
- console.log('query: ' + JSON.stringify(url_parsed.query));
- console.log('path: ' + url_parsed.path);
- console.log('pathname: ' + url_parsed.pathname);
- switch(url_parsed.pathname) {
- case '/I2C/write':
- console.log("I2C");
- console.log(typeof(url_parsed.query))
- //runNextMethod(url_parsed.query);
- //executeArray(queryToArray(url_parsed.query));
- executeDevice(url_parsed.query);
- res.end();
- break;
- default:
- console.log(url_parsed.pathname, "404")
- res.writeHead(404);
- }
- };
- var handleApiRequest = function(res, url_parsed, method) {
- if (url_parsed.pathname !== '/api') {
- res.statusCode = 404;
- }
- res.end(method);
- };
- var server = http.createServer(function(req, res) {
- var url_parsed = url.parse(req.url, true);
- switch(req.method) {
- case 'GET':
- handleGetRequest(res, url_parsed);
- break;
- case 'PUT':
- case 'POST':
- case 'DELETE':
- handleApiRequest(res, url_parsed, req.method);
- break;
- default:
- res.end('Method not supported');
- }
- });
- server.listen(8003);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement