From d44391b4805bc9759032e5af0bfead524df1e038 Mon Sep 17 00:00:00 2001 From: Adrien van den Bossche <vandenbo@univ-tlse2.fr> Date: Tue, 21 Jul 2020 10:11:00 +0200 Subject: [PATCH] Add `valid_gnss_position` flag --- .../decode_universal_gnss_packet.js | 17 +++++++++-------- .../encode_universal_gnss_packet.js | 17 +++++++++-------- nodered/package.json | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) 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 3138297..0e18f69 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 7d1c016..42a591a 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 54a7b6f..0022eca 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": { }, -- GitLab