Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http');
  2. var url  = require('url');
  3. var m = require('mraa'); //Import MRAA for I2C functions
  4.  
  5. var toByte = function(value) {
  6.     return (value & 255) || 0;
  7. }
  8.  
  9. var devices = {
  10.     servo: {
  11.         addr: [0x74],
  12.         fields: ['actuator', 'speed', 'direction'],
  13.         fn: function(device, data) {
  14.             //the actuator only accepts 1-11
  15.             if(!/^[1-9]|1[01]$/.test(data.actuator)) {
  16.                 return false;
  17.             }
  18.            
  19.             device.writeReg((data.actuator*2)-1, toByte(data.speed));
  20.             device.writeReg(data.actuator*2, toByte(data.direction));
  21.            
  22.             return true;
  23.         }
  24.     },
  25.     led: {
  26.         addr: [0x69],
  27.         fields: ['intentity','actuator'],
  28.         fn: function(device, data) {
  29.             if(!/^RED|GREEN|BLUE|WHITE$/i.test(data.actuator)) {
  30.                 return false;
  31.             }
  32.             device.writeReg(data.actuator.toUpperCase(), toByte(data.intentity) );
  33.            
  34.             return true;
  35.         }
  36.     }
  37. };
  38.  
  39. var executeDevice = function(query) {
  40.     if(!('type' in query)) {
  41.         return false;
  42.     }
  43.    
  44.     if(!devices.hasOwnProperty(query.type)) {
  45.         return false;
  46.     }
  47.    
  48.     if(!('id' in query) || isNaN(query.id)) {
  49.         return false;
  50.     }
  51.    
  52.     var deviceData = devices[query.type];
  53.    
  54.     if(!deviceData.addr[query.id]) {
  55.         return false;
  56.     }
  57.    
  58.     //we need to check if all required fields exist
  59.     var length = deviceData.fields.length;
  60.     for(var i = 0; i < length; i++) {
  61.         if(!(deviceData.fields[i] in query)) {
  62.             return false;
  63.         }
  64.     }
  65.    
  66.     var device = new m.I2c(0);
  67.     device.address(deviceData.addr[query.id]);
  68.    
  69.     return deviceData.fn(device, query);
  70. };
  71.  
  72. var handleGetRequest = function(res, url_parsed) {
  73.     console.log('query: ' + JSON.stringify(url_parsed.query));
  74.     console.log('path: ' + url_parsed.path);
  75.     console.log('pathname: ' + url_parsed.pathname);
  76.  
  77.     switch(url_parsed.pathname) {
  78.         case '/I2C/write':
  79.             console.log("I2C");
  80.             console.log(typeof(url_parsed.query))
  81.             //runNextMethod(url_parsed.query);
  82.             //executeArray(queryToArray(url_parsed.query));
  83.             executeDevice(url_parsed.query);
  84.             res.end();
  85.             break;
  86.         default:
  87.             console.log(url_parsed.pathname, "404")
  88.             res.writeHead(404);
  89.     }
  90. };
  91.  
  92. var handleApiRequest = function(res, url_parsed, method) {
  93.     if (url_parsed.pathname !== '/api') {
  94.         res.statusCode = 404;
  95.     }
  96.     res.end(method);
  97. };
  98.  
  99. var server = http.createServer(function(req, res) {
  100.     var url_parsed = url.parse(req.url, true);
  101.     switch(req.method) {
  102.         case 'GET':
  103.             handleGetRequest(res, url_parsed);
  104.             break;
  105.         case 'PUT':
  106.         case 'POST':
  107.         case 'DELETE':
  108.             handleApiRequest(res, url_parsed, req.method);
  109.             break;
  110.         default:
  111.             res.end('Method not supported');
  112.     }
  113. });
  114. server.listen(8003);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement