From a186664fabde9aa9a93e668a5cfdcc65e933d1fe Mon Sep 17 00:00:00 2001 From: PaulZC Date: Thu, 17 Mar 2022 18:42:32 +0000 Subject: [PATCH] Add UBX-RXM-COR to ZED examples 19 and 20 --- ...ample19_LBand_Corrections_with_NEO-D9S.ino | 65 +++++++++++++++++ ...xample20_PMP_with_L-Band_Keys_via_MQTT.ino | 73 ++++++++++++++++++- 2 files changed, 134 insertions(+), 4 deletions(-) diff --git a/examples/ZED-F9P/Example19_LBand_Corrections_with_NEO-D9S/Example19_LBand_Corrections_with_NEO-D9S.ino b/examples/ZED-F9P/Example19_LBand_Corrections_with_NEO-D9S/Example19_LBand_Corrections_with_NEO-D9S.ino index 31e721e..e927177 100644 --- a/examples/ZED-F9P/Example19_LBand_Corrections_with_NEO-D9S/Example19_LBand_Corrections_with_NEO-D9S.ino +++ b/examples/ZED-F9P/Example19_LBand_Corrections_with_NEO-D9S/Example19_LBand_Corrections_with_NEO-D9S.ino @@ -121,6 +121,67 @@ void printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct) //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// Callback: printRXMCOR will be called when new RXM COR data arrives +// See u-blox_structs.h for the full definition of UBX_RXM_COR_data_t +// _____ You can use any name you like for the callback. Use the same name when you call setRXMCORcallbackPtr +// / _____ This _must_ be UBX_RXM_COR_data_t +// | / _____ You can use any name you like for the struct +// | | / +// | | | +void printRXMCOR(UBX_RXM_COR_data_t *ubxDataStruct) +{ + Serial.print(F("UBX-RXM-COR: ebno: ")); + Serial.print(ubxDataStruct->ebno); + + Serial.print(F(" protocol: ")); + if (ubxDataStruct->statusInfo.bits.protocol == 1) + Serial.print(F("RTCM3")); + else if (ubxDataStruct->statusInfo.bits.protocol == 2) + Serial.print(F("SPARTN")); + else if (ubxDataStruct->statusInfo.bits.protocol == 29) + Serial.print(F("PMP (SPARTN)")); + else if (ubxDataStruct->statusInfo.bits.protocol == 30) + Serial.print(F("QZSSL6")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" errStatus: ")); + if (ubxDataStruct->statusInfo.bits.errStatus == 1) + Serial.print(F("Error-free")); + else if (ubxDataStruct->statusInfo.bits.errStatus == 2) + Serial.print(F("Erroneous")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" msgUsed: ")); + if (ubxDataStruct->statusInfo.bits.msgUsed == 1) + Serial.print(F("Not used")); + else if (ubxDataStruct->statusInfo.bits.msgUsed == 2) + Serial.print(F("Used")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" msgEncrypted: ")); + if (ubxDataStruct->statusInfo.bits.msgEncrypted == 1) + Serial.print(F("Not encrypted")); + else if (ubxDataStruct->statusInfo.bits.msgEncrypted == 2) + Serial.print(F("Encrypted")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" msgDecrypted: ")); + if (ubxDataStruct->statusInfo.bits.msgDecrypted == 1) + Serial.print(F("Not decrypted")); + else if (ubxDataStruct->statusInfo.bits.msgDecrypted == 2) + Serial.print(F("Successfully decrypted")); + else + Serial.print(F("Unknown")); + + Serial.println(); +} + +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + void setup() { Serial.begin(115200); @@ -148,6 +209,8 @@ void setup() if (ok) ok = myGNSS.setNavigationFrequency(1); //Set output in Hz. if (ok) ok = myGNSS.setVal8(UBLOX_CFG_SPARTN_USE_SOURCE, 1); // use LBAND PMP message + + if (ok) ok = myGNSS.setVal8(UBLOX_CFG_MSGOUT_UBX_RXM_COR_I2C, 1); // Enable UBX-RXM-COR messages on I2C //Configure the SPARTN IP Dynamic Keys //"When the receiver boots, the host should send 'current' and 'next' keys in one message." - Use setDynamicSPARTNKeys for this. @@ -164,6 +227,8 @@ void setup() myGNSS.setAutoPVTcallbackPtr(&printPVTdata); // Enable automatic NAV PVT messages with callback to printPVTdata so we can watch the carrier solution go to fixed + myGNSS.setRXMCORcallbackPtr(&printRXMCOR); // Print the contents of UBX-RXM-COR messages so we can check if the PMP data is being decrypted successfully + //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Begin and configure the NEO-D9S L-Band receiver diff --git a/examples/ZED-F9P/Example20_PMP_with_L-Band_Keys_via_MQTT/Example20_PMP_with_L-Band_Keys_via_MQTT.ino b/examples/ZED-F9P/Example20_PMP_with_L-Band_Keys_via_MQTT/Example20_PMP_with_L-Band_Keys_via_MQTT.ino index 9b01791..a1fd250 100644 --- a/examples/ZED-F9P/Example20_PMP_with_L-Band_Keys_via_MQTT/Example20_PMP_with_L-Band_Keys_via_MQTT.ino +++ b/examples/ZED-F9P/Example20_PMP_with_L-Band_Keys_via_MQTT/Example20_PMP_with_L-Band_Keys_via_MQTT.ino @@ -58,6 +58,13 @@ const uint32_t myLBandFreq = 1556290000; // Uncomment this line to use the US SP #define OK(ok) (ok ? F(" -> OK") : F(" -> ERROR!")) // Convert uint8_t into OK/ERROR +//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +//Global variables + +long lastReceived_ms = 0; //5 RTCM messages take approximately ~300ms to arrive at 115200bps +int maxTimeBeforeHangup_ms = 10000; //If we fail to get a complete RTCM frame after 10s, then disconnect from caster + //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Callback: pushRXMPMP will be called when new PMP data arrives @@ -143,11 +150,65 @@ void printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct) } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -//Global variables -long lastReceived_ms = 0; //5 RTCM messages take approximately ~300ms to arrive at 115200bps -int maxTimeBeforeHangup_ms = 10000; //If we fail to get a complete RTCM frame after 10s, then disconnect from caster +// Callback: printRXMCOR will be called when new RXM COR data arrives +// See u-blox_structs.h for the full definition of UBX_RXM_COR_data_t +// _____ You can use any name you like for the callback. Use the same name when you call setRXMCORcallbackPtr +// / _____ This _must_ be UBX_RXM_COR_data_t +// | / _____ You can use any name you like for the struct +// | | / +// | | | +void printRXMCOR(UBX_RXM_COR_data_t *ubxDataStruct) +{ + Serial.print(F("UBX-RXM-COR: ebno: ")); + Serial.print(ubxDataStruct->ebno); + + Serial.print(F(" protocol: ")); + if (ubxDataStruct->statusInfo.bits.protocol == 1) + Serial.print(F("RTCM3")); + else if (ubxDataStruct->statusInfo.bits.protocol == 2) + Serial.print(F("SPARTN")); + else if (ubxDataStruct->statusInfo.bits.protocol == 29) + Serial.print(F("PMP (SPARTN)")); + else if (ubxDataStruct->statusInfo.bits.protocol == 30) + Serial.print(F("QZSSL6")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" errStatus: ")); + if (ubxDataStruct->statusInfo.bits.errStatus == 1) + Serial.print(F("Error-free")); + else if (ubxDataStruct->statusInfo.bits.errStatus == 2) + Serial.print(F("Erroneous")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" msgUsed: ")); + if (ubxDataStruct->statusInfo.bits.msgUsed == 1) + Serial.print(F("Not used")); + else if (ubxDataStruct->statusInfo.bits.msgUsed == 2) + Serial.print(F("Used")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" msgEncrypted: ")); + if (ubxDataStruct->statusInfo.bits.msgEncrypted == 1) + Serial.print(F("Not encrypted")); + else if (ubxDataStruct->statusInfo.bits.msgEncrypted == 2) + Serial.print(F("Encrypted")); + else + Serial.print(F("Unknown")); + + Serial.print(F(" msgDecrypted: ")); + if (ubxDataStruct->statusInfo.bits.msgDecrypted == 1) + Serial.print(F("Not decrypted")); + else if (ubxDataStruct->statusInfo.bits.msgDecrypted == 2) + Serial.print(F("Successfully decrypted")); + else + Serial.print(F("Unknown")); + + Serial.println(); +} //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @@ -180,6 +241,8 @@ void setup() if (ok) ok = myGNSS.setVal8(UBLOX_CFG_SPARTN_USE_SOURCE, 1); // use LBAND PMP message + if (ok) ok = myGNSS.setVal8(UBLOX_CFG_MSGOUT_UBX_RXM_COR_I2C, 1); // Enable UBX-RXM-COR messages on I2C + //if (ok) ok = myGNSS.saveConfiguration(VAL_CFG_SUBSEC_IOPORT | VAL_CFG_SUBSEC_MSGCONF); //Optional: Save the ioPort and message settings to NVM Serial.print(F("GNSS: configuration ")); @@ -187,6 +250,8 @@ void setup() myGNSS.setAutoPVTcallbackPtr(&printPVTdata); // Enable automatic NAV PVT messages with callback to printPVTdata so we can watch the carrier solution go to fixed + myGNSS.setRXMCORcallbackPtr(&printRXMCOR); // Print the contents of UBX-RXM-COR messages so we can check if the PMP data is being decrypted successfully + //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Begin and configure the NEO-D9S L-Band receiver