From 5c7298c37de8d006ead9e1772e0e2d7ea6814001 Mon Sep 17 00:00:00 2001 From: UT2UH Date: Thu, 15 Apr 2021 12:28:54 +0300 Subject: [PATCH] UBX-NAV-TIMELS validity bits fixes --- src/SparkFun_u-blox_GNSS_Arduino_Library.cpp | 12 ++++++------ src/u-blox_structs.h | 13 +++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/SparkFun_u-blox_GNSS_Arduino_Library.cpp b/src/SparkFun_u-blox_GNSS_Arduino_Library.cpp index 1d2bc91..fcd8cfb 100644 --- a/src/SparkFun_u-blox_GNSS_Arduino_Library.cpp +++ b/src/SparkFun_u-blox_GNSS_Arduino_Library.cpp @@ -2086,7 +2086,7 @@ void SFE_UBLOX_GNSS::processUBXpacket(ubxPacket *msg) packetUBXNAVTIMELS->data.timeToLsEvent = extractSignedLong(msg, 12); packetUBXNAVTIMELS->data.dateOfLsGpsWn = extractInt(msg, 16); packetUBXNAVTIMELS->data.dateOfLsGpsDn = extractInt(msg, 18); - packetUBXNAVTIMELS->data.valid = extractSignedChar(msg, 23); + packetUBXNAVTIMELS->data.valid.all = extractSignedChar(msg, 23); //Mark all datums as fresh (not read before) packetUBXNAVTIMELS->moduleQueried.moduleQueried.all = 0xFFFFFFFF; @@ -10391,9 +10391,9 @@ uint8_t SFE_UBLOX_GNSS::getLeapIndicator(int32_t& timeToLsEvent, uint16_t maxWai if (packetUBXNAVTIMELS == NULL) //Bail if the RAM allocation failed return 3; - if (packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.valid == false) + if (packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.validTimeToLsEvent == false) getLeapSecondEvent(maxWait); - packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.valid = false; //Since we are about to give this to user, mark this data as stale + packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.validTimeToLsEvent = false; //Since we are about to give this to user, mark this data as stale packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.lsChange = false; packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.timeToLsEvent = false; packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.all = false; @@ -10403,7 +10403,7 @@ uint8_t SFE_UBLOX_GNSS::getLeapIndicator(int32_t& timeToLsEvent, uint16_t maxWai // 1 -last minute of the day has 61 seconds // 2 -last minute of the day has 59 seconds // 3 -unknown (clock unsynchronized) - return ((boolean)packetUBXNAVTIMELS->data.valid ? (uint8_t)(packetUBXNAVTIMELS->data.lsChange == -1 ? 2 : packetUBXNAVTIMELS->data.lsChange) : 3); + return ((boolean)packetUBXNAVTIMELS->data.valid.bits.validTimeToLsEvent ? (uint8_t)(packetUBXNAVTIMELS->data.lsChange == -1 ? 2 : packetUBXNAVTIMELS->data.lsChange) : 3); } int8_t SFE_UBLOX_GNSS::getCurrentLeapSeconds(sfe_ublox_ls_src_e& source, uint16_t maxWait) @@ -10412,9 +10412,9 @@ int8_t SFE_UBLOX_GNSS::getCurrentLeapSeconds(sfe_ublox_ls_src_e& source, uint16_ if (packetUBXNAVTIMELS == NULL) //Bail if the RAM allocation failed return false; - if (packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.valid == false) + if (packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.validCurrLs == false) getLeapSecondEvent(maxWait); - packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.valid = false; //Since we are about to give this to user, mark this data as stale + packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.validCurrLs = false; //Since we are about to give this to user, mark this data as stale packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.srcOfCurrLs = false; packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.currLs = false; packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.all = false; diff --git a/src/u-blox_structs.h b/src/u-blox_structs.h index 574baa2..a8a8300 100644 --- a/src/u-blox_structs.h +++ b/src/u-blox_structs.h @@ -870,7 +870,15 @@ typedef struct uint16_t dateOfLsGpsWn; //GPS week num (WN) of the next or the last leap second event uint16_t dateOfLsGpsDn; //GPS day of week num (DN) for the next or last leap second event uint8_t reserved2[3]; - int8_t valid; // Validity flag, 1 = valid, otherwise 0 + union + { + uint8_t all; + struct + { + uint8_t validCurrLs : 1; // 1 = Valid current number of leap seconds value + uint8_t validTimeToLsEvent : 1; // 1 = Valid time to next leap second event or from the last leap second event if no future event scheduled + } bits; + } valid; } UBX_NAV_TIMELS_data_t; typedef struct @@ -891,7 +899,8 @@ typedef struct uint32_t timeToLsEvent : 1; uint32_t dateOfLsGpsWn : 1; uint32_t dateOfLsGpsDn : 1; - uint32_t valid : 1; + uint32_t validCurrLs : 1; + uint32_t validTimeToLsEvent : 1; } bits; } moduleQueried; } UBX_NAV_TIMELS_moduleQueried_t;