Advertisement
Guest User

Untitled

a guest
Apr 10th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.48 KB | None | 0 0
  1. /**
  2. * \author how.e
  3. * \file udp_server_data.js
  4. *
  5. * Udp server for data functionality.
  6. */
  7.  
  8. /*****************************************************************************/
  9. /* Requires. */
  10. /*****************************************************************************/
  11. var Udp = require("./../udp_server_generic.js");
  12. var fs = require("fs");
  13.  
  14. var mysql = require('mysql');
  15.  
  16. var node1_connection = mysql.createConnection({
  17. host: '',
  18. user: '',
  19. password: '',
  20. database: ''
  21. });
  22.  
  23. /*
  24. Defines a enumeration of available types in a message.
  25. The assigned values are not important.
  26. */
  27. const Types =
  28. {
  29. u8:0x01,
  30. i8:0x11,
  31. u16:0x02,
  32. i16:0x12,
  33. u32:0x04,
  34. i32:0x14,
  35. float:0x24,
  36. u_array:0x00,
  37. i_array:0x10,
  38. ascii:0x40
  39. };
  40.  
  41. /*
  42. This encoding reflects the encoding used on the tag firmware when it
  43. generates a vehicle message.
  44. */
  45. const VehicleCodex =
  46. {
  47. MessageId: {name:"msg_id", address:0, length:1, type:Types.u8 },
  48. Ieee: {name:"ieee", address:1, length:8, type:Types.u_array},
  49. Vin: {name:"vin", address:9, length:17, type:Types.ascii },
  50. Speed: {name:"speed", address:26, length:1, type:Types.u8 },
  51. Mil: {name:"mil", address:27, length:1, type:Types.u8 },
  52. FuelUnit: {name:"fuel_u", address:28, length:1, type:Types.u8 },
  53. Battery_mV: {name:"bat_mv", address:29, length:2, type:Types.u16 },
  54. Dmc: {name:"dmc", address:31, length:2, type:Types.u16 },
  55. Dms: {name:"dms", address:33, length:2, type:Types.u16 },
  56. Alive: {name:"alive", address:35, length:4, type:Types.u32 },
  57. Fuel: {name:"fuel", address:39, length:4, type:Types.float },
  58. Rpm: {name:"rpm", address:43, length:4, type:Types.float },
  59. Odometer: {name:"odo", address:47, length:4, type:Types.float },
  60. Dst: {name:"dst", address:51, length:4, type:Types.float },
  61. Ignition: {name:"ign", address:55, length:2, type:Types.u16 },
  62. IndexFuel: {name:"i_fuel", address:57, length:2, type:Types.u16 },
  63. IndexOdo: {name:"i_odo", address:59, length:2, type:Types.u16 },
  64. Dtc: {name:"dtc", address:61, length:20, type:Types.u_array},
  65. Behaviour: {name:"behave", address:81, length:28, type:Types.u_array}
  66. };
  67.  
  68. /*
  69. This encoding reflects the encoding used on the tag firmware when it
  70. generates a location message.
  71. */
  72. const LocationCodex =
  73. {
  74. MessageId: {name:"msg_id", address:0, length:1, type:Types.u8 },
  75. Ieee: {name:"ieee", address:1, length:8, type:Types.u_array},
  76. Vin: {name:"vin", address:9, length:17, type:Types.ascii },
  77. Speed: {name:"speed", address:26, length:1, type:Types.u8 },
  78. Lon: {name:"lon", address:27, length:4, type:Types.float },
  79. Lat: {name:"lat", address:31, length:4, type:Types.float },
  80. GpsSpeed: {name:"gps_sp", address:35, length:4, type:Types.float },
  81. Delta: {name:"delta", address:39, length:4, type:Types.float },
  82. Idle: {name:"idle", address:43, length:4, type:Types.u32 },
  83. Accuracy: {name:"acc", address:47, length:4, type:Types.float },
  84. Heading: {name:"head", address:51, length:4, type:Types.float },
  85. Marks: {name:"marks", address:55, length:10, type:Types.u_array},
  86. MarkTx: {name:"mark_tx", address:65, length:5, type:Types.i_array},
  87. MarkRx: {name:"mark_rx", address:70, length:5, type:Types.i_array},
  88. MarkCount: {name:"mark_c", address:75, length:1, type:Types.u8 }
  89. };
  90.  
  91. /*****************************************************************************/
  92. /* Variables. */
  93. /*****************************************************************************/
  94.  
  95. var server;
  96. var callback = null;
  97.  
  98. /*****************************************************************************/
  99. /* Functions. */
  100. /*****************************************************************************/
  101. function rx(message)
  102. {
  103. if (callback != null)
  104. {
  105. callback(message);
  106. }
  107. else
  108. {
  109. console.log("Str->>data.rx: " + getDateTime() + "->>IP" + message.Address() + "->>>" + message.message.toString());
  110. //console.log("Raw->>data.rx: " + getDateTime() + "->>IP" + message.Address() + "->>>" + message.message);
  111. var _vehicle_message = new Uint16Array(message.message);
  112. DecodeBytes(VehicleCodex, _vehicle_message);
  113. var _location_message = new Uint16Array(message.message);
  114. DecodeBytes(LocationCodex, _location_message);
  115. node1_connection.query("insert into raw_data(data, data_text, data_bin) values ( '" + buffer_hex + "', '" + buffer_hex + "', '" + buffer_hex + "')", function (err, rows, fields) {
  116. if (err)
  117. {
  118. console.log(": Bin data.insert.fail:" + err + getDateTime());
  119. //throw err;
  120. }
  121. console.log(': Bin Message Stored!\n');
  122. });
  123.  
  124. }
  125. }
  126.  
  127. var JdDataServer = function (port)
  128. {
  129. server = new Udp("data", port, rx);
  130. };
  131.  
  132. JdDataServer.prototype.Start = function ()
  133. {
  134. server.Start();
  135. };
  136.  
  137. JdDataServer.prototype.Stop = function ()
  138. {
  139. server.Stop();
  140. };
  141.  
  142. JdDataServer.prototype.Rx = function (cb)
  143. {
  144. callback = cb;
  145. }
  146.  
  147. JdDataServer.prototype.Send = function (address, port, data)
  148. {
  149. server.Send(address, port, data);
  150. };
  151.  
  152. function getDateTime() {
  153.  
  154. var date = new Date();
  155.  
  156. var hour = date.getHours();
  157. hour = (hour < 10 ? "0" : "") + hour;
  158.  
  159. var min = date.getMinutes();
  160. min = (min < 10 ? "0" : "") + min;
  161.  
  162. var sec = date.getSeconds();
  163. sec = (sec < 10 ? "0" : "") + sec;
  164.  
  165. var year = date.getFullYear();
  166.  
  167. var month = date.getMonth() + 1;
  168. month = (month < 10 ? "0" : "") + month;
  169.  
  170. var day = date.getDate();
  171. day = (day < 10 ? "0" : "") + day;
  172.  
  173. return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec;
  174.  
  175. }
  176.  
  177. /*
  178. Output the decoded value of each field from the message.
  179. */
  180. function DecodeBytes(codex, message)
  181. {
  182. // Get a DataView from the message ArrayBuffer.
  183. var dataview = new DataView(message.buffer);
  184.  
  185. // Iterate through each field in the codex...
  186. for(var k in codex)
  187. {
  188. var name = codex[k].name;
  189. var address = codex[k].address;
  190. var length = codex[k].length;
  191. var type = codex[k].type;
  192. // Decode based on the expected data type...
  193. switch (type)
  194. {
  195. case Types.ascii:
  196. var data = message.subarray(address, address + length);
  197. console.log(name + ":" + String.fromCharCode.apply(null, data));
  198. break;
  199. case Types.u8:
  200. console.log(name + ":" + dataview.getUint8(address));
  201. break;
  202. case Types.u16:
  203. console.log(name + ":" + dataview.getUint16(address, true));
  204. break;
  205. case Types.u32:
  206. console.log(name + ":" + dataview.getUint32(address, true));
  207. break;
  208. case Types.float:
  209. console.log(name + ":" + dataview.getFloat32(address, true));
  210. break;
  211. case Types.u_array:
  212. var uarray = new Uint8Array(message.buffer, address, length);
  213. console.log(name + ":[" + uarray + "]");
  214. for (var i = 0; i < uarray.length; i++) {
  215. console.log(name + "Values: [" + uarray[i] + "]");
  216. }
  217. break;
  218. case Types.i_array:
  219. var iarray = new Int8Array(message.buffer, address, length);
  220. console.log(name + ":[" + iarray + "]");
  221. for (var i = 0; i < iarray.length; i++) {
  222. console.log(name + "Values: [" + iarray[i] + "]");
  223. }
  224. break;
  225. default:
  226. var data = message.subarray(address, address + length);
  227. console.log("sub(" + address + "," + length + "):" + name + " [" + data + "]");
  228. break;
  229. }
  230. }
  231. }
  232.  
  233.  
  234. /*****************************************************************************/
  235. /* Exports. */
  236. /*****************************************************************************/
  237.  
  238. module.exports = JdDataServer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement