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