Explorar o código

Add CFG_HNR

- Tune GEOFENCE
Alexey Edelev %!s(int64=5) %!d(string=hai) anos
pai
achega
87c320b56c
Modificáronse 3 ficheiros con 59 adicións e 6 borrados
  1. 27 3
      ubx.c
  2. 5 3
      ubxcfg.h
  3. 27 0
      ubxmessage.h

+ 27 - 3
ubx.c

@@ -676,9 +676,9 @@ extern UBXMsgBuffer getCFG_GEOFENCE_POLL()
 
 extern UBXMsgBuffer getCFG_GEOFENCE(UBXU1_t version,
                                     UBXU1_t numFences,
-                                    UBXU1_t confLvl,
-                                    UBXU1_t pioEnabled,
-                                    UBXU1_t pinPolarity,
+                                    UBXCFGGEOFENCEConfidenceLevel confLvl,
+                                    UBXCFGGEOFENCEPIOState pioEnabled,
+                                    UBXCFGGEOFENCEPinPolarity pinPolarity,
                                     UBXU1_t pin,
                                     UBXCFG_GEOFENCE_PART* fences)
 {
@@ -689,14 +689,38 @@ extern UBXMsgBuffer getCFG_GEOFENCE(UBXU1_t version,
     msg->payload.CFG_GEOFENCE.version = version;
     msg->payload.CFG_GEOFENCE.numFences = numFences;
     msg->payload.CFG_GEOFENCE.confLvl = confLvl;
+    memset(msg->payload.CFG_GEOFENCE.reserved1, 0, sizeof(msg->payload.CFG_GEOFENCE.reserved1));
     msg->payload.CFG_GEOFENCE.pioEnabled = pioEnabled;
     msg->payload.CFG_GEOFENCE.pinPolarity = pinPolarity;
     msg->payload.CFG_GEOFENCE.pin = pin;
+    memset(msg->payload.CFG_GEOFENCE.reserved2, 0, sizeof(msg->payload.CFG_GEOFENCE.reserved2));
     memcpy(msg->payload.CFG_GEOFENCE.fence, fences, numFences * sizeof(UBXCFG_GEOFENCE_PART));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }
 
+extern UBXMsgBuffer getCFG_HNR_POLL()
+{
+    int payloadSize = 0;
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_HNR);
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
+extern UBXMsgBuffer getCFG_HNR(UBXU1_t highNavRate)
+{
+    int payloadSize = 0;
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_HNR);
+    msg->payload.CFG_HNR.highNavRate = highNavRate;
+    memset(msg->payload.CFG_HNR.reserved1, 0, sizeof(msg->payload.CFG_HNR.reserved1));
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 UBXMsgBuffer getCFG_GNSS_POLL()
 {
     int payloadSize = 0;

+ 5 - 3
ubxcfg.h

@@ -75,11 +75,13 @@ extern UBXMsgBuffer getCFG_ESRC(UBXU1_t version,
 extern UBXMsgBuffer getCFG_GEOFENCE_POLL();
 extern UBXMsgBuffer getCFG_GEOFENCE(UBXU1_t version,
                                     UBXU1_t numFences,
-                                    UBXU1_t confLvl,
-                                    UBXU1_t pioEnabled,
-                                    UBXU1_t pinPolarity,
+                                    UBXCFGGEOFENCEConfidenceLevel confLvl,
+                                    UBXCFGGEOFENCEPIOState pioEnabled,
+                                    UBXCFGGEOFENCEPinPolarity pinPolarity,
                                     UBXU1_t pin,
                                     UBXCFG_GEOFENCE_PART* fences);
+extern UBXMsgBuffer getCFG_HNR_POLL();
+extern UBXMsgBuffer getCFG_HNR(UBXU1_t highNavRate);
 extern UBXMsgBuffer getCFG_GNSS_POLL();
 extern UBXMsgBuffer getCFG_GNSS(UBXU1_t msgVer,
                                 UBXU1_t numTrkChHw,

+ 27 - 0
ubxmessage.h

@@ -381,6 +381,27 @@ typedef enum
     UBXCFGESRCgnssUtc = 1 << 1
 } UBXCFGESRCFlags;
 
+typedef enum
+{
+    UBXCFGGEOFENCEConfidenceLevel0 = 0,
+    UBXCFGGEOFENCEConfidenceLevel1 = 1,
+    UBXCFGGEOFENCEConfidenceLevel2 = 3,
+    UBXCFGGEOFENCEConfidenceLevel3 = 4,
+    UBXCFGGEOFENCEConfidenceLevel4 = 5
+} UBXCFGGEOFENCEConfidenceLevel;
+
+typedef enum
+{
+    UBXCFGGEOFENCEPIODisabled = 0,
+    UBXCFGGEOFENCEPIOEnabled = 1
+} UBXCFGGEOFENCEPIOState;
+
+typedef enum
+{
+    UBXCFGGEOFENCELowInside = 0,
+    UBXCFGGEOFENCELowOutside = 1
+} UBXCFGGEOFENCEPinPolarity;
+
 typedef enum
 {
     //CFG_CFG message
@@ -1173,6 +1194,11 @@ typedef struct {
     UBXCFG_GEOFENCE_PART fence[0];
 } UBXCFG_GEOFENCE;
 
+typedef struct {
+    UBXU1_t highNavRate;
+    UBXU1_t reserved1[3];
+} UBXCFG_HNR;
+
 //typedef struct {
     //No payload
 //} UBXCFG_GNSS_POLL;
@@ -2225,6 +2251,7 @@ typedef union
     UBXCFG_ESRC CFG_ESRC;
     UBXCFG_GEOFENCE CFG_GEOFENCE;
     UBXCFG_GNSS CFG_GNSS;
+    UBXCFG_HNR CFG_HNR;
     UBXCFG_INF_POLL CFG_INF_POLL;
     UBXCFG_INF CFG_INF;
     UBXCFG_ITFM CFG_ITFM;