diff --git a/examples/ZED-F9P/Example8_GetHighPrecisionPositionAndAccuracy/Example8_GetHighPrecisionPositionAndAccuracy.ino b/examples/ZED-F9P/Example10_GetHighPrecisionPositionAndAccuracy/Example10_GetHighPrecisionPositionAndAccuracy.ino similarity index 100% rename from examples/ZED-F9P/Example8_GetHighPrecisionPositionAndAccuracy/Example8_GetHighPrecisionPositionAndAccuracy.ino rename to examples/ZED-F9P/Example10_GetHighPrecisionPositionAndAccuracy/Example10_GetHighPrecisionPositionAndAccuracy.ino diff --git a/examples/ZED-F9P/Example9_GetHighPrecisionPositionUsingDouble/Example9_GetHighPrecisionPositionUsingDouble.ino b/examples/ZED-F9P/Example11_GetHighPrecisionPositionUsingDouble/Example11_GetHighPrecisionPositionUsingDouble.ino similarity index 100% rename from examples/ZED-F9P/Example9_GetHighPrecisionPositionUsingDouble/Example9_GetHighPrecisionPositionUsingDouble.ino rename to examples/ZED-F9P/Example11_GetHighPrecisionPositionUsingDouble/Example11_GetHighPrecisionPositionUsingDouble.ino diff --git a/examples/ZED-F9P/Example11_setStaticPosition/Example11_setStaticPosition.ino b/examples/ZED-F9P/Example11_setStaticPosition/Example11_setStaticPosition.ino new file mode 100644 index 0000000..51a7e89 --- /dev/null +++ b/examples/ZED-F9P/Example11_setStaticPosition/Example11_setStaticPosition.ino @@ -0,0 +1,73 @@ +/* + Set the static position of the receiver. + By: SparkFun Electronics / Nathan Seidle + Date: September 26th, 2020 + License: MIT. See license file for more information but you can + basically do whatever you want with this code. + + This example shows how to set the static position of a receiver + using an Earth-Centered, Earth-Fixed (ECEF) location. This is the + output from a long (24 hour+) survey-in. Setting the static position + immediately causes the receiver to begin outputting RTCM data (if + enabled), perfect for setting up your own RTCM NTRIP caster or CORS. + + Feel like supporting open source hardware? + Buy a board from SparkFun! + ZED-F9P RTK2: https://www.sparkfun.com/products/15136 + NEO-M8P RTK: https://www.sparkfun.com/products/15005 + + Hardware Connections: + Plug a Qwiic cable into the GPS and a BlackBoard + If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425) + Open the serial monitor at 115200 baud to see the output +*/ + +#include //Needed for I2C to GPS + +#include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_Ublox_GPS +SFE_UBLOX_GPS myGPS; + +void setup() +{ + Serial.begin(115200); // You may need to increase this for high navigation rates! + while (!Serial) + ; //Wait for user to open terminal + Serial.println(F("SparkFun u-blox Example")); + + Wire.begin(); + + //myGPS.enableDebugging(); // Uncomment this line to enable debug messages + + if (myGPS.begin() == false) //Connect to the u-blox module using Wire port + { + Serial.println(F("u-blox GPS not detected at default I2C address. Please check wiring. Freezing.")); + while (1) + ; + } + + myGPS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise) + + //-1280208.308,-4716803.847,4086665.811 is SparkFun HQ so... + + //Units are cm so 1234 = 12.34m + //myGPS.setStaticPosition(-128020831, -471680385, 408666581); + + //Units are cm with a high precision extension so -1234.5678 should be called: (-123456, -78) + myGPS.setStaticPosition(-128020830, -80, -471680384, -70, 408666581, 10); //With high precision 0.1mm parts + + //We can also set via lat/long + //40.09029751,-105.18507900,1560.238 + //myGPS.setStaticPosition(400902975, -1051850790, 156024, true); //True at end enables lat/long input + //myGPS.setStaticPosition(400902975, 10, -1051850790, 0, 156023, 80, true); + + //Now let's use getVals to read back the data + //long ecefX = myGPS.getVal32(0x40030003); + //Serial.print("ecefX: "); + //Serial.println(ecefX); + + Serial.println(F("Done!")); +} + +void loop() +{ +} diff --git a/examples/ZED-F9P/Example6_GetVal/Example6_GetVal.ino b/examples/ZED-F9P/Example6_GetVal/Example6_GetVal.ino index a0d2766..4763a83 100644 --- a/examples/ZED-F9P/Example6_GetVal/Example6_GetVal.ino +++ b/examples/ZED-F9P/Example6_GetVal/Example6_GetVal.ino @@ -1,12 +1,12 @@ /* - Send UBX binary commands to enable RTCM sentences on Ublox ZED-F9P module + Get a device's I2C address using advanced getVal method By: Nathan Seidle SparkFun Electronics Date: January 9th, 2019 License: MIT. See license file for more information but you can basically do whatever you want with this code. - Ublox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the + u-blox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the UBX-CFG commands are deprecated; they still work, they just recommend using VALSET, VALGET, and VALDEL commands instead. This example shows how to use this new command structure. @@ -32,27 +32,29 @@ long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to Ublox m void setup() { Serial.begin(115200); - while (!Serial); //Wait for user to open terminal - Serial.println("Ublox getVal example"); + while (!Serial) + ; //Wait for user to open terminal + Serial.println("u-blox getVal example"); Wire.begin(); Wire.setClock(400000); //Increase I2C clock speed to 400kHz if (myGPS.begin() == false) //Connect to the Ublox module using Wire port { - Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing.")); - while (1); + Serial.println(F("u-blox GPS not detected at default I2C address. Please check wiring. Freezing.")); + while (1) + ; } myGPS.enableDebugging(); //Enable debug messages over Serial (default) //myGPS.enableDebugging(SerialUSB); //Enable debug messages over Serial USB - uint8_t currentI2Caddress = myGPS.getVal8(0x20510001); + uint8_t currentI2Caddress = myGPS.getVal8(UBLOX_CFG_I2C_ADDRESS); Serial.print("Current I2C address (should be 0x42): 0x"); Serial.println(currentI2Caddress >> 1, HEX); //Ublox module returns a shifted 8-bit address. Make it 7-bit unshifted. - while(1); - + while (1) + ; } void loop() @@ -83,4 +85,4 @@ void loop() Serial.println(); } -} +} \ No newline at end of file diff --git a/examples/ZED-F9P/Example7_SetVal/Example7_SetVal.ino b/examples/ZED-F9P/Example7_SetVal/Example7_SetVal.ino index 8f7e6df..a425ef9 100644 --- a/examples/ZED-F9P/Example7_SetVal/Example7_SetVal.ino +++ b/examples/ZED-F9P/Example7_SetVal/Example7_SetVal.ino @@ -1,12 +1,12 @@ /* - Send UBX binary commands to enable RTCM sentences on Ublox ZED-F9P module + Send UBX binary commands to enable RTCM sentences on u-blox ZED-F9P module By: Nathan Seidle SparkFun Electronics Date: January 9th, 2019 License: MIT. See license file for more information but you can basically do whatever you want with this code. - Ublox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the + u-blox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the UBX-CFG commands are deprecated; they still work, they just recommend using VALSET, VALGET, and VALDEL commands instead. This example shows how to use this new command structure. @@ -27,21 +27,23 @@ #include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_Ublox_GPS SFE_UBLOX_GPS myGPS; -long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to Ublox module. +long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to u-blox module. void setup() { Serial.begin(115200); - while (!Serial); //Wait for user to open terminal - Serial.println("Ublox getVal example"); + while (!Serial) + ; //Wait for user to open terminal + Serial.println("u-blox getVal example"); Wire.begin(); Wire.setClock(400000); //Increase I2C clock speed to 400kHz - if (myGPS.begin() == false) //Connect to the Ublox module using Wire port + if (myGPS.begin() == false) //Connect to the u-blox module using Wire port { - Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing.")); - while (1); + Serial.println(F("u-blox GPS not detected at default I2C address. Please check wiring. Freezing.")); + while (1) + ; } myGPS.enableDebugging(); //Enable debug messages over Serial (default) @@ -49,27 +51,26 @@ void setup() bool setValueSuccess; - //These key values are hard coded. You can obtain them from the ZED-F9P interface description doc + //These key values are hard coded and defined in u-blox_config_keys.h. + //You can obtain them from the ZED-F9P interface description doc //or from u-center's Messages->CFG->VALSET window. Keys must be 32-bit. - //setValueSuccess = myGPS.setVal(0x10930006, 0); //Enable high precision NMEA - setValueSuccess = myGPS.setVal(0x30210001, 100); //Set measurement rate to 100ms (10Hz update rate) - //setValueSuccess = myGPS.setVal(0x30210001, 1000); //Set measurement rate to 1000ms (1Hz update rate) + //setValueSuccess = myGPS.setVal(UBLOX_CFG_NMEA_HIGHPREC, 0); //Enable high precision NMEA + setValueSuccess = myGPS.setVal(UBLOX_CFG_RATE_MEAS, 100); //Set measurement rate to 100ms (10Hz update rate) + //setValueSuccess = myGPS.setVal(UBLOX_CFG_RATE_MEAS, 1000); //Set measurement rate to 1000ms (1Hz update rate) //Below is the original way we enabled the RTCM message on the I2C port. After that, we show how to do the same //but with setVal(). //Original: myGPS.enableRTCMmessage(UBX_RTCM_1005, COM_PORT_I2C, 1); //Enable message 1005 to output through I2C port, message every second //setValueSuccess = myGPS.setVal(0x209102bd, 1); //Set output rate of msg 1005 over the I2C port to once per second - if(setValueSuccess == true) + if (setValueSuccess == true) { Serial.println("Value was successfully set"); } else Serial.println("Value set failed"); - } void loop() { - } diff --git a/examples/ZED-F9P/Example8_GetSetPortSettings/Example8_GetSetPortSettings.ino b/examples/ZED-F9P/Example8_GetSetPortSettings/Example8_GetSetPortSettings.ino new file mode 100644 index 0000000..1ade20a --- /dev/null +++ b/examples/ZED-F9P/Example8_GetSetPortSettings/Example8_GetSetPortSettings.ino @@ -0,0 +1,98 @@ +/* + Configuring port settings using the newer getVal/setVal methods + By: Nathan Seidle + SparkFun Electronics + Date: October 23rd, 2020 + License: MIT. See license file for more information but you can + basically do whatever you want with this code. + + This example shows how to query a u-blox module for its UART1 settings and + then change them if the settings aren't what we want. + + Note: getVal/setVal/delVal are only support in u-blox protocol versions 27 and higher. + + Feel like supporting open source hardware? + Buy a board from SparkFun! + ZED-F9P RTK2: https://www.sparkfun.com/products/15136 + + Hardware Connections: + Plug a Qwiic cable into the GPS and a RedBoard + If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425) + Open the serial monitor at 115200 baud to see the output +*/ + +#include //Needed for I2C to GPS + +#include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_Ublox_GPS +SFE_UBLOX_GPS myGPS; + +void setup() +{ + Serial.begin(115200); + while (!Serial) + ; //Wait for user to open terminal + Serial.println("SparkFun u-blox Example"); + + Wire.begin(); + + if (myGPS.begin() == false) //Connect to the u-blox module using Wire port + { + Serial.println(F("u-blox GPS not detected at default I2C address. Please check wiring. Freezing.")); + while (1) + ; + } + + bool response = true; + + //Read the settings from RAM (what the module is running right now, not BBR, Flash, or default) + uint8_t currentUART1Setting_ubx = myGPS.getVal8(UBLOX_CFG_UART1INPROT_UBX); + uint8_t currentUART1Setting_nmea = myGPS.getVal8(UBLOX_CFG_UART1INPROT_NMEA); + uint8_t currentUART1Setting_rtcm3 = myGPS.getVal8(UBLOX_CFG_UART1INPROT_RTCM3X); + + Serial.print("currentUART1Setting_ubx: "); + Serial.println(currentUART1Setting_ubx); + Serial.print("currentUART1Setting_nmea: "); + Serial.println(currentUART1Setting_nmea); + Serial.print("currentUART1Setting_rtcm3: "); + Serial.println(currentUART1Setting_rtcm3); + + //Check if NMEA and RTCM are enabled for UART1 + if (currentUART1Setting_ubx == 0 || currentUART1Setting_nmea == 0) + { + Serial.println("Updating UART1 configuration"); + + //setVal sets the values for RAM, BBR, and Flash automatically so no .saveConfiguration() is needed + response &= myGPS.setVal8(UBLOX_CFG_UART1INPROT_UBX, 1); //Enable UBX on UART1 Input + response &= myGPS.setVal8(UBLOX_CFG_UART1INPROT_NMEA, 1); //Enable NMEA on UART1 Input + response &= myGPS.setVal8(UBLOX_CFG_UART1INPROT_RTCM3X, 0); //Disable RTCM on UART1 Input + + if (response == false) + Serial.println("SetVal failed"); + else + Serial.println("SetVal succeeded"); + } + else + Serial.println("No port change needed"); + + //Change speed of UART2 + uint32_t currentUART2Baud = myGPS.getVal32(UBLOX_CFG_UART2_BAUDRATE); + Serial.print("currentUART2Baud: "); + Serial.println(currentUART2Baud); + + if (currentUART2Baud != 57600) + { + response &= myGPS.setVal32(UBLOX_CFG_UART2_BAUDRATE, 57600); + if (response == false) + Serial.println("SetVal failed"); + else + Serial.println("SetVal succeeded"); + } + else + Serial.println("No baud change needed"); + + Serial.println("Done"); +} + +void loop() +{ +} \ No newline at end of file diff --git a/examples/ZED-F9P/Example10_multiSetVal/Example10_multiSetVal.ino b/examples/ZED-F9P/Example9_multiSetVal/Example9_multiSetVal.ino similarity index 54% rename from examples/ZED-F9P/Example10_multiSetVal/Example10_multiSetVal.ino rename to examples/ZED-F9P/Example9_multiSetVal/Example9_multiSetVal.ino index 2c12dc3..ed1b471 100644 --- a/examples/ZED-F9P/Example10_multiSetVal/Example10_multiSetVal.ino +++ b/examples/ZED-F9P/Example9_multiSetVal/Example9_multiSetVal.ino @@ -1,5 +1,5 @@ /* - Send UBX binary commands to enable RTCM sentences on Ublox ZED-F9P module + Send UBX binary commands to enable RTCM sentences on u-blox ZED-F9P module Based on Example7 By: Nathan Seidle SparkFun Electronics Updated by Paul Clark to demonstrate setVal8/16/32, newCfgValset8/16/32, addCfgValset8/16/32 and sendCfgValset8/16/32 @@ -7,7 +7,7 @@ License: MIT. See license file for more information but you can basically do whatever you want with this code. - Ublox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the + u-blox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the UBX-CFG commands are deprecated; they still work, they just recommend using VALSET, VALGET, and VALDEL commands instead. This example shows how to use this new command structure. @@ -31,16 +31,18 @@ SFE_UBLOX_GPS myGPS; void setup() { Serial.begin(115200); - while (!Serial); //Wait for user to open terminal - Serial.println("Ublox multi setVal example"); + while (!Serial) + ; //Wait for user to open terminal + Serial.println("u-blox multi setVal example"); Wire.begin(); Wire.setClock(400000); //Increase I2C clock speed to 400kHz - if (myGPS.begin() == false) //Connect to the Ublox module using Wire port + if (myGPS.begin() == false) //Connect to the u-blox module using Wire port { - Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing.")); - while (1); + Serial.println(F("u-blox GPS not detected at default I2C address. Please check wiring. Freezing.")); + while (1) + ; } myGPS.enableDebugging(); //Enable debug messages over Serial (default) @@ -55,25 +57,25 @@ void setup() //U2, I2, E2 and X2 values are 16-bit //U4, I4, R4, E4, X4 values are 32-bit - setValueSuccess &= myGPS.setVal8(0x10930006, 0); //Enable high precision NMEA (value is 8-bit (L / U1)) - //setValueSuccess &= myGPS.setVal16(0x30210001, 200); //Set measurement rate to 100ms (10Hz update rate) (value is 16-bit (U2)) - //setValueSuccess &= myGPS.setVal16(0x30210001, 200, 1); //Set rate setting in RAM instead of BBR - setValueSuccess &= myGPS.setVal16(0x30210001, 1000); //Set measurement rate to 1000ms (1Hz update rate) (value is 16-bit (U2)) + setValueSuccess &= myGPS.setVal8(UBLOX_CFG_NMEA_HIGHPREC, 0); //Enable high precision NMEA (value is 8-bit (L / U1)) + //setValueSuccess &= myGPS.setVal16(UBLOX_CFG_RATE_MEAS, 200); //Set measurement rate to 100ms (10Hz update rate) (value is 16-bit (U2)) + //setValueSuccess &= myGPS.setVal16(UBLOX_CFG_RATE_MEAS, 200, 1); //Set rate setting in RAM instead of BBR + setValueSuccess &= myGPS.setVal16(UBLOX_CFG_RATE_MEAS, 1000); //Set measurement rate to 1000ms (1Hz update rate) (value is 16-bit (U2)) //Below is the original way we enabled a single RTCM message on the I2C port. After that, we show how to do the same //but with multiple messages all in one go using newCfgValset, addCfgValset and sendCfgValset. //Original: myGPS.enableRTCMmessage(UBX_RTCM_1005, COM_PORT_I2C, 1); //Enable message 1005 to output through I2C port, message every second //Begin with newCfgValset8/16/32 - setValueSuccess &= myGPS.newCfgValset8(0x209102bd, 1); //Set output rate of msg 1005 over the I2C port to once per measurement (value is 8-bit (U1)) - //setValueSuccess &= myGPS.newCfgValset8(0x209102bd, 1, 7); //Set this and the following settings into Flash/RAM/BBR instead of BBR + setValueSuccess &= myGPS.newCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1005_I2C, 1); //Set output rate of msg 1005 over the I2C port to once per measurement (value is 8-bit (U1)) + //setValueSuccess &= myGPS.newCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1005_I2C, 1, 7); //Set this and the following settings into Flash/RAM/BBR instead of BBR //Add extra keyIDs and values using addCfgValset8/16/32 - setValueSuccess &= myGPS.addCfgValset8(0x209102cc, 1); //Set output rate of msg 1077 over the I2C port to once per measurement (value is 8-bit (U1)) - setValueSuccess &= myGPS.addCfgValset8(0x209102d1, 1); //Set output rate of msg 1087 over the I2C port to once per measurement (value is 8-bit (U1)) - setValueSuccess &= myGPS.addCfgValset8(0x209102d6, 1); //Set output rate of msg 1127 over the I2C port to once per measurement (value is 8-bit (U1)) - setValueSuccess &= myGPS.addCfgValset8(0x20910318, 1); //Set output rate of msg 1097 over the I2C port to once per measurement (value is 8-bit (U1)) + setValueSuccess &= myGPS.addCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1077_I2C, 1); //Set output rate of msg 1077 over the I2C port to once per measurement (value is 8-bit (U1)) + setValueSuccess &= myGPS.addCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1087_I2C, 1); //Set output rate of msg 1087 over the I2C port to once per measurement (value is 8-bit (U1)) + setValueSuccess &= myGPS.addCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1127_I2C, 1); //Set output rate of msg 1127 over the I2C port to once per measurement (value is 8-bit (U1)) + setValueSuccess &= myGPS.addCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1097_I2C, 1); //Set output rate of msg 1097 over the I2C port to once per measurement (value is 8-bit (U1)) // Add the final value and send the packet using sendCfgValset8/16/32 - setValueSuccess &= myGPS.sendCfgValset8(0x20910303, 10); //Set output rate of msg 1230 over the I2C port to once every 10 measurements (value is 8-bit (U1)) + setValueSuccess &= myGPS.sendCfgValset8(CFG_MSGOUT_RTCM_3X_TYPE1230_I2C, 10); //Set output rate of msg 1230 over the I2C port to once every 10 measurements (value is 8-bit (U1)) if (setValueSuccess == true) { @@ -85,5 +87,4 @@ void setup() void loop() { - } diff --git a/keywords.txt b/keywords.txt index d5ec567..bed736c 100644 --- a/keywords.txt +++ b/keywords.txt @@ -64,7 +64,10 @@ setUART2Output KEYWORD2 setUSBOutput KEYWORD2 setSPIOutput KEYWORD2 +getVal KEYWORD2 getVal8 KEYWORD2 +getVal16 KEYWORD2 +getVal32 KEYWORD2 setVal KEYWORD2 setVal8 KEYWORD2 setVal16 KEYWORD2 @@ -159,6 +162,7 @@ getVehAtt KEYWORD2 setI2CTransactionSize KEYWORD2 getI2CTransactionSize KEYWORD2 +setStaticPosition KEYWORD2 ####################################### # Constants (LITERAL1) diff --git a/library.properties b/library.properties index 73ea7ae..b4516f2 100644 --- a/library.properties +++ b/library.properties @@ -1,9 +1,9 @@ -name=SparkFun Ublox Arduino Library -version=1.8.6 +name=SparkFun u-blox Arduino Library +version=1.8.7 author=SparkFun Electronics maintainer=SparkFun Electronics -sentence=Library for I2C and Serial Communication with Ublox modules -paragraph=An Arduino Library to enable both I2C and Serial communication for both NMEA reception and binary UBX sending to the module. Useful for interfacing to the SparkFun GPS-RTK2 ZED-F9P, SparkFun GPS-RTK NEO-M8P-2, the SparkFun SAM-M8Q, and the SparkFun ZEO-M8Q. Library also works with other Ublox based boards.

The ZED-F9P and NEO-M8P-2 modules are top-of-the-line modules for high accuracy GNSS and GPS location solutions including RTK. The ZED-F9P is unique in that it is capable of both rover and base station operations allowing the module to become a base station and produce RTCM 3.x correction data. +sentence=Library for I2C and Serial Communication with u-blox modules +paragraph=An Arduino Library to enable both I2C and Serial communication for both NMEA reception and binary UBX sending to u-blox modules. Useful for interfacing to the SparkFun GPS-RTK2 ZED-F9P, SparkFun GPS-RTK NEO-M8P-2, the SparkFun SAM-M8Q, and the SparkFun ZEO-M8Q. Library also works with other u-lox based boards.

The ZED-F9P and NEO-M8P-2 modules are top-of-the-line modules for high accuracy GNSS and GPS location solutions including RTK. The ZED-F9P is unique in that it is capable of both rover and base station operations allowing the module to become a base station and produce RTCM 3.x correction data. category=Sensors url=https://github.com/sparkfun/SparkFun_Ublox_Arduino_Library architectures=* diff --git a/src/SparkFun_Ublox_Arduino_Library.cpp b/src/SparkFun_Ublox_Arduino_Library.cpp index bba8a3e..82d3e16 100644 --- a/src/SparkFun_Ublox_Arduino_Library.cpp +++ b/src/SparkFun_Ublox_Arduino_Library.cpp @@ -1,7 +1,8 @@ /* - This is a library written for the Ublox ZED-F9P and NEO-M8P-2 + This is a library written for the u-blox ZED-F9P and NEO-M8P-2 SparkFun sells these at its website: www.sparkfun.com Do you like this library? Help support SparkFun. Buy a board! + https://www.sparkfun.com/products/16481 https://www.sparkfun.com/products/15136 https://www.sparkfun.com/products/15005 https://www.sparkfun.com/products/15733 @@ -11,7 +12,7 @@ Written by Nathan Seidle @ SparkFun Electronics, September 6th, 2018 This library handles configuring and handling the responses - from a Ublox GPS module. Works with most modules from Ublox including + from a u-blox GPS module. Works with most modules from u-blox including the Zed-F9P, NEO-M8P-2, NEO-M9N, ZOE-M8Q, SAM-M8Q, and many others. https://github.com/sparkfun/SparkFun_Ublox_Arduino_Library @@ -239,7 +240,7 @@ void SFE_UBLOX_GPS::hardReset() sendCommand(&packetCfg, 0); // don't expect ACK } -//Changes the serial baud rate of the Ublox module, can't return success/fail 'cause ACK from modem +//Changes the serial baud rate of the u-blox module, can't return success/fail 'cause ACK from modem //is lost due to baud rate change void SFE_UBLOX_GPS::setSerialRate(uint32_t baudrate, uint8_t uartPort, uint16_t maxWait) { @@ -277,7 +278,7 @@ void SFE_UBLOX_GPS::setSerialRate(uint32_t baudrate, uint8_t uartPort, uint16_t } } -//Changes the I2C address that the Ublox module responds to +//Changes the I2C address that the u-blox module responds to //0x42 is the default but can be changed with this command boolean SFE_UBLOX_GPS::setI2CAddress(uint8_t deviceAddress, uint16_t maxWait) { @@ -343,10 +344,10 @@ boolean SFE_UBLOX_GPS::checkUbloxI2C(ubxPacket *incomingUBX, uint8_t requestedCl uint8_t lsb = _i2cPort->read(); if (lsb == 0xFF) { - //I believe this is a Ublox bug. Device should never present an 0xFF. + //I believe this is a u-blox bug. Device should never present an 0xFF. if ((_printDebug == true) || (_printLimitedDebug == true)) // Print this if doing limited debugging { - _debugSerial->println(F("checkUbloxI2C: Ublox bug, length lsb is 0xFF")); + _debugSerial->println(F("checkUbloxI2C: u-blox bug, length lsb is 0xFF")); } if (checksumFailurePin >= 0) { @@ -439,7 +440,7 @@ boolean SFE_UBLOX_GPS::checkUbloxI2C(ubxPacket *incomingUBX, uint8_t requestedCl { if ((_printDebug == true) || (_printLimitedDebug == true)) // Print this if doing limited debugging { - _debugSerial->println(F("checkUbloxU2C: Ublox error, module not ready with data")); + _debugSerial->println(F("checkUbloxU2C: u-blox error, module not ready with data")); } delay(5); //In logic analyzation, the module starting responding after 1.48ms if (checksumFailurePin >= 0) @@ -1639,32 +1640,11 @@ boolean SFE_UBLOX_GPS::factoryDefault(uint16_t maxWait) return (sendCommand(&packetCfg, maxWait) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK } -//Given a group, ID and size, return the value of this config spot -//The 32-bit key is put together from group/ID/size. See other getVal to send key directly. -//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P -uint8_t SFE_UBLOX_GPS::getVal8(uint16_t group, uint16_t id, uint8_t size, uint8_t layer, uint16_t maxWait) -{ - //Create key - uint32_t key = 0; - key |= (uint32_t)id; - key |= (uint32_t)group << 16; - key |= (uint32_t)size << 28; - - if (_printDebug == true) - { - _debugSerial->print(F("key: 0x")); - _debugSerial->print(key, HEX); - _debugSerial->println(); - } - - return getVal8(key, layer, maxWait); -} - -//Given a key, return its value +//Given a key, load the payload with data that can then be extracted to 8, 16, or 32 bits //This function takes a full 32-bit key -//Default layer is BBR -//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P -uint8_t SFE_UBLOX_GPS::getVal8(uint32_t key, uint8_t layer, uint16_t maxWait) +//Default layer is RAM +//Configuration of modern u-blox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P +sfe_ublox_status_e SFE_UBLOX_GPS::getVal(uint32_t key, uint8_t layer, uint16_t maxWait) { packetCfg.cls = UBX_CLASS_CFG; packetCfg.id = UBX_CFG_VALGET; @@ -1707,24 +1687,76 @@ uint8_t SFE_UBLOX_GPS::getVal8(uint32_t key, uint8_t layer, uint16_t maxWait) sfe_ublox_status_e retVal = sendCommand(&packetCfg, maxWait); if (_printDebug == true) { - _debugSerial->print(F("getVal8: sendCommand returned: ")); + _debugSerial->print(F("getVal: sendCommand returned: ")); _debugSerial->println(statusString(retVal)); } - if (retVal != SFE_UBLOX_STATUS_DATA_RECEIVED) // We are expecting data and an ACK - return (0); //If command send fails then bail //Verify the response is the correct length as compared to what the user called (did the module respond with 8-bits but the user called getVal32?) //Response is 8 bytes plus cfg data //if(packet->len > 8+1) - //Pull the requested value from the response - //Response starts at 4+1*N with the 32-bit key so the actual data we're looking for is at 8+1*N + //The response is now sitting in payload, ready for extraction + return (retVal); +} + +//Given a key, return its value +//This function takes a full 32-bit key +//Default layer is RAM +//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P +uint8_t SFE_UBLOX_GPS::getVal8(uint32_t key, uint8_t layer, uint16_t maxWait) +{ + if (getVal(key, layer, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) + return (0); + return (extractByte(8)); } +uint16_t SFE_UBLOX_GPS::getVal16(uint32_t key, uint8_t layer, uint16_t maxWait) +{ + if (getVal(key, layer, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) + return (0); + + return (extractInt(8)); +} +uint32_t SFE_UBLOX_GPS::getVal32(uint32_t key, uint8_t layer, uint16_t maxWait) +{ + if (getVal(key, layer, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) + return (0); + + return (extractLong(8)); +} + +//Form 32-bit key from group/id/size +uint32_t SFE_UBLOX_GPS::createKey(uint16_t group, uint16_t id, uint8_t size) +{ + uint32_t key = 0; + key |= (uint32_t)id; + key |= (uint32_t)group << 16; + key |= (uint32_t)size << 28; + return (key); +} + +//Given a group, ID and size, return the value of this config spot +//The 32-bit key is put together from group/ID/size. See other getVal to send key directly. +//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P +uint8_t SFE_UBLOX_GPS::getVal8(uint16_t group, uint16_t id, uint8_t size, uint8_t layer, uint16_t maxWait) +{ + uint32_t key = createKey(group, id, size); + return getVal8(key, layer, maxWait); +} +uint16_t SFE_UBLOX_GPS::getVal16(uint16_t group, uint16_t id, uint8_t size, uint8_t layer, uint16_t maxWait) +{ + uint32_t key = createKey(group, id, size); + return getVal16(key, layer, maxWait); +} +uint32_t SFE_UBLOX_GPS::getVal32(uint16_t group, uint16_t id, uint8_t size, uint8_t layer, uint16_t maxWait) +{ + uint32_t key = createKey(group, id, size); + return getVal32(key, layer, maxWait); +} //Given a key, set a 16-bit value //This function takes a full 32-bit key -//Default layer is BBR +//Default layer is all: RAM+BBR+Flash //Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::setVal(uint32_t key, uint16_t value, uint8_t layer, uint16_t maxWait) { @@ -1733,7 +1765,7 @@ uint8_t SFE_UBLOX_GPS::setVal(uint32_t key, uint16_t value, uint8_t layer, uint1 //Given a key, set a 16-bit value //This function takes a full 32-bit key -//Default layer is BBR +//Default layer is all: RAM+BBR+Flash //Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::setVal16(uint32_t key, uint16_t value, uint8_t layer, uint16_t maxWait) { @@ -1765,7 +1797,7 @@ uint8_t SFE_UBLOX_GPS::setVal16(uint32_t key, uint16_t value, uint8_t layer, uin //Given a key, set an 8-bit value //This function takes a full 32-bit key -//Default layer is BBR +//Default layer is all: RAM+BBR+Flash //Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::setVal8(uint32_t key, uint8_t value, uint8_t layer, uint16_t maxWait) { @@ -1796,7 +1828,7 @@ uint8_t SFE_UBLOX_GPS::setVal8(uint32_t key, uint8_t value, uint8_t layer, uint1 //Given a key, set a 32-bit value //This function takes a full 32-bit key -//Default layer is BBR +//Default layer is all: RAM+BBR+Flash //Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::setVal32(uint32_t key, uint32_t value, uint8_t layer, uint16_t maxWait) { @@ -1831,7 +1863,7 @@ uint8_t SFE_UBLOX_GPS::setVal32(uint32_t key, uint32_t value, uint8_t layer, uin //Start defining a new UBX-CFG-VALSET ubxPacket //This function takes a full 32-bit key and 32-bit value //Default layer is BBR -//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P +//Configuration of modern u-blox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::newCfgValset32(uint32_t key, uint32_t value, uint8_t layer) { packetCfg.cls = UBX_CLASS_CFG; @@ -1865,7 +1897,7 @@ uint8_t SFE_UBLOX_GPS::newCfgValset32(uint32_t key, uint32_t value, uint8_t laye //Start defining a new UBX-CFG-VALSET ubxPacket //This function takes a full 32-bit key and 16-bit value //Default layer is BBR -//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P +//Configuration of modern u-blox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::newCfgValset16(uint32_t key, uint16_t value, uint8_t layer) { packetCfg.cls = UBX_CLASS_CFG; @@ -1897,7 +1929,7 @@ uint8_t SFE_UBLOX_GPS::newCfgValset16(uint32_t key, uint16_t value, uint8_t laye //Start defining a new UBX-CFG-VALSET ubxPacket //This function takes a full 32-bit key and 8-bit value //Default layer is BBR -//Configuration of modern Ublox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P +//Configuration of modern u-blox modules is now done via getVal/setVal/delVal, ie protocol v27 and above found on ZED-F9P uint8_t SFE_UBLOX_GPS::newCfgValset8(uint32_t key, uint8_t value, uint8_t layer) { packetCfg.cls = UBX_CLASS_CFG; @@ -3189,7 +3221,7 @@ uint16_t SFE_UBLOX_GPS::getPDOP(uint16_t maxWait) return (pDOP); } -//Get the current protocol version of the Ublox module we're communicating with +//Get the current protocol version of the u-blox module we're communicating with //This is helpful when deciding if we should call the high-precision Lat/Long (HPPOSLLH) or the regular (POSLLH) uint8_t SFE_UBLOX_GPS::getProtocolVersionHigh(uint16_t maxWait) { @@ -3198,7 +3230,7 @@ uint8_t SFE_UBLOX_GPS::getProtocolVersionHigh(uint16_t maxWait) return (versionHigh); } -//Get the current protocol version of the Ublox module we're communicating with +//Get the current protocol version of the u-blox module we're communicating with //This is helpful when deciding if we should call the high-precision Lat/Long (HPPOSLLH) or the regular (POSLLH) uint8_t SFE_UBLOX_GPS::getProtocolVersionLow(uint16_t maxWait) { @@ -3207,7 +3239,7 @@ uint8_t SFE_UBLOX_GPS::getProtocolVersionLow(uint16_t maxWait) return (versionLow); } -//Get the current protocol version of the Ublox module we're communicating with +//Get the current protocol version of the u-blox module we're communicating with //This is helpful when deciding if we should call the high-precision Lat/Long (HPPOSLLH) or the regular (POSLLH) boolean SFE_UBLOX_GPS::getProtocolVersion(uint16_t maxWait) { @@ -3533,3 +3565,62 @@ boolean SFE_UBLOX_GPS::getVehAtt(uint16_t maxWait) return (true); } + +//Set the ECEF or Lat/Long coordinates of a receiver +//This imediately puts the receiver in TIME mode (fixed) and will begin outputting RTCM sentences if enabled +//This is helpful once an antenna's position has been established. See this tutorial: https://learn.sparkfun.com/tutorials/how-to-build-a-diy-gnss-reference-station#gather-raw-gnss-data +// For ECEF the units are: cm, 0.1mm, cm, 0.1mm, cm, 0.1mm +// For Lat/Lon/Alt the units are: degrees^-7, degrees^-9, degrees^-7, degrees^-9, cm, 0.1mm +bool SFE_UBLOX_GPS::setStaticPosition(int32_t ecefXOrLat, int8_t ecefXOrLatHP, int32_t ecefYOrLon, int8_t ecefYOrLonHP, int32_t ecefZOrAlt, int8_t ecefZOrAltHP, bool latLong, uint16_t maxWait) +{ + packetCfg.cls = UBX_CLASS_CFG; + packetCfg.id = UBX_CFG_TMODE3; + packetCfg.len = 0; + packetCfg.startingSpot = 0; + + //Ask module for the current TimeMode3 settings. Loads into payloadCfg. + if (sendCommand(&packetCfg, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) + return (false); + + packetCfg.len = 40; + + //Clear packet payload + for (uint8_t x = 0; x < packetCfg.len; x++) + payloadCfg[x] = 0; + + //customCfg should be loaded with poll response. Now modify only the bits we care about + payloadCfg[2] = 2; //Set mode to fixed. Use ECEF (not LAT/LON/ALT). + + if (latLong == true) + payloadCfg[3] = (uint8_t)(1 << 0); //Set mode to fixed. Use LAT/LON/ALT. + + //Set ECEF X or Lat + payloadCfg[4] = (ecefXOrLat >> 8 * 0) & 0xFF; //LSB + payloadCfg[5] = (ecefXOrLat >> 8 * 1) & 0xFF; + payloadCfg[6] = (ecefXOrLat >> 8 * 2) & 0xFF; + payloadCfg[7] = (ecefXOrLat >> 8 * 3) & 0xFF; //MSB + + //Set ECEF Y or Long + payloadCfg[8] = (ecefYOrLon >> 8 * 0) & 0xFF; //LSB + payloadCfg[9] = (ecefYOrLon >> 8 * 1) & 0xFF; + payloadCfg[10] = (ecefYOrLon >> 8 * 2) & 0xFF; + payloadCfg[11] = (ecefYOrLon >> 8 * 3) & 0xFF; //MSB + + //Set ECEF Z or Altitude + payloadCfg[12] = (ecefZOrAlt >> 8 * 0) & 0xFF; //LSB + payloadCfg[13] = (ecefZOrAlt >> 8 * 1) & 0xFF; + payloadCfg[14] = (ecefZOrAlt >> 8 * 2) & 0xFF; + payloadCfg[15] = (ecefZOrAlt >> 8 * 3) & 0xFF; //MSB + + //Set high precision parts + payloadCfg[16] = ecefXOrLatHP; + payloadCfg[17] = ecefYOrLonHP; + payloadCfg[18] = ecefZOrAltHP; + + return ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK +} + +bool SFE_UBLOX_GPS::setStaticPosition(int32_t ecefXOrLat, int32_t ecefYOrLon, int32_t ecefZOrAlt, bool latlong, uint16_t maxWait) +{ + return (setStaticPosition(ecefXOrLat, 0, ecefYOrLon, 0, ecefZOrAlt, 0, latlong, maxWait)); +} \ No newline at end of file diff --git a/src/SparkFun_Ublox_Arduino_Library.h b/src/SparkFun_Ublox_Arduino_Library.h index 2ba24be..27207e1 100644 --- a/src/SparkFun_Ublox_Arduino_Library.h +++ b/src/SparkFun_Ublox_Arduino_Library.h @@ -1,7 +1,8 @@ /* - This is a library written for the Ublox ZED-F9P and NEO-M8P-2 + This is a library written for the u-blox ZED-F9P and NEO-M8P-2 SparkFun sells these at its website: www.sparkfun.com Do you like this library? Help support SparkFun. Buy a board! + https://www.sparkfun.com/products/16481 https://www.sparkfun.com/products/15136 https://www.sparkfun.com/products/15005 https://www.sparkfun.com/products/15733 @@ -11,7 +12,7 @@ Written by Nathan Seidle @ SparkFun Electronics, September 6th, 2018 This library handles configuring and handling the responses - from a Ublox GPS module. Works with most modules from Ublox including + from a u-blox GPS module. Works with most modules from u-blox including the Zed-F9P, NEO-M8P-2, NEO-M9N, ZOE-M8Q, SAM-M8Q, and many others. https://github.com/sparkfun/SparkFun_Ublox_Arduino_Library @@ -49,19 +50,22 @@ #include +#include "u-blox_config_keys.h" + // Define Serial for SparkFun SAMD based boards. // Boards like the RedBoard Turbo use SerialUSB (not Serial). // But other boards like the SAMD51 Thing Plus use Serial (not SerialUSB). // The next nine lines let the code compile cleanly on as many SAMD boards as possible. -#if defined(ARDUINO_ARCH_SAMD) // Is this a SAMD board? -#if defined(USB_VID) // Is the USB Vendor ID defined? -#if (USB_VID == 0x1B4F) // Is this a SparkFun board? -#if !defined(ARDUINO_SAMD51_THING_PLUS) // If it is not a SAMD51 Thing Plus -#define Serial SerialUSB // Define Serial as SerialUSB +#if defined(ARDUINO_ARCH_SAMD) // Is this a SAMD board? +#if defined(USB_VID) // Is the USB Vendor ID defined? +#if (USB_VID == 0x1B4F) // Is this a SparkFun board? +#if !defined(ARDUINO_SAMD51_THING_PLUS) & !defined(ARDUINO_SAMD51_MICROMOD) // If it is not a SAMD51 Thing Plus or SAMD51 MicroMod +#define Serial SerialUSB // Define Serial as SerialUSB #endif #endif #endif #endif + //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //Define a digital pin to aid checksum failure capture and analysis @@ -154,9 +158,9 @@ const uint8_t UBX_CFG_SBAS = 0x16; //SBAS configuration const uint8_t UBX_CFG_TMODE3 = 0x71; //Time Mode Settings 3. Used to enable Survey In Mode const uint8_t UBX_CFG_TP5 = 0x31; //Time Pulse Parameters const uint8_t UBX_CFG_USB = 0x1B; //USB Configuration -const uint8_t UBX_CFG_VALDEL = 0x8C; //Used for config of higher version Ublox modules (ie protocol v27 and above). Deletes values corresponding to provided keys/ provided keys with a transaction -const uint8_t UBX_CFG_VALGET = 0x8B; //Used for config of higher version Ublox modules (ie protocol v27 and above). Configuration Items -const uint8_t UBX_CFG_VALSET = 0x8A; //Used for config of higher version Ublox modules (ie protocol v27 and above). Sets values corresponding to provided key-value pairs/ provided key-value pairs within a transaction. +const uint8_t UBX_CFG_VALDEL = 0x8C; //Used for config of higher version u-blox modules (ie protocol v27 and above). Deletes values corresponding to provided keys/ provided keys with a transaction +const uint8_t UBX_CFG_VALGET = 0x8B; //Used for config of higher version u-blox modules (ie protocol v27 and above). Configuration Items +const uint8_t UBX_CFG_VALSET = 0x8A; //Used for config of higher version u-blox modules (ie protocol v27 and above). Sets values corresponding to provided key-value pairs/ provided key-value pairs within a transaction. //The following are used to enable NMEA messages. Descriptions come from the NMEA messages overview in the ZED-F9P Interface Description const uint8_t UBX_NMEA_MSB = 0xF0; //All NMEA enable commands have 0xF0 as MSB @@ -342,32 +346,6 @@ const uint8_t COM_TYPE_UBX = (1 << 0); const uint8_t COM_TYPE_NMEA = (1 << 1); const uint8_t COM_TYPE_RTCM3 = (1 << 5); -//The following consts are used to generate KEY values for the advanced protocol functions of VELGET/SET/DEL -const uint8_t VAL_SIZE_1 = 0x01; //One bit -const uint8_t VAL_SIZE_8 = 0x02; //One byte -const uint8_t VAL_SIZE_16 = 0x03; //Two bytes -const uint8_t VAL_SIZE_32 = 0x04; //Four bytes -const uint8_t VAL_SIZE_64 = 0x05; //Eight bytes - -//These are the Bitfield layers definitions for the UBX-CFG-VALSET message (not to be confused with Bitfield deviceMask in UBX-CFG-CFG) -const uint8_t VAL_LAYER_RAM = (1 << 0); -const uint8_t VAL_LAYER_BBR = (1 << 1); -const uint8_t VAL_LAYER_FLASH = (1 << 2); - -//Below are various Groups, IDs, and sizes for various settings -//These can be used to call getVal/setVal/delVal -const uint8_t VAL_GROUP_I2COUTPROT = 0x72; -const uint8_t VAL_GROUP_I2COUTPROT_SIZE = VAL_SIZE_1; //All fields in I2C group are currently 1 bit - -const uint8_t VAL_ID_I2COUTPROT_UBX = 0x01; -const uint8_t VAL_ID_I2COUTPROT_NMEA = 0x02; -const uint8_t VAL_ID_I2COUTPROT_RTCM3 = 0x03; - -const uint8_t VAL_GROUP_I2C = 0x51; -const uint8_t VAL_GROUP_I2C_SIZE = VAL_SIZE_8; //All fields in I2C group are currently 1 byte - -const uint8_t VAL_ID_I2C_ADDRESS = 0x01; - // Configuration Sub-Section mask definitions for saveConfigSelective (UBX-CFG-CFG) const uint32_t VAL_CFG_SUBSEC_IOPORT = 0x00000001; // ioPort - communications port settings (causes IO system reset!) const uint32_t VAL_CFG_SUBSEC_MSGCONF = 0x00000002; // msgConf - message configuration @@ -461,7 +439,7 @@ class SFE_UBLOX_GPS //Control the size of the internal I2C transaction amount void setI2CTransactionSize(uint8_t bufferSize); uint8_t getI2CTransactionSize(void); - + //Set the max number of bytes set in a given I2C transaction uint8_t i2cTransactionSize = 32; //Default to ATmega328 limit @@ -494,8 +472,8 @@ class SFE_UBLOX_GPS void factoryReset(); //Send factory reset sequence (i.e. load "default" configuration and perform hardReset) void hardReset(); //Perform a reset leading to a cold start (zero info start-up) - boolean setI2CAddress(uint8_t deviceAddress, uint16_t maxTime = 250); //Changes the I2C address of the Ublox module - void setSerialRate(uint32_t baudrate, uint8_t uartPort = COM_PORT_UART1, uint16_t maxTime = defaultMaxWait); //Changes the serial baud rate of the Ublox module, uartPort should be COM_PORT_UART1/2 + boolean setI2CAddress(uint8_t deviceAddress, uint16_t maxTime = 250); //Changes the I2C address of the u-blox module + void setSerialRate(uint32_t baudrate, uint8_t uartPort = COM_PORT_UART1, uint16_t maxTime = defaultMaxWait); //Changes the serial baud rate of the u-blox module, uartPort should be COM_PORT_UART1/2 void setNMEAOutputPort(Stream &nmeaOutputPort); //Sets the internal variable for the port to direct NMEA characters to boolean setNavigationFrequency(uint8_t navFreq, uint16_t maxWait = defaultMaxWait); //Set the number of nav solutions sent per second @@ -579,21 +557,28 @@ class SFE_UBLOX_GPS //General configuration (used only on protocol v27 and higher - ie, ZED-F9P) //It is probably safe to assume that users of the ZED-F9P will be using I2C / Qwiic. //If they are using Serial then the higher baud rate will also help. So let's leave maxWait set to 250ms. - uint8_t getVal8(uint16_t group, uint16_t id, uint8_t size, uint8_t layer = VAL_LAYER_BBR, uint16_t maxWait = 250); //Returns the value at a given group/id/size location - uint8_t getVal8(uint32_t keyID, uint8_t layer = VAL_LAYER_BBR, uint16_t maxWait = 250); //Returns the value at a given group/id/size location - uint8_t setVal(uint32_t keyID, uint16_t value, uint8_t layer = VAL_LAYER_BBR, uint16_t maxWait = 250); //Sets the 16-bit value at a given group/id/size location - uint8_t setVal8(uint32_t keyID, uint8_t value, uint8_t layer = VAL_LAYER_BBR, uint16_t maxWait = 250); //Sets the 8-bit value at a given group/id/size location - uint8_t setVal16(uint32_t keyID, uint16_t value, uint8_t layer = VAL_LAYER_BBR, uint16_t maxWait = 250); //Sets the 16-bit value at a given group/id/size location - uint8_t setVal32(uint32_t keyID, uint32_t value, uint8_t layer = VAL_LAYER_BBR, uint16_t maxWait = 250); //Sets the 32-bit value at a given group/id/size location - uint8_t newCfgValset8(uint32_t keyID, uint8_t value, uint8_t layer = VAL_LAYER_BBR); //Define a new UBX-CFG-VALSET with the given KeyID and 8-bit value - uint8_t newCfgValset16(uint32_t keyID, uint16_t value, uint8_t layer = VAL_LAYER_BBR); //Define a new UBX-CFG-VALSET with the given KeyID and 16-bit value - uint8_t newCfgValset32(uint32_t keyID, uint32_t value, uint8_t layer = VAL_LAYER_BBR); //Define a new UBX-CFG-VALSET with the given KeyID and 32-bit value - uint8_t addCfgValset8(uint32_t keyID, uint8_t value); //Add a new KeyID and 8-bit value to an existing UBX-CFG-VALSET ubxPacket - uint8_t addCfgValset16(uint32_t keyID, uint16_t value); //Add a new KeyID and 16-bit value to an existing UBX-CFG-VALSET ubxPacket - uint8_t addCfgValset32(uint32_t keyID, uint32_t value); //Add a new KeyID and 32-bit value to an existing UBX-CFG-VALSET ubxPacket - uint8_t sendCfgValset8(uint32_t keyID, uint8_t value, uint16_t maxWait = 250); //Add the final KeyID and 8-bit value to an existing UBX-CFG-VALSET ubxPacket and send it - uint8_t sendCfgValset16(uint32_t keyID, uint16_t value, uint16_t maxWait = 250); //Add the final KeyID and 16-bit value to an existing UBX-CFG-VALSET ubxPacket and send it - uint8_t sendCfgValset32(uint32_t keyID, uint32_t value, uint16_t maxWait = 250); //Add the final KeyID and 32-bit value to an existing UBX-CFG-VALSET ubxPacket and send it + uint32_t createKey(uint16_t group, uint16_t id, uint8_t size); //Form 32-bit key from group/id/size + + sfe_ublox_status_e getVal(uint32_t keyID, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Load payload with response + uint8_t getVal8(uint32_t keyID, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Returns the value at a given key location + uint16_t getVal16(uint32_t keyID, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Returns the value at a given key location + uint32_t getVal32(uint32_t keyID, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Returns the value at a given key location + uint8_t getVal8(uint16_t group, uint16_t id, uint8_t size, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Returns the value at a given group/id/size location + uint16_t getVal16(uint16_t group, uint16_t id, uint8_t size, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Returns the value at a given group/id/size location + uint32_t getVal32(uint16_t group, uint16_t id, uint8_t size, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = 250); //Returns the value at a given group/id/size location + uint8_t setVal(uint32_t keyID, uint16_t value, uint8_t layer = VAL_LAYER_ALL, uint16_t maxWait = 250); //Sets the 16-bit value at a given group/id/size location + uint8_t setVal8(uint32_t keyID, uint8_t value, uint8_t layer = VAL_LAYER_ALL, uint16_t maxWait = 250); //Sets the 8-bit value at a given group/id/size location + uint8_t setVal16(uint32_t keyID, uint16_t value, uint8_t layer = VAL_LAYER_ALL, uint16_t maxWait = 250); //Sets the 16-bit value at a given group/id/size location + uint8_t setVal32(uint32_t keyID, uint32_t value, uint8_t layer = VAL_LAYER_ALL, uint16_t maxWait = 250); //Sets the 32-bit value at a given group/id/size location + uint8_t newCfgValset8(uint32_t keyID, uint8_t value, uint8_t layer = VAL_LAYER_BBR); //Define a new UBX-CFG-VALSET with the given KeyID and 8-bit value + uint8_t newCfgValset16(uint32_t keyID, uint16_t value, uint8_t layer = VAL_LAYER_BBR); //Define a new UBX-CFG-VALSET with the given KeyID and 16-bit value + uint8_t newCfgValset32(uint32_t keyID, uint32_t value, uint8_t layer = VAL_LAYER_BBR); //Define a new UBX-CFG-VALSET with the given KeyID and 32-bit value + uint8_t addCfgValset8(uint32_t keyID, uint8_t value); //Add a new KeyID and 8-bit value to an existing UBX-CFG-VALSET ubxPacket + uint8_t addCfgValset16(uint32_t keyID, uint16_t value); //Add a new KeyID and 16-bit value to an existing UBX-CFG-VALSET ubxPacket + uint8_t addCfgValset32(uint32_t keyID, uint32_t value); //Add a new KeyID and 32-bit value to an existing UBX-CFG-VALSET ubxPacket + uint8_t sendCfgValset8(uint32_t keyID, uint8_t value, uint16_t maxWait = 250); //Add the final KeyID and 8-bit value to an existing UBX-CFG-VALSET ubxPacket and send it + uint8_t sendCfgValset16(uint32_t keyID, uint16_t value, uint16_t maxWait = 250); //Add the final KeyID and 16-bit value to an existing UBX-CFG-VALSET ubxPacket and send it + uint8_t sendCfgValset32(uint32_t keyID, uint32_t value, uint16_t maxWait = 250); //Add the final KeyID and 32-bit value to an existing UBX-CFG-VALSET ubxPacket and send it //Functions used for RTK and base station setup //It is probably safe to assume that users of the RTK will be using I2C / Qwiic. So let's leave maxWait set to 250ms. @@ -641,6 +626,12 @@ class SFE_UBLOX_GPS sfe_ublox_status_e getSensState(uint8_t sensor, uint16_t maxWait = 1100); boolean getVehAtt(uint16_t maxWait = 1100); + // Given coordinates, put receiver into static position. Set latlong to true to pass in lat/long values instead of ecef. + // For ECEF the units are: cm, 0.1mm, cm, 0.1mm, cm, 0.1mm + // For Lat/Lon/Alt the units are: degrees^-7, degrees^-9, degrees^-7, degrees^-9, cm, 0.1mm + bool setStaticPosition(int32_t ecefXOrLat, int8_t ecefXOrLatHP, int32_t ecefYOrLon, int8_t ecefYOrLonHP, int32_t ecefZOrAlt, int8_t ecefZOrAltHP, bool latLong = false, uint16_t maxWait = 250); + bool setStaticPosition(int32_t ecefXOrLat, int32_t ecefYOrLon, int32_t ecefZOrAlt, bool latLong = false, uint16_t maxWait = 250); + //Survey-in specific controls struct svinStructure { diff --git a/src/u-blox_config_keys.h b/src/u-blox_config_keys.h new file mode 100644 index 0000000..deef696 --- /dev/null +++ b/src/u-blox_config_keys.h @@ -0,0 +1,547 @@ +/* + This is a library written for the u-blox ZED-F9P and NEO-M8P-2 + SparkFun sells these at its website: www.sparkfun.com + Do you like this library? Help support SparkFun. Buy a board! + https://www.sparkfun.com/products/16481 + https://www.sparkfun.com/products/15136 + https://www.sparkfun.com/products/15005 + https://www.sparkfun.com/products/15733 + https://www.sparkfun.com/products/15193 + https://www.sparkfun.com/products/15210 + + Written by Nathan Seidle @ SparkFun Electronics, September 6th, 2018 + + This library handles configuring and handling the responses + from a u-blox GPS module. Works with most modules from u-blox including + the Zed-F9P, NEO-M8P-2, NEO-M9N, ZOE-M8Q, SAM-M8Q, and many others. + + https://github.com/sparkfun/SparkFun_Ublox_Arduino_Library + + Development environment specifics: + Arduino IDE 1.8.5 + + SparkFun code, firmware, and software is released under the MIT License(http://opensource.org/licenses/MIT). + The MIT License (MIT) + Copyright (c) 2016 SparkFun Electronics + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the Software is furnished to + do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial + portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef __u_blox_config_keys_h__ +#define __u_blox_config_keys_h__ + +//The following consts are used to generate KEY values for the advanced protocol functions of VELGET/SET/DEL +const uint8_t VAL_SIZE_1 = 0x01; //One bit +const uint8_t VAL_SIZE_8 = 0x02; //One byte +const uint8_t VAL_SIZE_16 = 0x03; //Two bytes +const uint8_t VAL_SIZE_32 = 0x04; //Four bytes +const uint8_t VAL_SIZE_64 = 0x05; //Eight bytes + +//These are the Bitfield layers definitions for the UBX-CFG-VALSET message (not to be confused with Bitfield deviceMask in UBX-CFG-CFG) +const uint8_t VAL_LAYER_RAM = (1 << 0); +const uint8_t VAL_LAYER_BBR = (1 << 1); +const uint8_t VAL_LAYER_FLASH = (1 << 2); +const uint8_t VAL_LAYER_ALL = VAL_LAYER_RAM | VAL_LAYER_BBR | VAL_LAYER_FLASH; //Not valid with getVal() + +//Below are various Groups, IDs, and sizes for various settings +//These can be used to call getVal/setVal/delVal +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint8_t VAL_ID_PROT_UBX = 0x01; +const uint8_t VAL_ID_PROT_NMEA = 0x02; +const uint8_t VAL_ID_PROT_RTCM3 = 0x04; + +const uint8_t VAL_GROUP_I2C = 0x51; +const uint8_t VAL_GROUP_I2COUTPROT = 0x72; +const uint8_t VAL_GROUP_UART1INPROT = 0x73; +const uint8_t VAL_GROUP_UART1OUTPROT = 0x74; +const uint8_t VAL_GROUP_UART2INPROT = 0x75; +const uint8_t VAL_GROUP_UART2OUTPROT = 0x76; +const uint8_t VAL_GROUP_USBINPROT = 0x77; +const uint8_t VAL_GROUP_USBOUTPROT = 0x78; + +const uint8_t VAL_GROUP_UART_SIZE = VAL_SIZE_1; //All fields in UART group are currently 1 bit +const uint8_t VAL_GROUP_I2C_SIZE = VAL_SIZE_8; //All fields in I2C group are currently 1 byte + +const uint8_t VAL_ID_I2C_ADDRESS = 0x01; + +//Below are the key values for a given configuration setting + +//CFG-NMEA +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint32_t UBLOX_CFG_NMEA_PROTVER = 0x10930001; +const uint32_t UBLOX_CFG_NMEA_MAXSVS = 0x10930002; +const uint32_t UBLOX_CFG_NMEA_COMPAT = 0x10930003; +const uint32_t UBLOX_CFG_NMEA_CONSIDER = 0x10930004; +const uint32_t UBLOX_CFG_NMEA_LIMIT82 = 0x10930005; +const uint32_t UBLOX_CFG_NMEA_HIGHPREC = 0x10930006; +const uint32_t UBLOX_CFG_NMEA_SVNUMBERING = 0x20930007; +const uint32_t UBLOX_CFG_NMEA_FILT_GPS = 0x10930011; +const uint32_t UBLOX_CFG_NMEA_FILT_SBAS = 0x10930012; +const uint32_t UBLOX_CFG_NMEA_FILT_GAL = 0x10930013; +const uint32_t UBLOX_CFG_NMEA_FILT_QZSS = 0x10930015; +const uint32_t UBLOX_CFG_NMEA_FILT_GLO = 0x10930016; +const uint32_t UBLOX_CFG_NMEA_FILT_BDS = 0x10930017; +const uint32_t UBLOX_CFG_NMEA_OUT_INVFIX = 0x10930021; +const uint32_t UBLOX_CFG_NMEA_OUT_MSKFIX = 0x10930022; +const uint32_t UBLOX_CFG_NMEA_OUT_INVTIME = 0x10930023; +const uint32_t UBLOX_CFG_NMEA_OUT_INVDATE = 0x10930024; +const uint32_t UBLOX_CFG_NMEA_OUT_ONLYGPS = 0x10930025; +const uint32_t UBLOX_CFG_NMEA_OUT_FROZENCOG = 0x10930026; +const uint32_t UBLOX_CFG_NMEA_MAINTALKERID = 0x20930031; +const uint32_t UBLOX_CFG_NMEA_GSVTALKERID = 0x20930032; +const uint32_t UBLOX_CFG_NMEA_BDSTALKERID = 0x30930033; + +//CFG-RATE +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint32_t UBLOX_CFG_RATE_MEAS = 0x30210001; +const uint32_t UBLOX_CFG_RATE_NAV = 0x30210002; +const uint32_t UBLOX_CFG_RATE_TIMEREF = 0x20210003; + +//CFG-I2C +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint32_t UBLOX_CFG_I2C_ADDRESS = 0x20510001; +const uint32_t UBLOX_CFG_I2C_ENABLED = 0x10510003; + +const uint32_t UBLOX_CFG_I2CINPROT_UBX = 0x10710001; +const uint32_t UBLOX_CFG_I2CINPROT_NMEA = 0x10710002; +const uint32_t UBLOX_CFG_I2CINPROT_RTCM3X = 0x10710004; + +const uint32_t UBLOX_CFG_I2COUTPROT_UBX = 0x10720001; +const uint32_t UBLOX_CFG_I2COUTPROT_NMEA = 0x10720002; +const uint32_t UBLOX_CFG_I2COUTPROT_RTCM3X = 0x10720004; + +//CFG-UART1 +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint32_t UBLOX_CFG_UART1_BAUDRATE = 0x40520001; +const uint32_t UBLOX_CFG_UART1_ENABLED = 0x10520005; + +const uint32_t UBLOX_CFG_UART1INPROT_UBX = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART1INPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_UBX << (8 * 0)); //0x10730001 +const uint32_t UBLOX_CFG_UART1INPROT_NMEA = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART1INPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_NMEA << (8 * 0)); +const uint32_t UBLOX_CFG_UART1INPROT_RTCM3X = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART1INPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_RTCM3 << (8 * 0)); + +const uint32_t UBLOX_CFG_UART1OUTPROT_UBX = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART1OUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_UBX << (8 * 0)); +const uint32_t UBLOX_CFG_UART1OUTPROT_NMEA = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART1OUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_NMEA << (8 * 0)); +const uint32_t UBLOX_CFG_UART1OUTPROT_RTCM3X = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART1OUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_RTCM3 << (8 * 0)); + +//CFG-UART2 +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint32_t UBLOX_CFG_UART2_BAUDRATE = 0x40530001; +const uint32_t UBLOX_CFG_UART2_ENABLED = 0x10530005; + +const uint32_t UBLOX_CFG_UART2INPROT_UBX = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART2INPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_UBX << (8 * 0)); +const uint32_t UBLOX_CFG_UART2INPROT_NMEA = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART2INPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_NMEA << (8 * 0)); +const uint32_t UBLOX_CFG_UART2INPROT_RTCM3X = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART2INPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_RTCM3 << (8 * 0)); + +const uint32_t UBLOX_CFG_UART2OUTPROT_UBX = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART2OUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_UBX << (8 * 0)); +const uint32_t UBLOX_CFG_UART2OUTPROT_NMEA = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART2OUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_NMEA << (8 * 0)); +const uint32_t UBLOX_CFG_UART2OUTPROT_RTCM3X = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_UART2OUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_RTCM3 << (8 * 0)); + +//CFG-USB +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +const uint32_t UBLOX_CFG_USBINPROT_UBX = 0x10770001; +const uint32_t UBLOX_CFG_USBINPROT_NMEA = 0x10770002; +const uint32_t UBLOX_CFG_USBINPROT_RTCM3X = 0x10770004; + +const uint32_t UBLOX_CFG_USBOUTPROT_UBX = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_USBOUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_UBX << (8 * 0)); +const uint32_t UBLOX_CFG_USBOUTPROT_NMEA = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_USBOUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_NMEA << (8 * 0)); +const uint32_t UBLOX_CFG_USBOUTPROT_RTCM3X = ((VAL_GROUP_UART_SIZE << 4) << (8 * 3)) | (VAL_GROUP_USBOUTPROT << (8 * 2)) | (0x00 << (8 * 1)) | (VAL_ID_PROT_RTCM3 << (8 * 0)); + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +// CFG-MSGOUT: Message output configuration +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +// For each message and port a separate output rate (per second, per epoch) can be configured. +#define CFG_MSGOUT_NMEA_ID_DTM_I2C 0x209100a6 //Output rate of the NMEA-GX-DTM message on port I2C +#define CFG_MSGOUT_NMEA_ID_DTM_SPI 0x209100aa //Output rate of the NMEA-GX-DTM message on port SPI +#define CFG_MSGOUT_NMEA_ID_DTM_UART1 0x209100a7 //Output rate of the NMEA-GX-DTM message on port UART1 +#define CFG_MSGOUT_NMEA_ID_DTM_UART2 0x209100a8 //Output rate of the NMEA-GX-DTM message on port UART2 +#define CFG_MSGOUT_NMEA_ID_DTM_USB 0x209100a9 //Output rate of the NMEA-GX-DTM message on port USB +#define CFG_MSGOUT_NMEA_ID_GBS_I2C 0x209100dd //Output rate of the NMEA-GX-GBS message on port I2C +#define CFG_MSGOUT_NMEA_ID_GBS_SPI 0x209100e1 //Output rate of the NMEA-GX-GBS message on port SPI +#define CFG_MSGOUT_NMEA_ID_GBS_UART1 0x209100de //Output rate of the NMEA-GX-GBS message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GBS_UART2 0x209100df //Output rate of the NMEA-GX-GBS message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GBS_USB 0x209100e0 //Output rate of the NMEA-GX-GBS message on port USB +#define CFG_MSGOUT_NMEA_ID_GGA_I2C 0x209100ba //Output rate of the NMEA-GX-GGA message on port I2C +#define CFG_MSGOUT_NMEA_ID_GGA_SPI 0x209100be //Output rate of the NMEA-GX-GGA message on port SPI +#define CFG_MSGOUT_NMEA_ID_GGA_UART1 0x209100bb //Output rate of the NMEA-GX-GGA message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GGA_UART2 0x209100bc //Output rate of the NMEA-GX-GGA message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GGA_USB 0x209100bd //Output rate of the NMEA-GX-GGA message on port USB +#define CFG_MSGOUT_NMEA_ID_GLL_I2C 0x209100c9 //Output rate of the NMEA-GX-GLL message on port I2C +#define CFG_MSGOUT_NMEA_ID_GLL_SPI 0x209100cd //Output rate of the NMEA-GX-GLL message on port SPI +#define CFG_MSGOUT_NMEA_ID_GLL_UART1 0x209100ca //Output rate of the NMEA-GX-GLL message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GLL_UART2 0x209100cb //Output rate of the NMEA-GX-GLL message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GLL_USB 0x209100cc //Output rate of the NMEA-GX-GLL message on port USB +#define CFG_MSGOUT_NMEA_ID_GNS_I2C 0x209100b5 //Output rate of the NMEA-GX-GNS message on port I2C +#define CFG_MSGOUT_NMEA_ID_GNS_SPI 0x209100b9 //Output rate of the NMEA-GX-GNS message on port SPI +#define CFG_MSGOUT_NMEA_ID_GNS_UART1 0x209100b6 //Output rate of the NMEA-GX-GNS message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GNS_UART2 0x209100b7 //Output rate of the NMEA-GX-GNS message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GNS_USB 0x209100b8 //Output rate of the NMEA-GX-GNS message on port USB +#define CFG_MSGOUT_NMEA_ID_GRS_I2C 0x209100ce //Output rate of the NMEA-GX-GRS message on port I2C +#define CFG_MSGOUT_NMEA_ID_GRS_SPI 0x209100d2 //Output rate of the NMEA-GX-GRS message on port SPI +#define CFG_MSGOUT_NMEA_ID_GRS_UART1 0x209100cf //Output rate of the NMEA-GX-GRS message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GRS_UART2 0x209100d0 //Output rate of the NMEA-GX-GRS message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GRS_USB 0x209100d1 //Output rate of the NMEA-GX-GRS message on port USB +#define CFG_MSGOUT_NMEA_ID_GSA_I2C 0x209100bf //Output rate of the NMEA-GX-GSA message on port I2C +#define CFG_MSGOUT_NMEA_ID_GSA_SPI 0x209100c3 //Output rate of the NMEA-GX-GSA message on port SPI +#define CFG_MSGOUT_NMEA_ID_GSA_UART1 0x209100c0 //Output rate of the NMEA-GX-GSA message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GSA_UART2 0x209100c1 //Output rate of the NMEA-GX-GSA message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GSA_USB 0x209100c2 //Output rate of the NMEA-GX-GSA message on port USB +#define CFG_MSGOUT_NMEA_ID_GST_I2C 0x209100d3 //Output rate of the NMEA-GX-GST message on port I2C +#define CFG_MSGOUT_NMEA_ID_GST_SPI 0x209100d7 //Output rate of the NMEA-GX-GST message on port SPI +#define CFG_MSGOUT_NMEA_ID_GST_UART1 0x209100d4 //Output rate of the NMEA-GX-GST message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GST_UART2 0x209100d5 //Output rate of the NMEA-GX-GST message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GST_USB 0x209100d6 //Output rate of the NMEA-GX-GST message on port USB +#define CFG_MSGOUT_NMEA_ID_GSV_I2C 0x209100c4 //Output rate of the NMEA-GX-GSV message on port I2C +#define CFG_MSGOUT_NMEA_ID_GSV_SPI 0x209100c8 //Output rate of the NMEA-GX-GSV message on port SPI +#define CFG_MSGOUT_NMEA_ID_GSV_UART1 0x209100c5 //Output rate of the NMEA-GX-GSV message on port UART1 +#define CFG_MSGOUT_NMEA_ID_GSV_UART2 0x209100c6 //Output rate of the NMEA-GX-GSV message on port UART2 +#define CFG_MSGOUT_NMEA_ID_GSV_USB 0x209100c7 //Output rate of the NMEA-GX-GSV message on port USB +#define CFG_MSGOUT_NMEA_ID_RLM_I2C 0x20910400 //Output rate of the NMEA-GX-RLM message on port I2C +#define CFG_MSGOUT_NMEA_ID_RLM_SPI 0x20910404 //Output rate of the NMEA-GX-RLM message on port SPI +#define CFG_MSGOUT_NMEA_ID_RLM_UART1 0x20910401 //Output rate of the NMEA-GX-RLM message on port UART1 +#define CFG_MSGOUT_NMEA_ID_RLM_UART2 0x20910402 //Output rate of the NMEA-GX-RLM message on port UART2 +#define CFG_MSGOUT_NMEA_ID_RLM_USB 0x20910403 //Output rate of the NMEA-GX-RLM message on port USB +#define CFG_MSGOUT_NMEA_ID_RMC_I2C 0x209100ab //Output rate of the NMEA-GX-RMC message on port I2C +#define CFG_MSGOUT_NMEA_ID_RMC_SPI 0x209100af //Output rate of the NMEA-GX-RMC message on port SPI +#define CFG_MSGOUT_NMEA_ID_RMC_UART1 0x209100ac //Output rate of the NMEA-GX-RMC message on port UART1 +#define CFG_MSGOUT_NMEA_ID_RMC_UART2 0x209100ad //Output rate of the NMEA-GX-RMC message on port UART2 +#define CFG_MSGOUT_NMEA_ID_RMC_USB 0x209100ae //Output rate of the NMEA-GX-RMC message on port USB +#define CFG_MSGOUT_NMEA_ID_VLW_I2C 0x209100e7 //Output rate of the NMEA-GX-VLW message on port I2C +#define CFG_MSGOUT_NMEA_ID_VLW_SPI 0x209100eb //Output rate of the NMEA-GX-VLW message on port SPI +#define CFG_MSGOUT_NMEA_ID_VLW_UART1 0x209100e8 //Output rate of the NMEA-GX-VLW message on port UART1 +#define CFG_MSGOUT_NMEA_ID_VLW_UART2 0x209100e9 //Output rate of the NMEA-GX-VLW message on port UART2 +#define CFG_MSGOUT_NMEA_ID_VLW_USB 0x209100ea //Output rate of the NMEA-GX-VLW message on port USB +#define CFG_MSGOUT_NMEA_ID_VTG_I2C 0x209100b0 //Output rate of the NMEA-GX-VTG message on port I2C +#define CFG_MSGOUT_NMEA_ID_VTG_SPI 0x209100b4 //Output rate of the NMEA-GX-VTG message on port SPI +#define CFG_MSGOUT_NMEA_ID_VTG_UART1 0x209100b1 //Output rate of the NMEA-GX-VTG message on port UART1 +#define CFG_MSGOUT_NMEA_ID_VTG_UART2 0x209100b2 //Output rate of the NMEA-GX-VTG message on port UART2 +#define CFG_MSGOUT_NMEA_ID_VTG_USB 0x209100b3 //Output rate of the NMEA-GX-VTG message on port USB +#define CFG_MSGOUT_NMEA_ID_ZDA_I2C 0x209100d8 //Output rate of the NMEA-GX-ZDA message on port I2C +#define CFG_MSGOUT_NMEA_ID_ZDA_SPI 0x209100dc //Output rate of the NMEA-GX-ZDA message on port SPI +#define CFG_MSGOUT_NMEA_ID_ZDA_UART1 0x209100d9 //Output rate of the NMEA-GX-ZDA message on port UART1 +#define CFG_MSGOUT_NMEA_ID_ZDA_UART2 0x209100da //Output rate of the NMEA-GX-ZDA message on port UART2 +#define CFG_MSGOUT_NMEA_ID_ZDA_USB 0x209100db //Output rate of the NMEA-GX-ZDA message on port USB +#define CFG_MSGOUT_PUBX_ID_POLYP_I2C 0x209100ec //Output rate of the NMEA-GX-PUBX00 message on port I2C +#define CFG_MSGOUT_PUBX_ID_POLYP_SPI 0x209100f0 //Output rate of the NMEA-GX-PUBX00 message on port SPI +#define CFG_MSGOUT_PUBX_ID_POLYP_UART1 0x209100ed //Output rate of the NMEA-GX-PUBX00 message on port UART1 +#define CFG_MSGOUT_PUBX_ID_POLYP_UART2 0x209100ee //Output rate of the NMEA-GX-PUBX00 message on port UART2 +#define CFG_MSGOUT_PUBX_ID_POLYP_USB 0x209100ef //Output rate of the NMEA-GX-PUBX00 message on port USB +#define CFG_MSGOUT_PUBX_ID_POLYS_I2C 0x209100f1 //Output rate of the NMEA-GX-PUBX03 message on port I2C +#define CFG_MSGOUT_PUBX_ID_POLYS_SPI 0x209100f5 //Output rate of the NMEA-GX-PUBX03 message on port SPI +#define CFG_MSGOUT_PUBX_ID_POLYS_UART1 0x209100f2 //Output rate of the NMEA-GX-PUBX03 message on port UART1 +#define CFG_MSGOUT_PUBX_ID_POLYS_UART2 0x209100f3 //Output rate of the NMEA-GX-PUBX03 message on port UART2 +#define CFG_MSGOUT_PUBX_ID_POLYS_USB 0x209100f4 //Output rate of the NMEA-GX-PUBX03 message on port USB +#define CFG_MSGOUT_PUBX_ID_POLYT_I2C 0x209100f6 //Output rate of the NMEA-GX-PUBX04 message on port I2C +#define CFG_MSGOUT_PUBX_ID_POLYT_SPI 0x209100fa //Output rate of the NMEA-GX-PUBX04 message on port SPI +#define CFG_MSGOUT_PUBX_ID_POLYT_UART1 0x209100f7 //Output rate of the NMEA-GX-PUBX04 message on port UART1 +#define CFG_MSGOUT_PUBX_ID_POLYT_UART2 0x209100f8 //Output rate of the NMEA-GX-PUBX04 message on port UART2 +#define CFG_MSGOUT_PUBX_ID_POLYT_USB 0x209100f9 //Output rate of the NMEA-GX-PUBX04 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1005_I2C 0x209102bd //Output rate of the RTCM-3X-TYPE1005 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1005_SPI 0x209102c1 //Output rate of the RTCM-3X-TYPE1005 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1005_UART1 0x209102be //Output rate of the RTCM-3X-TYPE1005 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1005_UART2 0x209102bf //Output rate of the RTCM-3X-TYPE1005 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1005_USB 0x209102c0 //Output rate of the RTCM-3X-TYPE1005 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1074_I2C 0x2091035e //Output rate of the RTCM-3X-TYPE1074 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1074_SPI 0x20910362 //Output rate of the RTCM-3X-TYPE1074 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1074_UART1 0x2091035f //Output rate of the RTCM-3X-TYPE1074 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1074_UART2 0x20910360 //Output rate of the RTCM-3X-TYPE1074 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1074_USB 0x20910361 //Output rate of the RTCM-3X-TYPE1074 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1077_I2C 0x209102cc //Output rate of the RTCM-3X-TYPE1077 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1077_SPI 0x209102d0 //Output rate of the RTCM-3X-TYPE1077 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1077_UART1 0x209102cd //Output rate of the RTCM-3X-TYPE1077 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1077_UART2 0x209102ce //Output rate of the RTCM-3X-TYPE1077 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1077_USB 0x209102cf //Output rate of the RTCM-3X-TYPE1077 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1084_I2C 0x20910363 //Output rate of the RTCM-3X-TYPE1084 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1084_SPI 0x20910367 //Output rate of the RTCM-3X-TYPE1084 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1084_UART1 0x20910364 //Output rate of the RTCM-3X-TYPE1084 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1084_UART2 0x20910365 //Output rate of the RTCM-3X-TYPE1084 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1084_USB 0x20910366 //Output rate of the RTCM-3X-TYPE1084 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1087_I2C 0x209102d1 //Output rate of the RTCM-3X-TYPE1087 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1087_SPI 0x209102d5 //Output rate of the RTCM-3X-TYPE1087 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1087_UART1 0x209102d2 //Output rate of the RTCM-3X-TYPE1087 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1087_UART2 0x209102d3 //Output rate of the RTCM-3X-TYPE1087 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1087_USB 0x209102d4 //Output rate of the RTCM-3X-TYPE1087 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1094_I2C 0x20910368 //Output rate of the RTCM-3X-TYPE1094 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1094_SPI 0x2091036c //Output rate of the RTCM-3X-TYPE1094 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1094_UART1 0x20910369 //Output rate of the RTCM-3X-TYPE1094 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1094_UART2 0x2091036a //Output rate of the RTCM-3X-TYPE1094 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1094_USB 0x2091036b //Output rate of the RTCM-3X-TYPE1094 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1097_I2C 0x20910318 //Output rate of the RTCM-3X-TYPE1097 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1097_SPI 0x2091031c //Output rate of the RTCM-3X-TYPE1097 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1097_UART1 0x20910319 //Output rate of the RTCM-3X-TYPE1097 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1097_UART2 0x2091031a //Output rate of the RTCM-3X-TYPE1097 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1097_USB 0x2091031b //Output rate of the RTCM-3X-TYPE1097 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1124_I2C 0x2091036d //Output rate of the RTCM-3X-TYPE1124 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1124_SPI 0x20910371 //Output rate of the RTCM-3X-TYPE1124 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1124_UART1 0x2091036e //Output rate of the RTCM-3X-TYPE1124 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1124_UART2 0x2091036f //Output rate of the RTCM-3X-TYPE1124 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1124_USB 0x20910370 //Output rate of the RTCM-3X-TYPE1124 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1127_I2C 0x209102d6 //Output rate of the RTCM-3X-TYPE1127 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1127_SPI 0x209102da //Output rate of the RTCM-3X-TYPE1127 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1127_UART1 0x209102d7 //Output rate of the RTCM-3X-TYPE1127 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1127_UART2 0x209102d8 //Output rate of the RTCM-3X-TYPE1127 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1127_USB 0x209102d9 //Output rate of the RTCM-3X-TYPE1127 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE1230_I2C 0x20910303 //Output rate of the RTCM-3X-TYPE1230 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE1230_SPI 0x20910307 //Output rate of the RTCM-3X-TYPE1230 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE1230_UART1 0x20910304 //Output rate of the RTCM-3X-TYPE1230 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE1230_UART2 0x20910305 //Output rate of the RTCM-3X-TYPE1230 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE1230_USB 0x20910306 //Output rate of the RTCM-3X-TYPE1230 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE4072_0_I2C 0x209102fe //Output rate of the RTCM-3X-TYPE4072_0 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE4072_0_SPI 0x20910302 //Output rate of the RTCM-3X-TYPE4072_0 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE4072_0_UART1 0x209102ff //Output rate of the RTCM-3X-TYPE4072_0 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE4072_0_UART2 0x20910300 //Output rate of the RTCM-3X-TYPE4072_0 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE4072_0_USB 0x20910301 //Output rate of the RTCM-3X-TYPE4072_0 message on port USB +#define CFG_MSGOUT_RTCM_3X_TYPE4072_1_I2C 0x20910381 //Output rate of the RTCM-3X-TYPE4072_1 message on port I2C +#define CFG_MSGOUT_RTCM_3X_TYPE4072_1_SPI 0x20910385 //Output rate of the RTCM-3X-TYPE4072_1 message on port SPI +#define CFG_MSGOUT_RTCM_3X_TYPE4072_1_UART1 0x20910382 //Output rate of the RTCM-3X-TYPE4072_1 message on port UART1 +#define CFG_MSGOUT_RTCM_3X_TYPE4072_1_UART2 0x20910383 //Output rate of the RTCM-3X-TYPE4072_1 message on port UART2 +#define CFG_MSGOUT_RTCM_3X_TYPE4072_1_USB 0x20910384 //Output rate of the RTCM-3X-TYPE4072_1 message on port USB +#define CFG_MSGOUT_UBX_LOG_INFO_I2C 0x20910259 //Output rate of the UBX-LOG-INFO message on port I2C +#define CFG_MSGOUT_UBX_LOG_INFO_SPI 0x2091025d //Output rate of the UBX-LOG-INFO message on port SPI +#define CFG_MSGOUT_UBX_LOG_INFO_UART1 0x2091025a //Output rate of the UBX-LOG-INFO message on port UART1 +#define CFG_MSGOUT_UBX_LOG_INFO_UART2 0x2091025b //Output rate of the UBX-LOG-INFO message on port UART2 +#define CFG_MSGOUT_UBX_LOG_INFO_USB 0x2091025c //Output rate of the UBX-LOG-INFO message on port USB +#define CFG_MSGOUT_UBX_MON_COMMS_I2C 0x2091034f //Output rate of the UBX-MON-COMMS message on port I2C +#define CFG_MSGOUT_UBX_MON_COMMS_SPI 0x20910353 //Output rate of the UBX-MON-COMMS message on port SPI +#define CFG_MSGOUT_UBX_MON_COMMS_UART1 0x20910350 //Output rate of the UBX-MON-COMMS message on port UART1 +#define CFG_MSGOUT_UBX_MON_COMMS_UART2 0x20910351 //Output rate of the UBX-MON-COMMS message on port UART2 +#define CFG_MSGOUT_UBX_MON_COMMS_USB 0x20910352 //Output rate of the UBX-MON-COMMS message on port USB +#define CFG_MSGOUT_UBX_MON_HW2_I2C 0x209101b9 //Output rate of the UBX-MON-HW2 message on port I2C +#define CFG_MSGOUT_UBX_MON_HW2_SPI 0x209101bd //Output rate of the UBX-MON-HW2 message on port SPI +#define CFG_MSGOUT_UBX_MON_HW2_UART1 0x209101ba //Output rate of the UBX-MON-HW2 message on port UART1 +#define CFG_MSGOUT_UBX_MON_HW2_UART2 0x209101bb //Output rate of the UBX-MON-HW2 message on port UART2 +#define CFG_MSGOUT_UBX_MON_HW2_USB 0x209101bc //Output rate of the UBX-MON-HW2 message on port USB +#define CFG_MSGOUT_UBX_MON_HW3_I2C 0x20910354 //Output rate of the UBX-MON-HW3 message on port I2C +#define CFG_MSGOUT_UBX_MON_HW3_SPI 0x20910358 //Output rate of the UBX-MON-HW3 message on port SPI +#define CFG_MSGOUT_UBX_MON_HW3_UART1 0x20910355 //Output rate of the UBX-MON-HW3 message on port UART1 +#define CFG_MSGOUT_UBX_MON_HW3_UART2 0x20910356 //Output rate of the UBX-MON-HW3 message on port UART2 +#define CFG_MSGOUT_UBX_MON_HW3_USB 0x20910357 //Output rate of the UBX-MON-HW3 message on port USB +#define CFG_MSGOUT_UBX_MON_HW_I2C 0x209101b4 //Output rate of the UBX-MON-HW message on port I2C +#define CFG_MSGOUT_UBX_MON_HW_SPI 0x209101b8 //Output rate of the UBX-MON-HW message on port SPI +#define CFG_MSGOUT_UBX_MON_HW_UART1 0x209101b5 //Output rate of the UBX-MON-HW message on port UART1 +#define CFG_MSGOUT_UBX_MON_HW_UART2 0x209101b6 //Output rate of the UBX-MON-HW message on port UART2 +#define CFG_MSGOUT_UBX_MON_HW_USB 0x209101b7 //Output rate of the UBX-MON-HW message on port USB +#define CFG_MSGOUT_UBX_MON_IO_I2C 0x209101a5 //Output rate of the UBX-MON-IO message on port I2C +#define CFG_MSGOUT_UBX_MON_IO_SPI 0x209101a9 //Output rate of the UBX-MON-IO message on port SPI +#define CFG_MSGOUT_UBX_MON_IO_UART1 0x209101a6 //Output rate of the UBX-MON-IO message on port UART1 +#define CFG_MSGOUT_UBX_MON_IO_UART2 0x209101a7 //Output rate of the UBX-MON-IO message on port UART2 +#define CFG_MSGOUT_UBX_MON_IO_USB 0x209101a8 //Output rate of the UBX-MON-IO message on port USB +#define CFG_MSGOUT_UBX_MON_MSGPP_I2C 0x20910196 //Output rate of the UBX-MON-MSGPP message on port I2C +#define CFG_MSGOUT_UBX_MON_MSGPP_SPI 0x2091019a //Output rate of the UBX-MON-MSGPP message on port SPI +#define CFG_MSGOUT_UBX_MON_MSGPP_UART1 0x20910197 //Output rate of the UBX-MON-MSGPP message on port UART1 +#define CFG_MSGOUT_UBX_MON_MSGPP_UART2 0x20910198 //Output rate of the UBX-MON-MSGPP message on port UART2 +#define CFG_MSGOUT_UBX_MON_MSGPP_USB 0x20910199 //Output rate of the UBX-MON-MSGPP message on port USB +#define CFG_MSGOUT_UBX_MON_RF_I2C 0x20910359 //Output rate of the UBX-MON-RF message on port I2C +#define CFG_MSGOUT_UBX_MON_RF_SPI 0x2091035d //Output rate of the UBX-MON-RF message on port SPI +#define CFG_MSGOUT_UBX_MON_RF_UART1 0x2091035a //Output rate of the UBX-MON-RF message on port UART1 +#define CFG_MSGOUT_UBX_MON_RF_UART2 0x2091035b //Output rate of the UBX-MON-RF message on port UART2 +#define CFG_MSGOUT_UBX_MON_RF_USB 0x2091035c // Output rate of the UBX-MON-RF message on port USB +#define CFG_MSGOUT_UBX_MON_RXBUF_I2C 0x209101a0 // Output rate of the UBX-MON-RXBUF message on port I2C +#define CFG_MSGOUT_UBX_MON_RXBUF_SPI 0x209101a4 // Output rate of the UBX-MON-RXBUF message on port SPI +#define CFG_MSGOUT_UBX_MON_RXBUF_UART1 0x209101a1 // Output rate of the UBX-MON-RXBUF message on port UART1 +#define CFG_MSGOUT_UBX_MON_RXBUF_UART2 0x209101a2 // Output rate of the UBX-MON-RXBUF message on port UART2 +#define CFG_MSGOUT_UBX_MON_RXBUF_USB 0x209101a3 // Output rate of the UBX-MON-RXBUF message on port USB +#define CFG_MSGOUT_UBX_MON_RXR_I2C 0x20910187 // Output rate of the UBX-MON-RXR message on port I2C +#define CFG_MSGOUT_UBX_MON_RXR_SPI 0x2091018b // Output rate of the UBX-MON-RXR message on port SPI +#define CFG_MSGOUT_UBX_MON_RXR_UART1 0x20910188 // Output rate of the UBX-MON-RXR message on port UART1 +#define CFG_MSGOUT_UBX_MON_RXR_UART2 0x20910189 // Output rate of the UBX-MON-RXR message on port UART2 +#define CFG_MSGOUT_UBX_MON_RXR_USB 0x2091018a // Output rate of the UBX-MON-RXR message on port USB +#define CFG_MSGOUT_UBX_MON_SPAN_I2C 0x2091038b // Output rate of the UBX-MON-SPAN message on port I2C +#define CFG_MSGOUT_UBX_MON_SPAN_SPI 0x2091038f // Output rate of the UBX-MON-SPAN message on port SPI +#define CFG_MSGOUT_UBX_MON_SPAN_UART1 0x2091038c // Output rate of the UBX-MON-SPAN message on port UART1 +#define CFG_MSGOUT_UBX_MON_SPAN_UART2 0x2091038d // Output rate of the UBX-MON-SPAN message on port UART2 +#define CFG_MSGOUT_UBX_MON_SPAN_USB 0x2091038e // Output rate of the UBX-MON-SPAN message on port USB +#define CFG_MSGOUT_UBX_MON_TXBUF_I2C 0x2091019b // Output rate of the UBX-MON-TXBUF message on port I2C +#define CFG_MSGOUT_UBX_MON_TXBUF_SPI 0x2091019f // Output rate of the UBX-MON-TXBUF message on port SPI +#define CFG_MSGOUT_UBX_MON_TXBUF_UART1 0x2091019c // Output rate of the UBX-MON-TXBUF message on port UART1 +#define CFG_MSGOUT_UBX_MON_TXBUF_UART2 0x2091019d // Output rate of the UBX-MON-TXBUF message on port UART2 +#define CFG_MSGOUT_UBX_MON_TXBUF_USB 0x2091019e // Output rate of the UBX-MON-TXBUF message on port USB +#define CFG_MSGOUT_UBX_NAV_CLOCK_I2C 0x20910065 // Output rate of the UBX-NAV-CLOCK message on port I2C +#define CFG_MSGOUT_UBX_NAV_CLOCK_SPI 0x20910069 // Output rate of the UBX-NAV-CLOCK message on port SPI +#define CFG_MSGOUT_UBX_NAV_CLOCK_UART1 0x20910066 // Output rate of the UBX-NAV-CLOCK message on port UART1 +#define CFG_MSGOUT_UBX_NAV_CLOCK_UART2 0x20910067 // Output rate of the UBX-NAV-CLOCK message on port UART2 +#define CFG_MSGOUT_UBX_NAV_CLOCK_USB 0x20910068 // Output rate of the UBX-NAV-CLOCK message on port USB +#define CFG_MSGOUT_UBX_NAV_DOP_I2C 0x20910038 // Output rate of the UBX-NAV-DOP message on port I2C +#define CFG_MSGOUT_UBX_NAV_DOP_SPI 0x2091003c // Output rate of the UBX-NAV-DOP message on port SPI +#define CFG_MSGOUT_UBX_NAV_DOP_UART1 0x20910039 // Output rate of the UBX-NAV-DOP message on port UART1 +#define CFG_MSGOUT_UBX_NAV_DOP_UART2 0x2091003a // Output rate of the UBX-NAV-DOP message on port UART2 +#define CFG_MSGOUT_UBX_NAV_DOP_USB 0x2091003b // Output rate of the UBX-NAV-DOP message on port USB +#define CFG_MSGOUT_UBX_NAV_EOE_I2C 0x2091015f // Output rate of the UBX-NAV-EOE message on port I2C +#define CFG_MSGOUT_UBX_NAV_EOE_SPI 0x20910163 // Output rate of the UBX-NAV-EOE message on port SPI +#define CFG_MSGOUT_UBX_NAV_EOE_UART1 0x20910160 // Output rate of the UBX-NAV-EOE message on port UART1 +#define CFG_MSGOUT_UBX_NAV_EOE_UART2 0x20910161 // Output rate of the UBX-NAV-EOE message on port UART2 +#define CFG_MSGOUT_UBX_NAV_EOE_USB 0x20910162 // Output rate of the UBX-NAV-EOE message on port USB +#define CFG_MSGOUT_UBX_NAV_GEOFENCE_I2C 0x209100a1 // Output rate of the UBX-NAV-GEOFENCE message on port I2C +#define CFG_MSGOUT_UBX_NAV_GEOFENCE_SPI 0x209100a5 // Output rate of the UBX-NAV-GEOFENCE message on port SPI +#define CFG_MSGOUT_UBX_NAV_GEOFENCE_UART1 0x209100a2 // Output rate of the UBX-NAV-GEOFENCE message on port UART1 +#define CFG_MSGOUT_UBX_NAV_GEOFENCE_UART2 0x209100a3 // Output rate of the UBX-NAV-GEOFENCE message on port UART2 +#define CFG_MSGOUT_UBX_NAV_GEOFENCE_USB 0x209100a4 // Output rate of the UBX-NAV-GEOFENCE message on port USB +#define CFG_MSGOUT_UBX_NAV_HPPOSECEF_I2C 0x2091002e // Output rate of the UBX-NAV-HPPOSECEF message on port I2C +#define CFG_MSGOUT_UBX_NAV_HPPOSECEF_SPI 0x20910032 // Output rate of the UBX-NAV-HPPOSECEF message on port SPI +#define CFG_MSGOUT_UBX_NAV_HPPOSECEF_UART1 0x2091002f // Output rate of the UBX-NAV-HPPOSECEF message on port UART1 +#define CFG_MSGOUT_UBX_NAV_HPPOSECEF_UART2 0x20910030 // Output rate of the UBX-NAV-HPPOSECEF message on port UART2 +#define CFG_MSGOUT_UBX_NAV_HPPOSECEF_USB 0x20910031 // Output rate of the UBX-NAV-HPPOSECEF message on port USB +#define CFG_MSGOUT_UBX_NAV_HPPOSLLH_I2C 0x20910033 // Output rate of the UBX-NAV-HPPOSLLH message on port I2C +#define CFG_MSGOUT_UBX_NAV_HPPOSLLH_SPI 0x20910037 // Output rate of the UBX-NAV-HPPOSLLH message on port SPI +#define CFG_MSGOUT_UBX_NAV_HPPOSLLH_UART1 0x20910034 // Output rate of the UBX-NAV-HPPOSLLH message on port UART1 +#define CFG_MSGOUT_UBX_NAV_HPPOSLLH_UART2 0x20910035 // Output rate of the UBX-NAV-HPPOSLLH message on port UART2 +#define CFG_MSGOUT_UBX_NAV_HPPOSLLH_USB 0x20910036 // Output rate of the UBX-NAV-HPPOSLLH message on port USB +#define CFG_MSGOUT_UBX_NAV_ODO_I2C 0x2091007e // Output rate of the UBX-NAV-ODO message on port I2C +#define CFG_MSGOUT_UBX_NAV_ODO_SPI 0x20910082 // Output rate of the UBX-NAV-ODO message on port SPI +#define CFG_MSGOUT_UBX_NAV_ODO_UART1 0x2091007f // Output rate of the UBX-NAV-ODO message on port UART1 +#define CFG_MSGOUT_UBX_NAV_ODO_UART2 0x20910080 // Output rate of the UBX-NAV-ODO message on port UART2 +#define CFG_MSGOUT_UBX_NAV_ODO_USB 0x20910081 // Output rate of the UBX-NAV-ODO message on port USB +#define CFG_MSGOUT_UBX_NAV_ORB_I2C 0x20910010 // Output rate of the UBX-NAV-ORB message on port I2C +#define CFG_MSGOUT_UBX_NAV_ORB_SPI 0x20910014 // Output rate of the UBX-NAV-ORB message on port SPI +#define CFG_MSGOUT_UBX_NAV_ORB_UART1 0x20910011 // Output rate of the UBX-NAV-ORB message on port UART1 +#define CFG_MSGOUT_UBX_NAV_ORB_UART2 0x20910012 // Output rate of the UBX-NAV-ORB message on port UART2 +#define CFG_MSGOUT_UBX_NAV_ORB_USB 0x20910013 // Output rate of the UBX-NAV-ORB message on port USB +#define CFG_MSGOUT_UBX_NAV_POSECEF_I2C 0x20910024 // Output rate of the UBX-NAV-POSECEF message on port I2C +#define CFG_MSGOUT_UBX_NAV_POSECEF_SPI 0x20910028 // Output rate of the UBX-NAV-POSECEF message on port SPI +#define CFG_MSGOUT_UBX_NAV_POSECEF_UART1 0x20910025 // Output rate of the UBX-NAV-POSECEF message on port UART1 +#define CFG_MSGOUT_UBX_NAV_POSECEF_UART2 0x20910026 // Output rate of the UBX-NAV-POSECEF message on port UART2 +#define CFG_MSGOUT_UBX_NAV_POSECEF_USB 0x20910027 // Output rate of the UBX-NAV-POSECEF message on port USB +#define CFG_MSGOUT_UBX_NAV_POSLLH_I2C 0x20910029 // Output rate of the UBX-NAV-POSLLH message on port I2C +#define CFG_MSGOUT_UBX_NAV_POSLLH_SPI 0x2091002d // Output rate of the UBX-NAV-POSLLH message on port SPI +#define CFG_MSGOUT_UBX_NAV_POSLLH_UART1 0x2091002a // Output rate of the UBX-NAV-POSLLH message on port UART1 +#define CFG_MSGOUT_UBX_NAV_POSLLH_UART2 0x2091002b // Output rate of the UBX-NAV-POSLLH message on port UART2 +#define CFG_MSGOUT_UBX_NAV_POSLLH_USB 0x2091002c // Output rate of the UBX-NAV-POSLLH message on port USB +#define CFG_MSGOUT_UBX_NAV_PVT_I2C 0x20910006 // Output rate of the UBX-NAV-PVT message on port I2C +#define CFG_MSGOUT_UBX_NAV_PVT_SPI 0x2091000a // Output rate of the UBX-NAV-PVT message on port SPI +#define CFG_MSGOUT_UBX_NAV_PVT_UART1 0x20910007 // Output rate of the UBX-NAV-PVT message on port UART1 +#define CFG_MSGOUT_UBX_NAV_PVT_UART2 0x20910008 // Output rate of the UBX-NAV-PVT message on port UART2 +#define CFG_MSGOUT_UBX_NAV_PVT_USB 0x20910009 // Output rate of the UBX-NAV-PVT message on port USB +#define CFG_MSGOUT_UBX_NAV_RELPOSNED_I2C 0x2091008d // Output rate of the UBX-NAV-RELPOSNED message on port I2C +#define CFG_MSGOUT_UBX_NAV_RELPOSNED_SPI 0x20910091 // Output rate of the UBX-NAV-RELPOSNED message on port SPI +#define CFG_MSGOUT_UBX_NAV_RELPOSNED_UART1 0x2091008e // Output rate of the UBX-NAV-RELPOSNED message on port UART1 +#define CFG_MSGOUT_UBX_NAV_RELPOSNED_UART2 0x2091008f // Output rate of the UBX-NAV-RELPOSNED message on port UART2 +#define CFG_MSGOUT_UBX_NAV_RELPOSNED_USB 0x20910090 // Output rate of the UBX-NAV-RELPOSNED message on port USB +#define CFG_MSGOUT_UBX_NAV_SAT_I2C 0x20910015 // Output rate of the UBX-NAV-SAT message on port I2C +#define CFG_MSGOUT_UBX_NAV_SAT_SPI 0x20910019 // Output rate of the UBX-NAV-SAT message on port SPI +#define CFG_MSGOUT_UBX_NAV_SAT_UART1 0x20910016 // Output rate of the UBX-NAV-SAT message on port UART1 +#define CFG_MSGOUT_UBX_NAV_SAT_UART2 0x20910017 // Output rate of the UBX-NAV-SAT message on port UART2 +#define CFG_MSGOUT_UBX_NAV_SAT_USB 0x20910018 // Output rate of the UBX-NAV-SAT message on port USB +#define CFG_MSGOUT_UBX_NAV_SBAS_I2C 0x2091006a // Output rate of the UBX-NAV-SBAS message on port I2C +#define CFG_MSGOUT_UBX_NAV_SBAS_SPI 0x2091006e // Output rate of the UBX-NAV-SBAS message on port SPI +#define CFG_MSGOUT_UBX_NAV_SBAS_UART1 0x2091006b // Output rate of the UBX-NAV-SBAS message on port UART1 +#define CFG_MSGOUT_UBX_NAV_SBAS_UART2 0x2091006c // Output rate of the UBX-NAV-SBAS message on port UART2 +#define CFG_MSGOUT_UBX_NAV_SBAS_USB 0x2091006d // Output rate of the UBX-NAV-SBAS message on port USB +#define CFG_MSGOUT_UBX_NAV_SIG_I2C 0x20910345 // Output rate of the UBX-NAV-SIG message on port I2C +#define CFG_MSGOUT_UBX_NAV_SIG_SPI 0x20910349 // Output rate of the UBX-NAV-SIG message on port SPI +#define CFG_MSGOUT_UBX_NAV_SIG_UART1 0x20910346 // Output rate of the UBX-NAV-SIG message on port UART1 +#define CFG_MSGOUT_UBX_NAV_SIG_UART2 0x20910347 // Output rate of the UBX-NAV-SIG message on port UART2 +#define CFG_MSGOUT_UBX_NAV_SIG_USB 0x20910348 // Output rate of the UBX-NAV-SIG message on port USB +#define CFG_MSGOUT_UBX_NAV_SLAS_I2C 0x20910336 // Output rate of the UBX-NAV-SLAS message on port I2C +#define CFG_MSGOUT_UBX_NAV_SLAS_SPI 0x2091033a // Output rate of the UBX-NAV-SLAS message on port SPI +#define CFG_MSGOUT_UBX_NAV_SLAS_UART1 0x20910337 // Output rate of the UBX-NAV-SLAS message on port UART1 +#define CFG_MSGOUT_UBX_NAV_SLAS_UART2 0x20910338 // Output rate of the UBX-NAV-SLAS message on port UART2 +#define CFG_MSGOUT_UBX_NAV_SLAS_USB 0x20910339 // Output rate of the UBX-NAV-SLAS message on port USB +#define CFG_MSGOUT_UBX_NAV_STATUS_I2C 0x2091001a // Output rate of the UBX-NAV-STATUS message on port I2C +#define CFG_MSGOUT_UBX_NAV_STATUS_SPI 0x2091001e // Output rate of the UBX-NAV-STATUS message on port SPI +#define CFG_MSGOUT_UBX_NAV_STATUS_UART1 0x2091001b // Output rate of the UBX-NAV-STATUS message on port UART1 +#define CFG_MSGOUT_UBX_NAV_STATUS_UART2 0x2091001c // Output rate of the UBX-NAV-STATUS message on port UART2 +#define CFG_MSGOUT_UBX_NAV_STATUS_USB 0x2091001d // Output rate of the UBX-NAV-STATUS message on port USB +#define CFG_MSGOUT_UBX_NAV_SVIN_I2C 0x20910088 // Output rate of the UBX-NAV-SVIN message on port I2C +#define CFG_MSGOUT_UBX_NAV_SVIN_SPI 0x2091008c // Output rate of the UBX-NAV-SVIN message on port SPI +#define CFG_MSGOUT_UBX_NAV_SVIN_UART1 0x20910089 // Output rate of the UBX-NAV-SVIN message on port UART1 +#define CFG_MSGOUT_UBX_NAV_SVIN_UART2 0x2091008a // Output rate of the UBX-NAV-SVIN message on port UART2 +#define CFG_MSGOUT_UBX_NAV_SVIN_USB 0x2091008b // Output rate of the UBX-NAV-SVIN message on port USB +#define CFG_MSGOUT_UBX_NAV_TIMEBDS_I2C 0x20910051 // Output rate of the UBX-NAV-TIMEBDS message on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMEBDS_SPI 0x20910055 // Output rate of the UBX-NAV-TIMEBDS message on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMEBDS_UART1 0x20910052 // Output rate of the UBX-NAV-TIMEBDS message on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMEBDS_UART2 0x20910053 // Output rate of the UBX-NAV-TIMEBDS message on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMEBDS_USB 0x20910054 // Output rate of the UBX-NAV-TIMEBDS message on port USB +#define CFG_MSGOUT_UBX_NAV_TIMEGAL_I2C 0x20910056 // Output rate of the UBX-NAV-TIMEGAL message on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMEGAL_SPI 0x2091005a // Output rate of the UBX-NAV-TIMEGAL message on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMEGAL_UART1 0x20910057 // Output rate of the UBX-NAV-TIMEGAL message on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMEGAL_UART2 0x20910058 // Output rate of the UBX-NAV-TIMEGAL message on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMEGAL_USB 0x20910059 // Output rate of the UBX-NAV-TIMEGAL message on port USB +#define CFG_MSGOUT_UBX_NAV_TIMEGLO_I2C 0x2091004c // Output rate of the UBX-NAV-TIMEGLO message on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMEGLO_SPI 0x20910050 // Output rate of the UBX-NAV-TIMEGLO message on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMEGLO_UART1 0x2091004d // Output rate of the UBX-NAV-TIMEGLO message on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMEGLO_UART2 0x2091004e // Output rate of the UBX-NAV-TIMEGLO message on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMEGLO_USB 0x2091004f // Output rate of the UBX-NAV-TIMEGLO message on port USB +#define CFG_MSGOUT_UBX_NAV_TIMEGPS_I2C 0x20910047 // Output rate of the UBX-NAV-TIMEGPS message on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMEGPS_SPI 0x2091004b // Output rate of the UBX-NAV-TIMEGPS message on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMEGPS_UART1 0x20910048 // Output rate of the UBX-NAV-TIMEGPS message on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMEGPS_UART2 0x20910049 // Output rate of the UBX-NAV-TIMEGPS message on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMEGPS_USB 0x2091004a // Output rate of the UBX-NAV-TIMEGPS message on port USB +#define CFG_MSGOUT_UBX_NAV_TIMELS_I2C 0x20910060 // Output rate of the UBX-NAV-TIMELS message on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMELS_SPI 0x20910064 // Output rate of the UBX-NAV-TIMELS message on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMELS_UART1 0x20910061 // Output rate of the UBX-NAV-TIMELS message on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMELS_UART2 0x20910062 // Output rate of the UBX-NAV-TIMELS message on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMELS_USB 0x20910063 // Output rate of the UBX-NAV-TIMELS message on port USB +#define CFG_MSGOUT_UBX_NAV_TIMEQZSS_I2C 0x20910386 // Output rate of the UBX-NAV-TIMEQZSSmessage on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMEQZSS_SPI 0x2091038a // Output rate of the UBX-NAV-TIMEQZSSmessage on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMEQZSS_UART1 0x20910387 // Output rate of the UBX-NAV-TIMEQZSSmessage on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMEQZSS_UART2 0x20910388 // Output rate of the UBX-NAV-TIMEQZSSmessage on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMEQZSS_USB 0x20910389 // Output rate of the UBX-NAV-TIMEQZSSmessage on port USB +#define CFG_MSGOUT_UBX_NAV_TIMEUTC_I2C 0x2091005b // Output rate of the UBX-NAV-TIMEUTC message on port I2C +#define CFG_MSGOUT_UBX_NAV_TIMEUTC_SPI 0x2091005f // Output rate of the UBX-NAV-TIMEUTC message on port SPI +#define CFG_MSGOUT_UBX_NAV_TIMEUTC_UART1 0x2091005c // Output rate of the UBX-NAV-TIMEUTC message on port UART1 +#define CFG_MSGOUT_UBX_NAV_TIMEUTC_UART2 0x2091005d // Output rate of the UBX-NAV-TIMEUTC message on port UART2 +#define CFG_MSGOUT_UBX_NAV_TIMEUTC_USB 0x2091005e // Output rate of the UBX-NAV-TIMEUTC message on port USB +#define CFG_MSGOUT_UBX_NAV_VELECEF_I2C 0x2091003d // Output rate of the UBX-NAV-VELECEF message on port I2C +#define CFG_MSGOUT_UBX_NAV_VELECEF_SPI 0x20910041 // Output rate of the UBX-NAV-VELECEF message on port SPI +#define CFG_MSGOUT_UBX_NAV_VELECEF_UART1 0x2091003e // Output rate of the UBX-NAV-VELECEF message on port UART1 +#define CFG_MSGOUT_UBX_NAV_VELECEF_UART2 0x2091003f // Output rate of the UBX-NAV-VELECEF message on port UART2 +#define CFG_MSGOUT_UBX_NAV_VELECEF_USB 0x20910040 // Output rate of the UBX-NAV-VELECEF message on port USB +#define CFG_MSGOUT_UBX_NAV_VELNED_I2C 0x20910042 // Output rate of the UBX-NAV-VELNED message on port I2C +#define CFG_MSGOUT_UBX_NAV_VELNED_SPI 0x20910046 // Output rate of the UBX-NAV-VELNED message on port SPI +#define CFG_MSGOUT_UBX_NAV_VELNED_UART1 0x20910043 // Output rate of the UBX-NAV-VELNED message on port UART1 +#define CFG_MSGOUT_UBX_NAV_VELNED_UART2 0x20910044 // Output rate of the UBX-NAV-VELNED message on port UART2 +#define CFG_MSGOUT_UBX_NAV_VELNED_USB 0x20910045 // Output rate of the UBX-NAV-VELNED message on port USB +#define CFG_MSGOUT_UBX_RXM_MEASX_I2C 0x20910204 // Output rate of the UBX-RXM-MEASX message on port I2C +#define CFG_MSGOUT_UBX_RXM_MEASX_SPI 0x20910208 // Output rate of the UBX-RXM-MEASX message on port SPI +#define CFG_MSGOUT_UBX_RXM_MEASX_UART1 0x20910205 // Output rate of the UBX-RXM-MEASX message on port UART1 +#define CFG_MSGOUT_UBX_RXM_MEASX_UART2 0x20910206 // Output rate of the UBX-RXM-MEASX message on port UART2 +#define CFG_MSGOUT_UBX_RXM_MEASX_USB 0x20910207 // Output rate of the UBX-RXM-MEASX message on port USB +#define CFG_MSGOUT_UBX_RXM_RAWX_I2C 0x209102a4 // Output rate of the UBX-RXM-RAWX message on port I2C +#define CFG_MSGOUT_UBX_RXM_RAWX_SPI 0x209102a8 // Output rate of the UBX-RXM-RAWX message on port SPI +#define CFG_MSGOUT_UBX_RXM_RAWX_UART1 0x209102a5 // Output rate of the UBX-RXM-RAWX message on port UART1 +#define CFG_MSGOUT_UBX_RXM_RAWX_UART2 0x209102a6 // Output rate of the UBX-RXM-RAWX message on port UART2 +#define CFG_MSGOUT_UBX_RXM_RAWX_USB 0x209102a7 // Output rate of the UBX-RXM-RAWX message on port USB +#define CFG_MSGOUT_UBX_RXM_RLM_I2C 0x2091025e // Output rate of the UBX-RXM-RLM message on port I2C +#define CFG_MSGOUT_UBX_RXM_RLM_SPI 0x20910262 // Output rate of the UBX-RXM-RLM message on port SPI +#define CFG_MSGOUT_UBX_RXM_RLM_UART1 0x2091025f // Output rate of the UBX-RXM-RLM message on port UART1 +#define CFG_MSGOUT_UBX_RXM_RLM_UART2 0x20910260 // Output rate of the UBX-RXM-RLM message on port UART2 +#define CFG_MSGOUT_UBX_RXM_RLM_USB 0x20910261 // Output rate of the UBX-RXM-RLM message on port USB +#define CFG_MSGOUT_UBX_RXM_RTCM_I2C 0x20910268 // Output rate of the UBX-RXM-RTCM message on port I2C +#define CFG_MSGOUT_UBX_RXM_RTCM_SPI 0x2091026c // Output rate of the UBX-RXM-RTCM message on port SPI +#define CFG_MSGOUT_UBX_RXM_RTCM_UART1 0x20910269 // Output rate of the UBX-RXM-RTCM message on port UART1 +#define CFG_MSGOUT_UBX_RXM_RTCM_UART2 0x2091026a // Output rate of the UBX-RXM-RTCM message on port UART2 +#define CFG_MSGOUT_UBX_RXM_RTCM_USB 0x2091026b // Output rate of the UBX-RXM-RTCM message on port USB +#define CFG_MSGOUT_UBX_RXM_SFRBX_I2C 0x20910231 // Output rate of the UBX-RXM-SFRBX message on port I2C +#define CFG_MSGOUT_UBX_RXM_SFRBX_SPI 0x20910235 // Output rate of the UBX-RXM-SFRBX message on port SPI +#define CFG_MSGOUT_UBX_RXM_SFRBX_UART1 0x20910232 // Output rate of the UBX-RXM-SFRBX message on port UART1 +#define CFG_MSGOUT_UBX_RXM_SFRBX_UART2 0x20910233 // Output rate of the UBX-RXM-SFRBX message on port UART2 +#define CFG_MSGOUT_UBX_RXM_SFRBX_USB 0x20910234 // Output rate of the UBX-RXM-SFRBX message on port USB +#define CFG_MSGOUT_UBX_TIM_TM2_I2C 0x20910178 // Output rate of the UBX-TIM-TM2 message on port I2C +#define CFG_MSGOUT_UBX_TIM_TM2_SPI 0x2091017c // Output rate of the UBX-TIM-TM2 message on port SPI +#define CFG_MSGOUT_UBX_TIM_TM2_UART1 0x20910179 // Output rate of the UBX-TIM-TM2 message on port UART1 +#define CFG_MSGOUT_UBX_TIM_TM2_UART2 0x2091017a // Output rate of the UBX-TIM-TM2 message on port UART2 +#define CFG_MSGOUT_UBX_TIM_TM2_USB 0x2091017b // Output rate of the UBX-TIM-TM2 message on port USB +#define CFG_MSGOUT_UBX_TIM_TP_I2C 0x2091017d // Output rate of the UBX-TIM-TP message on port I2C +#define CFG_MSGOUT_UBX_TIM_TP_SPI 0x20910181 // Output rate of the UBX-TIM-TP message on port SPI +#define CFG_MSGOUT_UBX_TIM_TP_UART1 0x2091017e // Output rate of the UBX-TIM-TP message on port UART1 +#define CFG_MSGOUT_UBX_TIM_TP_UART2 0x2091017f // Output rate of the UBX-TIM-TP message on port UART2 +#define CFG_MSGOUT_UBX_TIM_TP_USB 0x20910180 // Output rate of the UBX-TIM-TP message on port USB +#define CFG_MSGOUT_UBX_TIM_VRFY_I2C 0x20910092 // Output rate of the UBX-TIM-VRFY message on port I2C +#define CFG_MSGOUT_UBX_TIM_VRFY_SPI 0x20910096 // Output rate of the UBX-TIM-VRFY message on port SPI +#define CFG_MSGOUT_UBX_TIM_VRFY_UART1 0x20910093 // Output rate of the UBX-TIM-VRFY message on port UART1 +#define CFG_MSGOUT_UBX_TIM_VRFY_UART2 0x20910094 // Output rate of the UBX-TIM-VRFY message on port UART2 +#define CFG_MSGOUT_UBX_TIM_VRFY_USB 0x20910095 // Output rate of the UBX-TIM-VRFY message on port USB +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +#endif