Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * \author how.e
- * \file udp_server_data.js
- *
- * Udp server for data functionality.
- */
- /*****************************************************************************/
- /* Requires. */
- /*****************************************************************************/
- var Udp = require("./../udp_server_generic.js");
- var fs = require("fs");
- var mysql = require('mysql');
- var node1_connection = mysql.createConnection({
- host: '',
- user: '',
- password: '',
- database: ''
- });
- /*
- Defines a enumeration of available types in a message.
- The assigned values are not important.
- */
- const Types =
- {
- u8:0x01,
- i8:0x11,
- u16:0x02,
- i16:0x12,
- u32:0x04,
- i32:0x14,
- float:0x24,
- u_array:0x00,
- i_array:0x10,
- ascii:0x40
- };
- /*
- This encoding reflects the encoding used on the tag firmware when it
- generates a vehicle message.
- */
- const VehicleCodex =
- {
- MessageId: {name:"msg_id", address:0, length:1, type:Types.u8 },
- Ieee: {name:"ieee", address:1, length:8, type:Types.u_array},
- Vin: {name:"vin", address:9, length:17, type:Types.ascii },
- Speed: {name:"speed", address:26, length:1, type:Types.u8 },
- Mil: {name:"mil", address:27, length:1, type:Types.u8 },
- FuelUnit: {name:"fuel_u", address:28, length:1, type:Types.u8 },
- Battery_mV: {name:"bat_mv", address:29, length:2, type:Types.u16 },
- Dmc: {name:"dmc", address:31, length:2, type:Types.u16 },
- Dms: {name:"dms", address:33, length:2, type:Types.u16 },
- Alive: {name:"alive", address:35, length:4, type:Types.u32 },
- Fuel: {name:"fuel", address:39, length:4, type:Types.float },
- Rpm: {name:"rpm", address:43, length:4, type:Types.float },
- Odometer: {name:"odo", address:47, length:4, type:Types.float },
- Dst: {name:"dst", address:51, length:4, type:Types.float },
- Ignition: {name:"ign", address:55, length:2, type:Types.u16 },
- IndexFuel: {name:"i_fuel", address:57, length:2, type:Types.u16 },
- IndexOdo: {name:"i_odo", address:59, length:2, type:Types.u16 },
- Dtc: {name:"dtc", address:61, length:20, type:Types.u_array},
- Behaviour: {name:"behave", address:81, length:28, type:Types.u_array}
- };
- /*
- This encoding reflects the encoding used on the tag firmware when it
- generates a location message.
- */
- const LocationCodex =
- {
- MessageId: {name:"msg_id", address:0, length:1, type:Types.u8 },
- Ieee: {name:"ieee", address:1, length:8, type:Types.u_array},
- Vin: {name:"vin", address:9, length:17, type:Types.ascii },
- Speed: {name:"speed", address:26, length:1, type:Types.u8 },
- Lon: {name:"lon", address:27, length:4, type:Types.float },
- Lat: {name:"lat", address:31, length:4, type:Types.float },
- GpsSpeed: {name:"gps_sp", address:35, length:4, type:Types.float },
- Delta: {name:"delta", address:39, length:4, type:Types.float },
- Idle: {name:"idle", address:43, length:4, type:Types.u32 },
- Accuracy: {name:"acc", address:47, length:4, type:Types.float },
- Heading: {name:"head", address:51, length:4, type:Types.float },
- Marks: {name:"marks", address:55, length:10, type:Types.u_array},
- MarkTx: {name:"mark_tx", address:65, length:5, type:Types.i_array},
- MarkRx: {name:"mark_rx", address:70, length:5, type:Types.i_array},
- MarkCount: {name:"mark_c", address:75, length:1, type:Types.u8 }
- };
- /*****************************************************************************/
- /* Variables. */
- /*****************************************************************************/
- var server;
- var callback = null;
- /*****************************************************************************/
- /* Functions. */
- /*****************************************************************************/
- function rx(message)
- {
- if (callback != null)
- {
- callback(message);
- }
- else
- {
- console.log("Str->>data.rx: " + getDateTime() + "->>IP" + message.Address() + "->>>" + message.message.toString());
- //console.log("Raw->>data.rx: " + getDateTime() + "->>IP" + message.Address() + "->>>" + message.message);
- var _vehicle_message = new Uint16Array(message.message);
- DecodeBytes(VehicleCodex, _vehicle_message);
- var _location_message = new Uint16Array(message.message);
- DecodeBytes(LocationCodex, _location_message);
- node1_connection.query("insert into raw_data(data, data_text, data_bin) values ( '" + buffer_hex + "', '" + buffer_hex + "', '" + buffer_hex + "')", function (err, rows, fields) {
- if (err)
- {
- console.log(": Bin data.insert.fail:" + err + getDateTime());
- //throw err;
- }
- console.log(': Bin Message Stored!\n');
- });
- }
- }
- var JdDataServer = function (port)
- {
- server = new Udp("data", port, rx);
- };
- JdDataServer.prototype.Start = function ()
- {
- server.Start();
- };
- JdDataServer.prototype.Stop = function ()
- {
- server.Stop();
- };
- JdDataServer.prototype.Rx = function (cb)
- {
- callback = cb;
- }
- JdDataServer.prototype.Send = function (address, port, data)
- {
- server.Send(address, port, data);
- };
- function getDateTime() {
- var date = new Date();
- var hour = date.getHours();
- hour = (hour < 10 ? "0" : "") + hour;
- var min = date.getMinutes();
- min = (min < 10 ? "0" : "") + min;
- var sec = date.getSeconds();
- sec = (sec < 10 ? "0" : "") + sec;
- var year = date.getFullYear();
- var month = date.getMonth() + 1;
- month = (month < 10 ? "0" : "") + month;
- var day = date.getDate();
- day = (day < 10 ? "0" : "") + day;
- return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec;
- }
- /*
- Output the decoded value of each field from the message.
- */
- function DecodeBytes(codex, message)
- {
- // Get a DataView from the message ArrayBuffer.
- var dataview = new DataView(message.buffer);
- // Iterate through each field in the codex...
- for(var k in codex)
- {
- var name = codex[k].name;
- var address = codex[k].address;
- var length = codex[k].length;
- var type = codex[k].type;
- // Decode based on the expected data type...
- switch (type)
- {
- case Types.ascii:
- var data = message.subarray(address, address + length);
- console.log(name + ":" + String.fromCharCode.apply(null, data));
- break;
- case Types.u8:
- console.log(name + ":" + dataview.getUint8(address));
- break;
- case Types.u16:
- console.log(name + ":" + dataview.getUint16(address, true));
- break;
- case Types.u32:
- console.log(name + ":" + dataview.getUint32(address, true));
- break;
- case Types.float:
- console.log(name + ":" + dataview.getFloat32(address, true));
- break;
- case Types.u_array:
- var uarray = new Uint8Array(message.buffer, address, length);
- console.log(name + ":[" + uarray + "]");
- for (var i = 0; i < uarray.length; i++) {
- console.log(name + "Values: [" + uarray[i] + "]");
- }
- break;
- case Types.i_array:
- var iarray = new Int8Array(message.buffer, address, length);
- console.log(name + ":[" + iarray + "]");
- for (var i = 0; i < iarray.length; i++) {
- console.log(name + "Values: [" + iarray[i] + "]");
- }
- break;
- default:
- var data = message.subarray(address, address + length);
- console.log("sub(" + address + "," + length + "):" + name + " [" + data + "]");
- break;
- }
- }
- }
- /*****************************************************************************/
- /* Exports. */
- /*****************************************************************************/
- module.exports = JdDataServer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement