diff --git a/nodered/decode_universal_gnss_packet/decode_universal_gnss_packet.js b/nodered/decode_universal_gnss_packet/decode_universal_gnss_packet.js index 3138297e71117fe9a50a50c8b7f1b74a1a7e7e87..0e18f69514507195b1d35a46205a818cae71c1d8 100644 --- a/nodered/decode_universal_gnss_packet/decode_universal_gnss_packet.js +++ b/nodered/decode_universal_gnss_packet/decode_universal_gnss_packet.js @@ -13,17 +13,18 @@ module.exports = function(RED) { var hdr_raw = parseInt(buff[len]); hdr.altitude_presence_flag = (hdr_raw & 0x80) ? true : false; hdr.dop_presence_flag = (hdr_raw & 0x40) ? true : false; + hdr.valid_gnss_position = (hdr_raw & 0x20) ? true : false; p.header = hdr; len += 1; - // Latitude - p.latitude = buff.readFloatLE(len); - len += 4; - - // Longitude - p.longitude = buff.readFloatLE(len); - len += 4; - + // If the message has a valid_gnss_position + if (p.header.valid_gnss_position ) { + p.latitude = buff.readFloatLE(len); + len += 4; + p.longitude = buff.readFloatLE(len); + len += 4; + } + // If the message contains the altitude field if (p.header.altitude_presence_flag ) { p.altitude = buff.readFloatLE(len); diff --git a/nodered/encode_universal_gnss_packet/encode_universal_gnss_packet.js b/nodered/encode_universal_gnss_packet/encode_universal_gnss_packet.js index 7d1c0169ee8bec43a88ba414dbefbb84de41559d..42a591a2ea1a0386d22e5c771b22f9cbe5895dea 100644 --- a/nodered/encode_universal_gnss_packet/encode_universal_gnss_packet.js +++ b/nodered/encode_universal_gnss_packet/encode_universal_gnss_packet.js @@ -6,27 +6,28 @@ module.exports = function(RED) { const buff = Buffer.alloc(128); var len = 0; + var valid_gnss_position = false; var altitude_presence_flag = false; var dop_presence_flag = false; - // Check mandatory fields - if (typeof msg.payload.latitude === 'undefined') return; - if (typeof msg.payload.longitude === 'undefined') return; - // Check optional fields + if ( (typeof msg.payload.latitude !== 'undefined') && (typeof msg.payload.longitude !== 'undefined') ) valid_gnss_position = true; if (typeof msg.payload.altitude !== 'undefined') altitude_presence_flag = true; if (typeof msg.payload.dop !== 'undefined') dop_presence_flag = true; // Make header if (altitude_presence_flag) buff[len] |= 0x80; if (dop_presence_flag) buff[len] |= 0x40; + if (valid_gnss_position) buff[len] |= 0x20; len += 1; // Make latitude and longitude fields - buff.writeFloatLE(msg.payload.latitude, len); - len += 4; - buff.writeFloatLE(msg.payload.longitude, len); - len += 4; + if ( valid_gnss_position ) { + buff.writeFloatLE(msg.payload.latitude, len); + len += 4; + buff.writeFloatLE(msg.payload.longitude, len); + len += 4; + } // Make altitude field if present if ( altitude_presence_flag ) { diff --git a/nodered/package.json b/nodered/package.json index 54a7b6f766b8831722235d4f3c649afff0b78e03..0022eca07da64362e0bf786815d93111fb26d545 100644 --- a/nodered/package.json +++ b/nodered/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-locapack", - "version": "0.0.5", + "version": "0.0.6", "description": "Some nodes to interact with LocaPack devices using the LocaPack protocol", "dependencies": { },