Browse Source

Begin integration of new protocols

- Begin integration of protocols v15-20.30 v22-23.01
- Implement CFG_BATCH
- Implement CFG_DGNSS
Alexey Edelev 5 years ago
parent
commit
8adbfb6763
6 changed files with 342 additions and 166 deletions
  1. 92 30
      ubx.c
  2. 39 36
      ubxaid.h
  3. 85 76
      ubxcfg.h
  4. 9 9
      ubxlog.h
  5. 110 8
      ubxmessage.h
  6. 7 7
      ubxrxm.h

+ 92 - 30
ubx.c

@@ -110,7 +110,7 @@ UBXMsgBuffer getAID_ALPSRV(UBXMsg* clientMgs, const UBXAlpFileInfo *fileInfo)
 UBXMsgBuffer getCFG_MSG_POLL(UBXMessageClass msgClass, UBXMessageId msgId)
 {
     int payloadSize = sizeof(UBXCFG_MSG_POLL);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_MSG);
     msg->payload.CFG_MSG_POLL.msgClass = msgClass;
@@ -122,7 +122,7 @@ UBXMsgBuffer getCFG_MSG_POLL(UBXMessageClass msgClass, UBXMessageId msgId)
 UBXMsgBuffer getCFG_MSG_RATE(UBXMessageClass msgClass, UBXMessageId msgId, UBXU1_t rate)
 {
     int payloadSize = sizeof(UBXCFG_MSG_RATE);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_MSG);
     msg->payload.CFG_MSG_RATE.msgClass = msgClass;
@@ -135,12 +135,12 @@ UBXMsgBuffer getCFG_MSG_RATE(UBXMessageClass msgClass, UBXMessageId msgId, UBXU1
 UBXMsgBuffer getCFG_MSG_RATES(UBXMessageClass msgClass, UBXMessageId msgId, UBXU1_t rate[])
 {
     int payloadSize = sizeof(UBXCFG_MSG_RATES);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_MSG);
     msg->payload.CFG_MSG_RATES.msgClass = msgClass;
     msg->payload.CFG_MSG_RATES.msgId = msgId;
-    memcpy(msg->payload.CFG_MSG_RATES.rate, rate, 6*sizeof(UBXU1_t));
+    memcpy(msg->payload.CFG_MSG_RATES.rate, rate, 6 * sizeof(UBXU1_t));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -148,7 +148,7 @@ UBXMsgBuffer getCFG_MSG_RATES(UBXMessageClass msgClass, UBXMessageId msgId, UBXU
 UBXMsgBuffer getCFG_RST(int mode, UBXU2_t mask)
 {
     int payloadSize = sizeof(UBXCFG_RST);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RST);
     msg->payload.CFG_RST.resetMode = mode;
@@ -160,7 +160,7 @@ UBXMsgBuffer getCFG_RST(int mode, UBXU2_t mask)
 UBXMsgBuffer getCFG_RST_OPT(int mode, UBXBBRSpecialSets special)
 {
     int payloadSize = sizeof(UBXCFG_RST);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RST);
     msg->payload.CFG_RST.resetMode = mode;
@@ -172,7 +172,7 @@ UBXMsgBuffer getCFG_RST_OPT(int mode, UBXBBRSpecialSets special)
 UBXMsgBuffer getCFG_TP5_POLL_OPT(UBXCFGTimepulses tpIdx)
 {
     int payloadSize = sizeof(UBXCFG_TP5_POLL_OPT);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_TP5);
     msg->payload.CFG_TP5_POLL_OPT.tpIdx = tpIdx;
@@ -182,10 +182,10 @@ UBXMsgBuffer getCFG_TP5_POLL_OPT(UBXCFGTimepulses tpIdx)
 
 UBXMsgBuffer getCFG_TP5(UBXCFGTimepulses tpIdx, UBXI2_t antCableDelay, UBXI2_t rfGroupDelay,
                                UBXU4_t freqPeriod, UBXU4_t freqPeriodLock, UBXU4_t pulseLenRatio,
-                               UBXU4_t pulseLenRatioLock, UBXU4_t userConfigDelay, UBXU4_t flags)
+                               UBXU4_t pulseLenRatioLock, UBXI4_t userConfigDelay, UBXU4_t flags)
 {
     int payloadSize = sizeof(UBXCFG_TP5);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_TP5);
     msg->payload.CFG_TP5.tpIdx = tpIdx;
@@ -204,7 +204,7 @@ UBXMsgBuffer getCFG_TP5(UBXCFGTimepulses tpIdx, UBXI2_t antCableDelay, UBXI2_t r
 UBXMsgBuffer getAID_ALM_POLL()
 {
     int payloadSize = 0;
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
     completeMsg(&buffer, payloadSize);
@@ -214,7 +214,7 @@ UBXMsgBuffer getAID_ALM_POLL()
 UBXMsgBuffer getAID_ALM_POLL_OPT(UBXU1_t svid)
 {
     int payloadSize = sizeof(UBXAID_ALM_POLL_OPT);
-    UBXMsgBuffer buffer  = createBuffer(payloadSize);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
     msg->payload.AID_ALM_POLL_OPT.svid = svid;
@@ -242,7 +242,7 @@ UBXMsgBuffer getAID_ALM_OPT(UBXU4_t svid, UBXU4_t week, UBXU4_t dwrd[8])
     initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALM);
     msg->payload.AID_ALM_OPT.svid = svid;
     msg->payload.AID_ALM_OPT.week = week;
-    memcpy(msg->payload.AID_ALM_OPT.dwrd, dwrd, 8*sizeof(UBXU4_t));
+    memcpy(msg->payload.AID_ALM_OPT.dwrd, dwrd, 8 * sizeof(UBXU4_t));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -318,7 +318,7 @@ UBXMsgBuffer getAID_AOP(UBXU1_t svid, UBXU1_t data[59])
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_AOP);
     msg->payload.AID_AOP.svid = svid;
-    memcpy(msg->payload.AID_AOP.data, data, 59*sizeof(UBXU1_t));
+    memcpy(msg->payload.AID_AOP.data, data, 59 * sizeof(UBXU1_t));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -330,10 +330,10 @@ UBXMsgBuffer getAID_AOP_OPT(UBXU1_t svid, UBXU1_t data[59], UBXU1_t optional0[48
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_AOP);
     msg->payload.AID_AOP_OPT.svid = svid;
-    memcpy(msg->payload.AID_AOP_OPT.data, data, 59*sizeof(UBXU1_t));
-    memcpy(msg->payload.AID_AOP_OPT.optional0, optional0, 48*sizeof(UBXU1_t));
-    memcpy(msg->payload.AID_AOP_OPT.optional1, optional1, 48*sizeof(UBXU1_t));
-    memcpy(msg->payload.AID_AOP_OPT.optional2, optional2, 48*sizeof(UBXU1_t));
+    memcpy(msg->payload.AID_AOP_OPT.data, data, 59 * sizeof(UBXU1_t));
+    memcpy(msg->payload.AID_AOP_OPT.optional0, optional0, 48 * sizeof(UBXU1_t));
+    memcpy(msg->payload.AID_AOP_OPT.optional1, optional1, 48 * sizeof(UBXU1_t));
+    memcpy(msg->payload.AID_AOP_OPT.optional2, optional2, 48 * sizeof(UBXU1_t));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -389,9 +389,9 @@ UBXMsgBuffer getAID_EPH_OPT(UBXU4_t svid, UBXU4_t how, UBXU4_t sf1d[8], UBXU4_t
     initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_EPH);
     msg->payload.AID_EPH_OPT.svid = svid;
     msg->payload.AID_EPH_OPT.how = how;
-    memcpy(msg->payload.AID_EPH_OPT.sf1d, sf1d, 8*sizeof(UBXU4_t));
-    memcpy(msg->payload.AID_EPH_OPT.sf2d, sf2d, 8*sizeof(UBXU4_t));
-    memcpy(msg->payload.AID_EPH_OPT.sf3d, sf3d, 8*sizeof(UBXU4_t));
+    memcpy(msg->payload.AID_EPH_OPT.sf1d, sf1d, 8 * sizeof(UBXU4_t));
+    memcpy(msg->payload.AID_EPH_OPT.sf2d, sf2d, 8 * sizeof(UBXU4_t));
+    memcpy(msg->payload.AID_EPH_OPT.sf3d, sf3d, 8 * sizeof(UBXU4_t));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -508,6 +508,36 @@ UBXMsgBuffer getCFG_ANT_POLL()
     return buffer;
 }
 
+UBXMsgBuffer getCFG_BATCH(UBXU1_t version,
+              UBXX1_t flags,
+              UBXU2_t bufSize,
+              UBXU2_t notifThrs,
+              UBXU1_t pioId)
+{
+    int payloadSize = sizeof(UBXCFG_BATCH);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_BATCH);
+    msg->payload.CFG_BATCH.version = version;
+    msg->payload.CFG_BATCH.flags = flags;
+    msg->payload.CFG_BATCH.bufSize = bufSize;
+    msg->payload.CFG_BATCH.notifThrs = notifThrs;
+    msg->payload.CFG_BATCH.pioId = pioId;
+    msg->payload.CFG_BATCH.reserved1 = 0;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
+extern UBXMsgBuffer getCFG_BATCH_POLL()
+{
+    int payloadSize = 0;
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_BATCH);
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 UBXMsgBuffer getCFG_CFG(UBXX4_t clearMask, UBXX4_t saveMask, UBXX4_t loadMask)
 {
     int payloadSize = sizeof(UBXCFG_CFG);
@@ -564,6 +594,28 @@ UBXMsgBuffer getCFG_DAT_POLL()
     return buffer;
 }
 
+extern UBXMsgBuffer getCFG_DGNSS_POLL()
+{
+    int payloadSize = 0;
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_DGNSS);
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
+extern UBXMsgBuffer getCFG_DGNSS(UBXU1_t dgnssMode)
+{
+    int payloadSize = sizeof(UBXCFG_DGNSS);
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_DGNSS);
+    msg->payload.CFG_DGNSS.dgnssMode = dgnssMode;
+    memset(msg->payload.CFG_DGNSS.reserved1, 0, sizeof(msg->payload.CFG_DGNSS));
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 UBXMsgBuffer getCFG_GNSS_POLL()
 {
     int payloadSize = 0;
@@ -588,7 +640,7 @@ UBXMsgBuffer getCFG_GNSS(UBXU1_t msgVer,
     msg->payload.CFG_GNSS.numTrkChHw = numTrkChHw;
     msg->payload.CFG_GNSS.numTrkChUse = numTrkChUse;
     msg->payload.CFG_GNSS.numConfigBlocks = numConfigBlocks;
-    memcpy(((char*)&(msg->payload.CFG_GNSS)) + sizeof(UBXCFG_GNSS), gnssPart, numConfigBlocks*sizeof(UBXCFG_GNSS_PART));
+    memcpy(((char*)&(msg->payload.CFG_GNSS)) + sizeof(UBXCFG_GNSS), gnssPart, numConfigBlocks * sizeof(UBXCFG_GNSS_PART));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -606,11 +658,11 @@ UBXMsgBuffer getCFG_INF_POLL(UBXU1_t protocolId)
 
 UBXMsgBuffer getCFG_INF(UBXCFG_INF_PART* infPart, int infPartCount)
 {
-    int payloadSize = sizeof(UBXCFG_INF_PART)*infPartCount;
+    int payloadSize = sizeof(UBXCFG_INF_PART) * infPartCount;
     UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_INF);
-    memcpy(&(msg->payload.CFG_INF), infPart, infPartCount*sizeof(UBXCFG_INF_PART));
+    memcpy(&(msg->payload.CFG_INF), infPart, infPartCount * sizeof(UBXCFG_INF_PART));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -927,12 +979,12 @@ UBXMsgBuffer getCFG_RATE(UBXU2_t measRate, UBXU2_t navRate, UBXU2_t timeRef)
 
 UBXMsgBuffer getCFG_RINV(UBXX1_t flags, UBXU1_t* data, int dataSize)
 {
-    int payloadSize = sizeof(UBXCFG_RINV) + dataSize*sizeof(UBXU1_t);
+    int payloadSize = sizeof(UBXCFG_RINV) + dataSize * sizeof(UBXU1_t);
     UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RINV);
     msg->payload.CFG_RINV.flags = flags;
-    memcpy(((char*)&(msg->payload.CFG_RINV)) + sizeof(UBXCFG_RINV), data, dataSize*sizeof(UBXU1_t));
+    memcpy(((char*)&(msg->payload.CFG_RINV)) + sizeof(UBXCFG_RINV), data, dataSize * sizeof(UBXU1_t));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -1035,13 +1087,13 @@ UBXMsgBuffer getCFG_USB(UBXU2_t vendorId,
     msg->payload.CFG_USB.reserved2 = 1;
     msg->payload.CFG_USB.powerConsumption = powerConsumption;
     msg->payload.CFG_USB.flags = flags;
-    vendorStringSize = strlen(vendorString)>32?32:strlen(vendorString);
+    vendorStringSize = strlen(vendorString) > 32 ? 32 : strlen(vendorString);
     memcpy(msg->payload.CFG_USB.vendorString, vendorString, vendorStringSize);
 
-    productStringSize = strlen(productString)>32?32:strlen(productString);
+    productStringSize = strlen(productString) > 32 ? 32 : strlen(productString);
     memcpy(msg->payload.CFG_USB.productString, productString, productStringSize);
 
-    serialNumberSize = strlen(serialNumber)>32?32:strlen(serialNumber);
+    serialNumberSize = strlen(serialNumber) > 32 ? 32 : strlen(serialNumber);
     memcpy(msg->payload.CFG_USB.serialNumber, serialNumber, serialNumberSize);
 
     completeMsg(&buffer, payloadSize);
@@ -1198,7 +1250,7 @@ UBXMsgBuffer getRXM_SVSI(UBXU4_t iTOW,
                                 UBXRXM_SVSI_PART* svsiPart,
                                 int svsiPartCount)
 {
-    int payloadSize = sizeof(UBXRXM_SVSI) + svsiPartCount*sizeof(UBXRXM_SVSI_PART);
+    int payloadSize = sizeof(UBXRXM_SVSI) + svsiPartCount * sizeof(UBXRXM_SVSI_PART);
     UBXMsgBuffer buffer = createBuffer(payloadSize);
     UBXMsg* msg = (UBXMsg*)buffer.data;
     initMsg(msg, payloadSize, UBXMsgClassRXM, UBXMsgIdRXM_SVSI);
@@ -1206,7 +1258,7 @@ UBXMsgBuffer getRXM_SVSI(UBXU4_t iTOW,
     msg->payload.RXM_SVSI.week = week;
     msg->payload.RXM_SVSI.numVis = numVis;
     msg->payload.RXM_SVSI.numSV = numSV;
-    memcpy(((char*)&(msg->payload.RXM_SVSI)) + sizeof(UBXRXM_SVSI), svsiPart, svsiPartCount*sizeof(UBXRXM_SVSI_PART));
+    memcpy(((char*)&(msg->payload.RXM_SVSI)) + sizeof(UBXRXM_SVSI), svsiPart, svsiPartCount * sizeof(UBXRXM_SVSI_PART));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
@@ -1241,14 +1293,24 @@ UBXMsgBuffer getRXM_SVSI(UBXU4_t iTOW,
  * Ack/Nack Messages: as replies to CFG Input Messages
  * \var UBXMsgClassCFG
  * Configuration Input Messages: Set Dynamic Model, Set DOP Mask, Set Baud Rate, etc.
+ * \var UBXMsgClassUPD
+ * Firmware   Update   Messages: Memory/Flash erase/write, Reboot, Flash identification, etc.
  * \var UBXMsgClassMON
  * Monitoring Messages: Comunication Status, CPU Load, Stack Usage, Task Status
  * \var UBXMsgClassAID
  * AssistNow Aiding Messages: Ephemeris, Almanac, other A-GPS data input
  * \var UBXMsgClassTIM
  * Timing Messages: Time Pulse Output, Timemark Results
+ * \var UBXMsgClassESF
+ * External Sensor Fusion Messages: External Sensor Measurements and Status Information
+ * \var UBXMsgClassMGA
+ * Multiple GNSS Assistance Messages: Assistance data for various GNSS
  * \var UBXMsgClassLOG
  * Logging Messages: Log creation, deletion, info and retrieval
+ * \var UBXMsgClassSEC
+ * Security Feature Messages
+ * \var UBXMsgClassHNR
+ * High Rate Navigation Results Messages: High rate time, position, speed, heading
  * \var UBXMsgClassInvalid
  * Default invalid message class
  */

+ 39 - 36
ubxaid.h

@@ -37,10 +37,13 @@ extern UBXMsgBuffer getAID_ALM_POLL();
 extern UBXMsgBuffer getAID_ALM_POLL_OPT(UBXU1_t svid);
 extern UBXMsgBuffer getAID_ALM(UBXU4_t svid, UBXU4_t week);
 extern UBXMsgBuffer getAID_ALM_OPT(UBXU4_t svid, UBXU4_t week, UBXU4_t dwrd[8]);
-extern UBXMsgBuffer getAID_ALPSRV(UBXMsg* clientMgs, const UBXAlpFileInfo *fileInfo);
-extern UBXMsgBuffer getAID_ALP_POLL(UBXU4_t predTow, UBXU4_t predDur, UBXI4_t age, UBXU2_t predWno, UBXU2_t almWno, UBXU1_t svs);
-extern UBXMsgBuffer getAID_ALP_END();
-extern UBXMsgBuffer getAID_ALP(UBXU2_t *chunk, int chunkSize);
+
+extern UBXMsgBuffer getAID_ALPSRV(UBXMsg* clientMgs, const UBXAlpFileInfo *fileInfo);//TODO: deprecated
+
+extern UBXMsgBuffer getAID_ALP_POLL(UBXU4_t predTow, UBXU4_t predDur, UBXI4_t age, UBXU2_t predWno, UBXU2_t almWno, UBXU1_t svs);//TODO: deprecated
+extern UBXMsgBuffer getAID_ALP_END();//TODO: deprecated
+extern UBXMsgBuffer getAID_ALP(UBXU2_t *chunk, int chunkSize);//TODO: deprecated
+
 extern UBXMsgBuffer getAID_AOP_POLL();
 extern UBXMsgBuffer getAID_AOP_POLL_OPT(UBXU1_t svid);
 extern UBXMsgBuffer getAID_AOP(UBXU1_t svid, UBXU1_t data[59]);
@@ -52,40 +55,40 @@ extern UBXMsgBuffer getAID_EPH(UBXU4_t svid, UBXU4_t how);
 extern UBXMsgBuffer getAID_EPH_OPT(UBXU4_t svid, UBXU4_t how, UBXU4_t sf1d[8], UBXU4_t sf2d[8], UBXU4_t sf3d[8]);
 extern UBXMsgBuffer getAID_HUI_POLL();
 extern UBXMsgBuffer getAID_HUI(UBXI4_t health,
-                                      UBXR4_t utcA0,
-                                      UBXR4_t utcA1,
-                                      UBXI4_t utcTOW,
-                                      UBXI2_t utcWNT,
-                                      UBXI2_t utcLS,
-                                      UBXI2_t utcWNF,
-                                      UBXI2_t utcDN,
-                                      UBXI2_t utcLSF,
-                                      UBXI2_t utcSpare,
-                                      UBXR4_t klobA0,
-                                      UBXR4_t klobA1,
-                                      UBXR4_t klobA2,
-                                      UBXR4_t klobA3,
-                                      UBXR4_t klobB0,
-                                      UBXR4_t klobB1,
-                                      UBXR4_t klobB2,
-                                      UBXR4_t klobB3,
-                                      UBXX2_t flags //See UBXHUIFlags to fill this field
-                                      );
+                               UBXR4_t utcA0,
+                               UBXR4_t utcA1,
+                               UBXI4_t utcTOW,
+                               UBXI2_t utcWNT,
+                               UBXI2_t utcLS,
+                               UBXI2_t utcWNF,
+                               UBXI2_t utcDN,
+                               UBXI2_t utcLSF,
+                               UBXI2_t utcSpare,
+                               UBXR4_t klobA0,
+                               UBXR4_t klobA1,
+                               UBXR4_t klobA2,
+                               UBXR4_t klobA3,
+                               UBXR4_t klobB0,
+                               UBXR4_t klobB1,
+                               UBXR4_t klobB2,
+                               UBXR4_t klobB3,
+                               UBXX2_t flags //See UBXHUIFlags to fill this field
+                               );
 extern UBXMsgBuffer getAID_INI_POLL();
 extern UBXMsgBuffer getAID_INI(UBXI1_t ecefXOrLat,
-                                      UBXI1_t ecefYOrLat,
-                                      UBXI1_t ecefZOrLat,
-                                      UBXU1_t posAcc,
-                                      UBXI1_t tmCfg, //See UBXINItmCfg to fill this field
-                                      UBXU2_t wnoOrDate,
-                                      UBXU4_t towOrDate,
-                                      UBXI4_t towNs,
-                                      UBXU4_t tAccMS,
-                                      UBXU4_t tAccNS,
-                                      UBXI4_t clkDOrFreq,
-                                      UBXU4_t clkDAccOrFreqAcc,
-                                      UBXX4_t flags //See UBXINIFlags to fill this field
-                                      );
+                               UBXI1_t ecefYOrLat,
+                               UBXI1_t ecefZOrLat,
+                               UBXU1_t posAcc,
+                               UBXI1_t tmCfg, //See UBXINItmCfg to fill this field
+                               UBXU2_t wnoOrDate,
+                               UBXU4_t towOrDate,
+                               UBXI4_t towNs,
+                               UBXU4_t tAccMS,
+                               UBXU4_t tAccNS,
+                               UBXI4_t clkDOrFreq,
+                               UBXU4_t clkDAccOrFreqAcc,
+                               UBXX4_t flags //See UBXINIFlags to fill this field
+                               );
 
 #ifdef __cplusplus
 }

+ 85 - 76
ubxcfg.h

@@ -36,92 +36,101 @@ extern "C"
 extern UBXMsgBuffer getCFG_ANT(UBXX2_t flags, //See UBXANTFlags to fill this field
                                       UBXANTPins pins);
 extern UBXMsgBuffer getCFG_ANT_POLL();
+extern UBXMsgBuffer getCFG_BATCH(UBXU1_t version,
+                                 UBXX1_t flags, //See UNXCFGBATCHFlags to fill this field
+                                 UBXU2_t bufSize,
+                                 UBXU2_t notifThrs,
+                                 UBXU1_t pioId);
+extern UBXMsgBuffer getCFG_BATCH_POLL();
+
 extern UBXMsgBuffer getCFG_CFG(UBXX4_t clearMask, //See UBXCFGMask to fill this field
-                                      UBXX4_t saveMask, //See UBXCFGMask to fill this field
-                                      UBXX4_t loadMask //See UBXCFGMask to fill this field
-                                      );
+                               UBXX4_t saveMask, //See UBXCFGMask to fill this field
+                               UBXX4_t loadMask //See UBXCFGMask to fill this field
+                               );
 extern UBXMsgBuffer getCFG_CFG_OPT(UBXX4_t clearMask, //See UBXCFGMask to fill this field
-                                          UBXX4_t saveMask, //See UBXCFGMask to fill this field
-                                          UBXX4_t loadMask, //See UBXCFGMask to fill this field
-                                          UBXX1_t deviceMask //See UBXCFGDeviceMask to fill this field
-                                          );
+                                   UBXX4_t saveMask, //See UBXCFGMask to fill this field
+                                   UBXX4_t loadMask, //See UBXCFGMask to fill this field
+                                   UBXX1_t deviceMask //See UBXCFGDeviceMask to fill this field
+                                   );
 extern UBXMsgBuffer getCFG_DAT_IN(UBXR8_t majA,
-                                         UBXR8_t flat,
-                                         UBXR4_t dX,
-                                         UBXR4_t dY,
-                                         UBXR4_t dZ,
-                                         UBXR4_t rotX,
-                                         UBXR4_t rotY,
-                                         UBXR4_t rotZ,
-                                         UBXR4_t scale);
+                                  UBXR8_t flat,
+                                  UBXR4_t dX,
+                                  UBXR4_t dY,
+                                  UBXR4_t dZ,
+                                  UBXR4_t rotX,
+                                  UBXR4_t rotY,
+                                  UBXR4_t rotZ,
+                                  UBXR4_t scale);
 extern UBXMsgBuffer getCFG_DAT_POLL();
+extern UBXMsgBuffer getCFG_DGNSS_POLL();
+extern UBXMsgBuffer getCFG_DGNSS(UBXU1_t dgnssMode);
 extern UBXMsgBuffer getCFG_GNSS_POLL();
 extern UBXMsgBuffer getCFG_GNSS(UBXU1_t msgVer,
-                                       UBXU1_t numTrkChHw,
-                                       UBXU1_t numTrkChUse,
-                                       UBXU1_t numConfigBlocks,
-                                       UBXCFG_GNSS_PART* gnssPart);
+                                UBXU1_t numTrkChHw,
+                                UBXU1_t numTrkChUse,
+                                UBXU1_t numConfigBlocks,
+                                UBXCFG_GNSS_PART* gnssPart);
 extern UBXMsgBuffer getCFG_INF_POLL(UBXU1_t protocolId);
 extern UBXMsgBuffer getCFG_INF(UBXCFG_INF_PART *infPart, int infPartCount);
 extern UBXMsgBuffer getCFG_ITFM_POLL();
 extern UBXMsgBuffer getCFG_ITFM(UBXITFMConfig config, UBXITFMConfig2 config2);
 extern UBXMsgBuffer getCFG_LOGFILTER_POLL();
 extern UBXMsgBuffer getCFG_LOGFILTER(UBXU1_t version,
-                                            UBXX1_t flags, //See UBXLOGFILTERFlags to fill this field
-                                            UBXU2_t minIterval,
-                                            UBXU2_t timeThreshold,
-                                            UBXU2_t speedThreshold,
-                                            UBXU4_t positionThreshold);
+                                     UBXX1_t flags, //See UBXLOGFILTERFlags to fill this field
+                                     UBXU2_t minIterval,
+                                     UBXU2_t timeThreshold,
+                                     UBXU2_t speedThreshold,
+                                     UBXU4_t positionThreshold);
 extern UBXMsgBuffer getCFG_MSG_POLL(UBXMessageClass msgClass, UBXMessageId msgId);
 extern UBXMsgBuffer getCFG_MSG_RATE(UBXMessageClass msgClass, UBXMessageId msgId, UBXU1_t rate);
 extern UBXMsgBuffer getCFG_MSG_RATES(UBXMessageClass msgClass, UBXMessageId msgId, UBXU1_t rate[6]);
 extern UBXMsgBuffer getCFG_NAV5_POLL();
 extern UBXMsgBuffer getCFG_NAV5(UBXX2_t mask, //See UBXNAV5Mask to fill this field
-                                       UBXNAV5Model dynModel,
-                                       UBXNAV5FixMode fixMode,
-                                       UBXI4_t fixedAlt,
-                                       UBXU4_t fixedAltVar,
-                                       UBXI1_t minElev,
-                                       UBXU2_t pDop,
-                                       UBXU2_t tDop,
-                                       UBXU2_t pAcc,
-                                       UBXU2_t tAcc,
-                                       UBXU1_t staticHoldThresh,
-                                       UBXU1_t dgpsTimeOut,
-                                       UBXU1_t cnoThreshNumSVs,
-                                       UBXU1_t cnoThresh);
+                                UBXNAV5Model dynModel,
+                                UBXNAV5FixMode fixMode,
+                                UBXI4_t fixedAlt,
+                                UBXU4_t fixedAltVar,
+                                UBXI1_t minElev,
+                                UBXU2_t pDop,
+                                UBXU2_t tDop,
+                                UBXU2_t pAcc,
+                                UBXU2_t tAcc,
+                                UBXU1_t staticHoldThresh,
+                                UBXU1_t dgpsTimeOut,
+                                UBXU1_t cnoThreshNumSVs,
+                                UBXU1_t cnoThresh);
 extern UBXMsgBuffer getCFG_NAVX5_POLL();
 extern UBXMsgBuffer getCFG_NAVX5(UBXU2_t version,
-                                        UBXX2_t mask1,//See UBXNAVX5Mask to fill this field
-                                        UBXU1_t minSVs,
-                                        UBXU1_t maxSVs,
-                                        UBXU1_t minCNO,
-                                        UBXU1_t iniFix3D,
-                                        UBXU2_t wknRollover,
-                                        UBXU1_t usePPP,
-                                        UBXU1_t aopCFG,// 0-disabled, 1 - enabled
-                                        UBXU1_t aopOrbMaxErr);
+                                 UBXX2_t mask1,//See UBXNAVX5Mask to fill this field
+                                 UBXU1_t minSVs,
+                                 UBXU1_t maxSVs,
+                                 UBXU1_t minCNO,
+                                 UBXU1_t iniFix3D,
+                                 UBXU2_t wknRollover,
+                                 UBXU1_t usePPP,
+                                 UBXU1_t aopCFG,// 0-disabled, 1 - enabled
+                                 UBXU1_t aopOrbMaxErr);
 extern UBXMsgBuffer getCFG_NMEA_POLL();
 extern UBXMsgBuffer getCFG_NMEA(UBXX1_t filter, //See UBXNMEAFilter to fill this field
-                                       UBXU1_t nmeaVersion,
-                                       UBXU1_t numSV,
-                                       UBXX1_t flags, //See UBXNMEAFlags to fill this field
-                                       UBXX4_t gnssToFilter, //See UBXNMEAGNSSToFilter to fill this field
-                                       UBXNMEASVNumbering svNumbering,
-                                       UBXNMEATalkerIds mainTalkerId,
-                                       UBXNMEAGSVTalkerIds gsvTalkerId);
+                                UBXU1_t nmeaVersion,
+                                UBXU1_t numSV,
+                                UBXX1_t flags, //See UBXNMEAFlags to fill this field
+                                UBXX4_t gnssToFilter, //See UBXNMEAGNSSToFilter to fill this field
+                                UBXNMEASVNumbering svNumbering,
+                                UBXNMEATalkerIds mainTalkerId,
+                                UBXNMEAGSVTalkerIds gsvTalkerId);
 extern UBXMsgBuffer getCFG_NVS(UBXX4_t clearMask, //See UBXCFGMask CFG_NVS section to fill this field
-                                      UBXX4_t saveMask, //See UBXCFGMask CFG_NVS section to fill this field
-                                      UBXX4_t loadMask, //See UBXCFGMask CFG_NVS section to fill this field
-                                      UBXX1_t deviceMask //See UBXCFGDeviceMask to fill this field
-                                      );
+                               UBXX4_t saveMask, //See UBXCFGMask CFG_NVS section to fill this field
+                               UBXX4_t loadMask, //See UBXCFGMask CFG_NVS section to fill this field
+                               UBXX1_t deviceMask //See UBXCFGDeviceMask to fill this field
+                               );
 extern UBXMsgBuffer getCFG_PM2_POLL();
 extern UBXMsgBuffer getCFG_PM2(UBXCFG_PM2Flags flags,
-                                      UBXU4_t updatePeriod,
-                                      UBXU4_t searchPeriod,
-                                      UBXU4_t gridOffset,
-                                      UBXU2_t onTime,
-                                      UBXU2_t minAcqTime);
+                               UBXU4_t updatePeriod,
+                               UBXU4_t searchPeriod,
+                               UBXU4_t gridOffset,
+                               UBXU2_t onTime,
+                               UBXU2_t minAcqTime);
 extern UBXMsgBuffer getCFG_PRT_POLL();
 extern UBXMsgBuffer getCFG_PRT_POLL_OPT(UBXU1_t portId);
 extern UBXMsgBuffer getCFG_PRT_UART();
