Browse Source

Add CFG_DOSC

Alexey Edelev 5 years ago
parent
commit
614c1aa173
3 changed files with 79 additions and 10 deletions
  1. 24 1
      ubx.c
  2. 2 0
      ubxcfg.h
  3. 53 9
      ubxmessage.h

+ 24 - 1
ubx.c

@@ -616,6 +616,29 @@ extern UBXMsgBuffer getCFG_DGNSS(UBXU1_t dgnssMode)
     return buffer;
 }
 
+extern UBXMsgBuffer getCFG_DOSC_POLL()
+{
+    int payloadSize = 0;
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_DOSC);
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
+extern UBXMsgBuffer getCFG_DOSC(UBXU1_t version, UBXU1_t numOsc, UBXCFG_DOSC_CFG* oscCfg)
+{
+    int payloadSize = sizeof(UBXCFG_DOSC) + sizeof(UBXCFG_DOSC_CFG) * numOsc;
+    UBXMsgBuffer buffer = createBuffer(payloadSize);
+    UBXMsg* msg = (UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_DOSC);
+    msg->payload.CFG_DOSC.version = version;
+    msg->payload.CFG_DOSC.numOsc = numOsc;
+    memcpy(&(msg->payload.CFG_DOSC.cfg), oscCfg, numOsc * sizeof(UBXCFG_DOSC_CFG));
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 UBXMsgBuffer getCFG_GNSS_POLL()
 {
     int payloadSize = 0;
@@ -662,7 +685,7 @@ UBXMsgBuffer getCFG_INF(UBXCFG_INF_PART* infPart, int 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.inf), infPart, infPartCount * sizeof(UBXCFG_INF_PART));
     completeMsg(&buffer, payloadSize);
     return buffer;
 }

+ 2 - 0
ubxcfg.h

@@ -64,6 +64,8 @@ extern UBXMsgBuffer getCFG_DAT_IN(UBXR8_t majA,
 extern UBXMsgBuffer getCFG_DAT_POLL();
 extern UBXMsgBuffer getCFG_DGNSS_POLL();
 extern UBXMsgBuffer getCFG_DGNSS(UBXU1_t dgnssMode);
+extern UBXMsgBuffer getCFG_DOSC_POLL();
+extern UBXMsgBuffer getCFG_DOSC(UBXU1_t version, UBXU1_t numOsc, UBXCFG_DOSC_CFG* oscCfg);
 extern UBXMsgBuffer getCFG_GNSS_POLL();
 extern UBXMsgBuffer getCFG_GNSS(UBXU1_t msgVer,
                                 UBXU1_t numTrkChHw,

+ 53 - 9
ubxmessage.h

@@ -343,9 +343,30 @@ typedef enum
     UNXCFGBATCHextraPvt = 1 << 2,
     UNXCFGBATCHextraOdo = 1 << 3,
     UNXCFGBATCHpioEnable = 1 << 5,
-    UNXCFGBATCHpioActiveLow = 1 << 6,
+    UNXCFGBATCHpioActiveLow = 1 << 6
 } UNXCFGBATCHFlags;
 
+typedef enum
+{
+    isCalibrated = 1
+} UBXCFGDOSCFlags;
+
+typedef enum
+{
+  UBXOscilatorInternal = 0,
+  UBXOscilatorExternal = 1
+} UBXOscilatorType;
+
+typedef enum
+{
+    UBXCFGDOSCCustomDACAttachedI2C = 0,
+    UBXCFGDOSCMCP4726AttachedI2C = 1,
+    UBXCFGDOSCDAC8571AttachedI2C = 2,
+    UBXCFGDOSC12bitDAC = 13,
+    UBXCFGDOSC14bitDAC = 14,
+    UBXCFGDOSC16bitDAC = 15
+} UBXCFGDOSCControlInterface;
+
 typedef enum
 {
     //CFG_CFG message
@@ -1074,6 +1095,30 @@ typedef struct {
     UBXU1_t dgnssMode;
     UBXU1_t reserved1[3];
 } UBXCFG_DGNSS;
+
+
+typedef struct {
+    UBXU1_t oscId; //It likely to use UBXOscilatorType for this field
+    UBXU1_t reserved2;
+    UBXX2_t flags; //See UBXCFGDOSCFlags and UNXCFGBATCHFlags to fill this field
+    UBXU4_t freq;
+    UBXI4_t phaseOffset;
+    UBXU4_t withTemp;
+    UBXU4_t withAge;
+    UBXU2_t timeToTemp;
+    UBXU1_t reserved3[2];
+    UBXI4_t gainVco;
+    UBXU1_t gainUncertainty;
+    UBXU1_t reserved4[3];
+} UBXCFG_DOSC_CFG;
+
+typedef struct {
+    UBXU1_t version;
+    UBXU1_t numOsc;
+    UBXU1_t reserved1[2];
+    UBXCFG_DOSC_CFG cfg[0];
+} UBXCFG_DOSC;
+
 //typedef struct {
     //No payload
 //} UBXCFG_GNSS_POLL;
@@ -1099,14 +1144,6 @@ typedef struct {
     UBXU1_t protocolId;
 } UBXCFG_INF_POLL;
 
-typedef struct {
-    //Variable payload
-    //See structure UBXCFG_INF_PART below
-#ifdef __WINDOWS__
-    UBXU1_t payload;
-#endif
-} UBXCFG_INF;
-
 typedef struct {
     UBXU1_t protocolId;
     UBXU1_t reserved0;
@@ -1114,6 +1151,12 @@ typedef struct {
     UBXX1_t infMsgMask[6]; //See UBXCFGInfMsgMask to fill this field
 } UBXCFG_INF_PART;
 
+typedef struct {
+    //Variable payload
+    //See structure UBXCFG_INF_PART below
+    UBXCFG_INF_PART inf[0];
+} UBXCFG_INF;
+
 //typedef struct {
     //No payload
 //} UBXCFG_ITFM_POLL;
@@ -2124,6 +2167,7 @@ typedef union
     UBXCFG_DAT_IN CFG_DAT_IN;
     UBXCFG_DAT_OUT CFG_DAT_OUT;
     UBXCFG_DGNSS CFG_DGNSS;
+    UBXCFG_DOSC CFG_DOSC;
     UBXCFG_GNSS CFG_GNSS;
     UBXCFG_INF_POLL CFG_INF_POLL;
     UBXCFG_INF CFG_INF;