@@ -135,28 +144,28 @@ extern UBXMsgBuffer getCFG_RINV_POLL();
 extern UBXMsgBuffer getCFG_RST(int mode, UBXU2_t mask);
 extern UBXMsgBuffer getCFG_RST_OPT(int mode, UBXBBRSpecialSets special);
 extern UBXMsgBuffer getCFG_RXM(UBXU1_t lpMode //See UBXRXMLowPowerModes to fill this field
-                                      );
+                               );
 extern UBXMsgBuffer getCFG_RXM_POLL();
 extern UBXMsgBuffer getCFG_SBAS_POLL();
 extern UBXMsgBuffer getCFG_SBAS(UBXX1_t mode, //See UBXSBASModes to fill this field
-                                       UBXX1_t usage, //See UBXSBASUsage to fill this field
-                                       UBXU1_t maxSBAS,
-                                       UBXX1_t scanmode2, //See UBXSBASScanModes2 to fill this field
-                                       UBXX4_t scanmode1 //See UBXSBASScanModes1 to fill this fields
-                                       );
+                                UBXX1_t usage, //See UBXSBASUsage to fill this field
+                                UBXU1_t maxSBAS,
+                                UBXX1_t scanmode2, //See UBXSBASScanModes2 to fill this field
+                                UBXX4_t scanmode1 //See UBXSBASScanModes1 to fill this fields
+                                );
 extern UBXMsgBuffer getCFG_TP5_POLL();
 extern UBXMsgBuffer getCFG_TP5_POLL_OPT(UBXCFGTimepulses tpIdx);
 extern UBXMsgBuffer getCFG_TP5(UBXCFGTimepulses tpIdx, UBXI2_t antCableDelay,  UBXI2_t rfGroupDelay,
-                                      UBXU4_t freqPeriod, UBXU4_t freqPeriodLock, UBXU4_t pulseLenRatio,
-                                      UBXU4_t pulseLenRatioLock, UBXU4_t userConfigDelay, UBXU4_t flags);
+                               UBXU4_t freqPeriod, UBXU4_t freqPeriodLock, UBXU4_t pulseLenRatio,
+                               UBXU4_t pulseLenRatioLock, UBXI4_t userConfigDelay, UBXU4_t flags);
 extern UBXMsgBuffer getCFG_USB_POLL();
 extern UBXMsgBuffer getCFG_USB(UBXU2_t vendorId,
-                                      UBXU2_t productId,
-                                      UBXU2_t powerConsumption,
-                                      UBXX2_t flags, //See UBXUSBFlags to fill this field
-                                      UBXCH_t* vendorString,
-                                      UBXCH_t* productString,
-                                      UBXCH_t* serialNumber);
+                               UBXU2_t productId,
+                               UBXU2_t powerConsumption,
+                               UBXX2_t flags, //See UBXUSBFlags to fill this field
+                               UBXCH_t* vendorString,
+                               UBXCH_t* productString,
+                               UBXCH_t* serialNumber);
 
 #ifdef __cplusplus
 }

+ 9 - 9
ubxlog.h

@@ -36,19 +36,19 @@ extern "C"
 
 
 extern UBXMsgBuffer getLOG_CREATE(UBXX1_t logCfg, //See UBXLOGCfg
-                                         UBXU1_t logSize,
-                                         UBXU4_t userDefinedSize);
+                                  UBXU1_t logSize,
+                                  UBXU4_t userDefinedSize);
 extern UBXMsgBuffer getLOG_ERASE();
 extern UBXMsgBuffer getLOG_FINDTIME_IN(UBXU2_t year,
-                                              UBXU1_t month,
-                                              UBXU1_t day,
-                                              UBXU1_t hour,
-                                              UBXU1_t minute,
-                                              UBXU1_t second);
+                                       UBXU1_t month,
+                                       UBXU1_t day,
+                                       UBXU1_t hour,
+                                       UBXU1_t minute,
+                                       UBXU1_t second);
 extern UBXMsgBuffer getLOG_INFO_POLL();
 extern UBXMsgBuffer getLOG_RETRIEVE(UBXU4_t startNumber,
-                                           UBXU4_t entryCount,
-                                           UBXU1_t version);
+                                    UBXU4_t entryCount,
+                                    UBXU1_t version);
 extern UBXMsgBuffer getLOG_STRING();
 
 #ifdef __cplusplus

+ 110 - 8
ubxmessage.h

@@ -54,6 +54,7 @@
 
 #if defined (__linux__)
 typedef u_int8_t  UBXU1_t;
+typedef u_int8_t  UBXRU1_3_t;
 typedef int8_t    UBXI1_t;
 typedef u_int8_t  UBXX1_t;
 typedef u_int16_t UBXU2_t;
@@ -67,6 +68,7 @@ typedef double    UBXR8_t;
 typedef char      UBXCH_t;
 #else
 typedef unsigned char  UBXU1_t;
+typedef unsigned char  UBXRU1_3_t;
 typedef char           UBXI1_t;
 typedef unsigned char  UBXX1_t;
 typedef unsigned short UBXU2_t;
@@ -91,10 +93,15 @@ typedef enum
     UBXMsgClassINF = 0x04,
     UBXMsgClassACK = 0x05,
     UBXMsgClassCFG = 0x06,
+    UBXMsgClassUPD = 0x09, //TODO: new in UBX8
     UBXMsgClassMON = 0x0A,
     UBXMsgClassAID = 0x0B,
     UBXMsgClassTIM = 0x0D,
+    UBXMsgClassESF = 0x10, //TODO: new in UBX8
+    UBXMsgClassMGA = 0x13, //TODO: new in UBX8
     UBXMsgClassLOG = 0x21,
+    UBXMsgClassSEC = 0x27, //TODO: new in UBX8
+    UBXMsgClassHNR = 0x28, //TODO: new in UBX8
     UBXMsgClassInvalid = 255
 } UBXMessageClass;
 
@@ -104,19 +111,25 @@ typedef enum
     UBXMsgIdACK_ACK = 0x01,
 
     UBXMsgIdAID_ALM = 0x30,
-    UBXMsgIdAID_ALPSRV = 0x32,
-    UBXMsgIdAID_ALP = 0x50,
+    UBXMsgIdAID_ALPSRV = 0x32, //TODO: deprecated
+    UBXMsgIdAID_ALP = 0x50, //TODO: deprecated
     UBXMsgIdAID_AOP = 0x33,
     UBXMsgIdAID_DATA = 0x10,
     UBXMsgIdAID_EPH = 0x31,
     UBXMsgIdAID_HUI = 0x02,
     UBXMsgIdAID_INI = 0x01,
-    UBXMsgIdAID_REQ = 0x00,
+    UBXMsgIdAID_REQ = 0x00, //TODO: deprecated
 
     UBXMsgIdCFG_ANT = 0x13,
+    UBXMsgIdCFG_BATCH = 0x93, //TODO: new in UBX8
     UBXMsgIdCFG_CFG = 0x09,
     UBXMsgIdCFG_DAT = 0x06,
+    UBXMsgIdCFG_DGNSS = 0x70, //TODO: new in UBX8
+    UBXMsgIdCFG_DOSC = 0x61, //TODO: new in UBX8
+    UBXMsgIdCFG_ESRC = 0x60, //TODO: new in UBX8
+    UBXMsgIdCFG_GEOFENCE = 0x69, //TODO: new in UBX8
     UBXMsgIdCFG_GNSS = 0x3E,
+    UBXMsgIdCFG_HNR = 0x5C, //TODO: new in UBX8
     UBXMsgIdCFG_INF = 0x02,
     UBXMsgIdCFG_ITFM = 0x39,
     UBXMsgIdCFG_LOGFILTER = 0x47,
@@ -124,68 +137,133 @@ typedef enum
     UBXMsgIdCFG_NAV5 = 0x24,
     UBXMsgIdCFG_NAVX5 = 0x23,
     UBXMsgIdCFG_NMEA = 0x17,
-    UBXMsgIdCFG_NVS = 0x22,
+    UBXMsgIdCFG_NVS = 0x22, //TODO: deprecated
+    UBXMsgIdCFG_ODO = 0x1E,
     UBXMsgIdCFG_PM2 = 0x3B,
+    UBXMsgIdCFG_PMS = 0x86, //TODO: new in UBX8
     UBXMsgIdCFG_PRT = 0x00,
+    UBXMsgIdCFG_PWR = 0x58, //TODO: new in UBX8
     UBXMsgIdCFG_RATE = 0x08,
     UBXMsgIdCFG_RINV = 0x34,
     UBXMsgIdCFG_RST = 0x04,
     UBXMsgIdCFG_RXM = 0x11,
     UBXMsgIdCFG_SBAS = 0x16,
+    UBXMsgIdCFG_SLAS = 0x8D, //TODO: new in UBX8
+    UBXMsgIdCFG_SMGR = 0x62, //TODO: new in UBX8
+    UBXMsgIdCFG_TMODE2 = 0x3D, //TODO: new in UBX8
+    UBXMsgIdCFG_TMODE3 = 0x71, //TODO: new in UBX8
     UBXMsgIdCFG_TP5 = 0x31,
+    UBXMsgIdCFG_TXSLOT = 0x53, //TODO: new in UBX8
     UBXMsgIdCFG_USB = 0x1B,
 
+    UBXMsgIdESF_INS = 0x15, //TODO: new in UBX8
+    UBXMsgIdESF_MEAS = 0x02, //TODO: new in UBX8
+    UBXMsgIdESF_RAW = 0x03, //TODO: new in UBX8
+    UBXMsgIdESF_STATUS = 0x10, //TODO: new in UBX8
+
+    UBXMsgIdHNR_INS = 0x02, //TODO: new in UBX8
+    UBXMsgIdHNR_PVT = 0x00, //TODO: new in UBX8
+
     UBXMsgIdINF_DEBUG = 0x04,
     UBXMsgIdINF_ERROR = 0x00,
     UBXMsgIdINF_NOTICE = 0x02,
     UBXMsgIdINF_TEST = 0x03,
     UBXMsgIdINF_WARNING = 0x01,
 
+    UBXMsgIdLOG_BATCH = 0x11, //TODO: new in UBX8
     UBXMsgIdLOG_CREATE = 0x07,
     UBXMsgIdLOG_ERASE = 0x03,
     UBXMsgIdLOG_FINDTIME = 0x0E,
     UBXMsgIdLOG_INFO = 0x08,
+    UBXMsgIdLOG_RETRIEVEBATCH = 0x10, //TODO: new in UBX8
+    UBXMsgIdLOG_RETRIEVEPOSEXTRA = 0x0f, //TODO: new in UBX8
     UBXMsgIdLOG_RETRIEVEPOS = 0x0B,
     UBXMsgIdLOG_RETRIEVESTRING = 0x0D,
     UBXMsgIdLOG_RETRIEVE = 0x09,
     UBXMsgIdLOG_STRING = 0x04,
 
+    UBXMsgIdMGA_ACK_DATA0 = 0x60, //TODO: new in UBX8
+    UBXMsgIdMGA_BDS = 0x03, //TODO: new in UBX8
+    UBXMsgIdMGA_DBD = 0x80, //TODO: new in UBX8
+    UBXMsgIdMGA_FLASH = 0x21, //TODO: new in UBX8
+    UBXMsgIdMGA_GAL = 0x02, //TODO: new in UBX8
+    UBXMsgIdMGA_GLO = 0x06, //TODO: new in UBX8
+    UBXMsgIdMGA_GPS = 0x00, //TODO: new in UBX8
+    UBXMsgIdMGA_INI = 0x40, //TODO: new in UBX8
+    UBXMsgIdMGA_QZSS = 0x05, //TODO: new in UBX8
+
+    UBXMsgIdMON_BATCH = 0x32, //TODO: new in UBX8
+    UBXMsgIdMON_GNSS = 0x28, //TODO: new in UBX8
     UBXMsgIdMON_HW2 = 0x0B,
     UBXMsgIdMON_HW = 0x09,
     UBXMsgIdMON_IO = 0x02,
     UBXMsgIdMON_MSGPP = 0x06,
+    UBXMsgIdMON_PATCH = 0x27, //TODO: new in UBX8
     UBXMsgIdMON_RXBUF = 0x07,
     UBXMsgIdMON_RXR = 0x21,
     UBXMsgIdMON_TXBUF = 0x08,
     UBXMsgIdMON_VER = 0x04,
 
     UBXMsgIdNAV_AOPSTATUS = 0x60,
+    UBXMsgIdNAV_ATT = 0x05, //TODO: new in UBX8
     UBXMsgIdNAV_CLOCK = 0x22,
     UBXMsgIdNAV_DGPS = 0x31,
     UBXMsgIdNAV_DOP = 0x04,
+    UBXMsgIdNAV_EOE = 0x61, //TODO: new in UBX8
+    UBXMsgIdNAV_GEOFENCE = 0x39, //TODO: new in UBX8
+    UBXMsgIdNAV_HPPOSECEF = 0x13, //TODO: new in UBX8
+    UBXMsgIdNAV_HPPOSLLH = 0x14, //TODO: new in UBX8
+    UBXMsgIdNAV_ODO = 0x09, //TODO: new in UBX8
+    UBXMsgIdNAV_ORB = 0x34, //TODO: new in UBX8
     UBXMsgIdNAV_POSECEF = 0x01,
     UBXMsgIdNAV_POSLLH = 0x02,
     UBXMsgIdNAV_PVT = 0x07,
+    UBXMsgIdNAV_RELPOSNED = 0x3C, //TODO: new in UBX8
+    UBXMsgIdNAV_RESETODO = 0x10, //TODO: new in UBX8
+    UBXMsgIdNAV_SAT = 0x35, //TODO: new in UBX8
     UBXMsgIdNAV_SBAS = 0x32,
+    UBXMsgIdNAV_SLAS = 0x42, //TODO: new in UBX8
     UBXMsgIdNAV_SOL = 0x06,
     UBXMsgIdNAV_STATUS = 0x03,
     UBXMsgIdNAV_SVINFO = 0x30,
+    UBXMsgIdNAV_SVIN = 0x3B, //TODO: new in UBX8
+    UBXMsgIdNAV_TIMEBDS = 0x24, //TODO: new in UBX8
+    UBXMsgIdNAV_TIMEGAL = 0x25, //TODO: new in UBX8
+    UBXMsgIdNAV_TIMEGLO = 0x23, //TODO: new in UBX8
     UBXMsgIdNAV_TIMEGPS = 0x20,
+    UBXMsgIdNAV_TIMELS = 0x26, //TODO: new in UBX8
     UBXMsgIdNAV_TIMEUTC = 0x21,
     UBXMsgIdNAV_VELECEF = 0x11,
     UBXMsgIdNAV_VELNED = 0x12,
 
-    UBXMsgIdRXM_ALM = 0x30,
-    UBXMsgIdRXM_EPH = 0x31,
+    UBXMsgIdRXM_ALM = 0x30, //TODO: deprecated
+    UBXMsgIdRXM_EPH = 0x31, //TODO: deprecated
+    UBXMsgIdRXM_IMES = 0x61, //TODO: new in UBX8
+    UBXMsgIdRXM_MEASX = 0x14, //TODO: new in UBX8
     UBXMsgIdRXM_PMREQ = 0x41,
-    UBXMsgIdRXM_RAW = 0x10,
-    UBXMsgIdRXM_SFRB = 0x11,
+    UBXMsgIdRXM_RAW = 0x10, //TODO: deprecated
+    UBXMsgIdRXM_RAWX = 0x15, //TODO: new in UBX8
+    UBXMsgIdRXM_RLM = 0x59, //TODO: new in UBX8
+    UBXMsgIdRXM_RTCM = 0x32, //TODO: new in UBX8
+    UBXMsgIdRXM_SFRB = 0x11, //TODO: deprecated
+    UBXMsgIdRXM_SFRBX = 0x13, //TODO: new in UBX8
     UBXMsgIdRXM_SVSI = 0x20,
 
+    UBXMsgIdSEC_UNIQID = 0x03, //TODO: new in UBX8
+
+    UBXMsgIdTIM_DOSC = 0x11, //TODO: new in UBX8
+    UBXMsgIdTIM_FCHG = 0x16, //TODO: new in UBX8
+    UBXMsgIdTIM_HOC = 0x17, //TODO: new in UBX8
+    UBXMsgIdTIM_SMEAS = 0x13, //TODO: new in UBX8
+    UBXMsgIdTIM_SVIN = 0x04, //TODO: new in UBX8
     UBXMsgIdTIM_TM2 = 0x03,
+    UBXMsgIdTIM_TOS = 0x12, //TODO: new in UBX8
     UBXMsgIdTIM_TP = 0x01,
+    UBXMsgIdTIM_VCOCAL = 0x15, //TODO: new in UBX8
     UBXMsgIdTIM_VRFY = 0x06,
 
+    UBXMsgIdUPD_SOS = 0x14, //TODO: new in UBX8
+
     UBXMsgIdInvalid = 0xFF
 } UBXMessageId;
 
@@ -259,6 +337,15 @@ typedef enum
     UBXANTrecovery = 1 << 4
 } UBXANTFlags;
 
+typedef enum
+{
+    UNXCFGBATCHenable = 1,
+    UNXCFGBATCHextraPvt = 1 << 2,
+    UNXCFGBATCHextraOdo = 1 << 3,
+    UNXCFGBATCHpioEnable = 1 << 5,
+    UNXCFGBATCHpioActiveLow = 1 << 6,
+} UNXCFGBATCHFlags;
+
 typedef enum
 {
     //CFG_CFG message
@@ -937,6 +1024,15 @@ typedef struct {
     UBXX4_t loadMask; //See UBXCFGMask to fill this field
 } UBXCFG_CFG;
 
+typedef struct {
+    UBXU1_t version;
+    UBXX1_t flags; //See UNXCFGBATCHFlags to fill this field
+    UBXU2_t bufSize;
+    UBXU2_t notifThrs;
+    UBXU1_t pioId;
+    UBXU1_t reserved1;
+} UBXCFG_BATCH;
+
 typedef struct {
     UBXX4_t clearMask; //See UBXCFGMask to fill this field
     UBXX4_t saveMask; //See UBXCFGMask to fill this field
@@ -974,6 +1070,10 @@ typedef struct {
     UBXR4_t scale;
 } UBXCFG_DAT_OUT;
 
+typedef struct {
+    UBXU1_t dgnssMode;
+    UBXU1_t reserved1[3];
+} UBXCFG_DGNSS;
 //typedef struct {
     //No payload
 //} UBXCFG_GNSS_POLL;
@@ -2018,10 +2118,12 @@ typedef union
     UBXAID_HUI AID_HUI;
     UBXAID_INI AID_INI;
     UBXCFG_ANT CFG_ANT;
+    UBXCFG_BATCH CFG_BATCH;
     UBXCFG_CFG CFG_CFG;
     UBXCFG_CFG_OPT CFG_CFG_OPT;
     UBXCFG_DAT_IN CFG_DAT_IN;
     UBXCFG_DAT_OUT CFG_DAT_OUT;
+    UBXCFG_DGNSS CFG_DGNSS;
     UBXCFG_GNSS CFG_GNSS;
     UBXCFG_INF_POLL CFG_INF_POLL;
     UBXCFG_INF CFG_INF;

+ 7 - 7
ubxrxm.h

@@ -39,14 +39,14 @@ extern UBXMsgBuffer getRXM_ALM_POLL_OPT(UBXU1_t svid);
 extern UBXMsgBuffer getRXM_EPH_POLL();
 extern UBXMsgBuffer getRXM_EPH_POLL_OPT(UBXU1_t svid);
 extern UBXMsgBuffer getRXM_PMREQ(UBXU4_t duration,
-                                        UBXX4_t flags //See UBXPMREQFlags to fill this field
-                                        );
+                                 UBXX4_t flags //See UBXPMREQFlags to fill this field
+                                 );
 extern UBXMsgBuffer getRXM_SVSI(UBXU4_t iTOW,
-                                       UBXI2_t week,
-                                       UBXU1_t numVis,
-                                       UBXU1_t numSV,
-                                       UBXRXM_SVSI_PART* svsiPart,
-                                       int svsiPartCount);
+                                UBXI2_t week,
+                                UBXU1_t numVis,
+                                UBXU1_t numSV,
+                                UBXRXM_SVSI_PART* svsiPart,
+                                int svsiPartCount);
 
 #ifdef __cplusplus
 }