Browse Source

Add new one part UBX CFG API

semlanik 10 years ago
parent
commit
564c66d84b
3 changed files with 312 additions and 30 deletions
  1. 199 11
      ubx.c
  2. 68 18
      ubxcfg.h
  3. 45 1
      ubxmessage.h

+ 199 - 11
ubx.c

@@ -109,7 +109,7 @@ struct UBXMsgBuffer getCFG_MSG_POLL(enum UBXMessageClass msgClass, enum UBXMessa
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_MSG_RATE(enum UBXMessageClass msgClass, enum UBXMessageId msgId, u_int8_t rate)
+struct UBXMsgBuffer getCFG_MSG_RATE(enum UBXMessageClass msgClass, enum UBXMessageId msgId, UBXU1_t rate)
 {
     int payloadSize = sizeof(struct UBXCFG_MSG_RATE);
     struct UBXMsgBuffer buffer  = createBuffer(payloadSize);
@@ -122,7 +122,7 @@ struct UBXMsgBuffer getCFG_MSG_RATE(enum UBXMessageClass msgClass, enum UBXMessa
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_MSG_RATES(enum UBXMessageClass msgClass, enum UBXMessageId msgId, u_int8_t rate[6])
+struct UBXMsgBuffer getCFG_MSG_RATES(enum UBXMessageClass msgClass, enum UBXMessageId msgId, UBXU1_t rate[])
 {
     int payloadSize = sizeof(struct UBXCFG_MSG_RATES);
     struct UBXMsgBuffer buffer  = createBuffer(payloadSize);
@@ -622,9 +622,17 @@ struct UBXMsgBuffer getCFG_ITFM_POLL()
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_ITFM()
+struct UBXMsgBuffer getCFG_ITFM(struct UBXITFMConfig config,
+                                struct UBXITFMConfig2 config2)
 {
-
+    int payloadSize = sizeof(struct UBXCFG_ITFM);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_ITFM);
+    msg->payload.CFG_ITFM.config = config;
+    msg->payload.CFG_ITFM.config2 = config2;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
 }
 
 struct UBXMsgBuffer getCFG_LOGFILTER_POLL()
@@ -637,7 +645,27 @@ struct UBXMsgBuffer getCFG_LOGFILTER_POLL()
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_LOGFILTER(){}
+struct UBXMsgBuffer getCFG_LOGFILTER(UBXU1_t version,
+                                     UBXX1_t flags,
+                                     UBXU2_t minIterval,
+                                     UBXU2_t timeThreshold,
+                                     UBXU2_t speedThreshold,
+                                     UBXU4_t positionThreshold)
+{
+    int payloadSize = sizeof(struct UBXCFG_LOGFILTER);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_LOGFILTER);
+    msg->payload.CFG_LOGFILTER.version = version;
+    msg->payload.CFG_LOGFILTER.flags = flags;
+    msg->payload.CFG_LOGFILTER.minIterval = minIterval;
+    msg->payload.CFG_LOGFILTER.timeThreshold = timeThreshold;
+    msg->payload.CFG_LOGFILTER.speedThreshold = speedThreshold;
+    msg->payload.CFG_LOGFILTER.positionThreshold = positionThreshold;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 struct UBXMsgBuffer getCFG_NAV5_POLL()
 {
     int payloadSize = sizeof(struct UBXCFG_NAV5_POLL);
@@ -648,7 +676,48 @@ struct UBXMsgBuffer getCFG_NAV5_POLL()
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_NAV5(){}
+struct UBXMsgBuffer getCFG_NAV5(UBXX2_t mask,
+                                enum UBXNAV5Model dynModel,
+                                enum UBXNAV5FixMode fixMode,
+                                UBXI4_t fixedAlt,
+                                UBXU4_t fixedAltVar,
+                                UBXI1_t minElev,
+                                UBXU1_t drLimit,
+                                UBXU2_t pDop,
+                                UBXU2_t tDop,
+                                UBXU2_t pAcc,
+                                UBXU2_t tAcc,
+                                UBXU1_t staticHoldThresh,
+                                UBXU1_t dgpsTimeOut,
+                                UBXU1_t cnoThreshNumSVs,
+                                UBXU1_t cnoThresh)
+{
+    int payloadSize = sizeof(struct UBXCFG_NAV5);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NAV5);
+    msg->payload.CFG_NAV5.mask = mask;
+    msg->payload.CFG_NAV5.dynModel = dynModel;
+    msg->payload.CFG_NAV5.fixMode = fixMode;
+    msg->payload.CFG_NAV5.fixedAlt = fixedAlt;
+    msg->payload.CFG_NAV5.fixedAltVar = fixedAltVar;
+    msg->payload.CFG_NAV5.minElev = minElev;
+    msg->payload.CFG_NAV5.drLimit = drLimit;
+    msg->payload.CFG_NAV5.pDop = pDop;
+    msg->payload.CFG_NAV5.tDop = tDop;
+    msg->payload.CFG_NAV5.pAcc = pAcc;
+    msg->payload.CFG_NAV5.tAcc = tAcc;
+    msg->payload.CFG_NAV5.staticHoldThresh = staticHoldThresh;
+    msg->payload.CFG_NAV5.dgpsTimeOut = dgpsTimeOut;
+    msg->payload.CFG_NAV5.cnoThreshNumSVs = cnoThreshNumSVs;
+    msg->payload.CFG_NAV5.cnoThresh = cnoThresh;
+    msg->payload.CFG_NAV5.reserved2 = 0;
+    msg->payload.CFG_NAV5.reserved3 = 0;
+    msg->payload.CFG_NAV5.reserved4 = 0;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 struct UBXMsgBuffer getCFG_NAVX5_POLL()
 {
     int payloadSize = sizeof(struct UBXCFG_NAVX5_POLL);
@@ -659,7 +728,51 @@ struct UBXMsgBuffer getCFG_NAVX5_POLL()
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_NAVX5(){}
+struct UBXMsgBuffer getCFG_NAVX5(UBXU2_t version,
+                                 UBXX2_t mask1,
+                                 UBXU1_t minSVs,
+                                 UBXU1_t maxSVs,
+                                 UBXU1_t minCNO,
+                                 UBXU1_t iniFix3D,
+                                 UBXU2_t wknRollover,
+                                 UBXU1_t usePPP,
+                                 UBXU1_t aopCFG,
+                                 UBXU1_t aopOrbMaxErr)
+{
+    int payloadSize = sizeof(struct UBXCFG_NAVX5);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NAVX5);
+    msg->payload.CFG_NAVX5.version = version;
+    msg->payload.CFG_NAVX5.mask1 = mask1;
+    msg->payload.CFG_NAVX5.reserved0 = 0;
+    msg->payload.CFG_NAVX5.reserved1 = 0;
+    msg->payload.CFG_NAVX5.reserved2 = 0;
+    msg->payload.CFG_NAVX5.minSVs = minSVs;
+    msg->payload.CFG_NAVX5.maxSVs = maxSVs;
+    msg->payload.CFG_NAVX5.minCNO = minCNO;
+    msg->payload.CFG_NAVX5.reserved5 = 0;
+    msg->payload.CFG_NAVX5.iniFix3D = iniFix3D;
+    msg->payload.CFG_NAVX5.reserved6 = 0;
+    msg->payload.CFG_NAVX5.reserved7 = 0;
+    msg->payload.CFG_NAVX5.reserved8 = 0;
+    msg->payload.CFG_NAVX5.wknRollover = wknRollover;
+    msg->payload.CFG_NAVX5.reserved9 = 0;
+    msg->payload.CFG_NAVX5.reserved10 = 0;
+    msg->payload.CFG_NAVX5.reserved11 = 0;
+    msg->payload.CFG_NAVX5.usePPP = usePPP;
+    msg->payload.CFG_NAVX5.aopCFG = aopCFG;
+    msg->payload.CFG_NAVX5.reserved12 = 0;
+    msg->payload.CFG_NAVX5.reserved13 = 0;
+    msg->payload.CFG_NAVX5.aopOrbMaxErr = aopOrbMaxErr;
+    msg->payload.CFG_NAVX5.reserved14 = 0;
+    msg->payload.CFG_NAVX5.reserved15 = 0;
+    msg->payload.CFG_NAVX5.reserved3 = 0;
+    msg->payload.CFG_NAVX5.reserved4 = 0;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 struct UBXMsgBuffer getCFG_NMEA_POLL()
 {
     int payloadSize = sizeof(struct UBXCFG_NMEA_POLL);
@@ -670,8 +783,49 @@ struct UBXMsgBuffer getCFG_NMEA_POLL()
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_NMEA(){}
-struct UBXMsgBuffer getCFG_NVS(){}
+struct UBXMsgBuffer getCFG_NMEA(UBXX1_t filter,
+                                UBXU1_t nmeaVersion,
+                                UBXU1_t numSV,
+                                UBXX1_t flags,
+                                UBXX4_t gnssToFilter,
+                                enum UBXNMEASVNumbering svNumbering,
+                                enum UBXNMEATalkerIds mainTalkerId,
+                                enum UBXNMEAGSVTalkerIds gsvTalkerId)
+{
+    int payloadSize = sizeof(struct UBXCFG_NMEA);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NMEA);
+    msg->payload.CFG_NMEA.filter = filter;
+    msg->payload.CFG_NMEA.nmeaVersion = nmeaVersion;
+    msg->payload.CFG_NMEA.numSV = numSV;
+    msg->payload.CFG_NMEA.flags = flags;
+    msg->payload.CFG_NMEA.gnssToFilter = gnssToFilter;
+    msg->payload.CFG_NMEA.svNumbering = svNumbering;
+    msg->payload.CFG_NMEA.mainTalkerId = mainTalkerId;
+    msg->payload.CFG_NMEA.gsvTalkerId = gsvTalkerId;
+    msg->payload.CFG_NMEA.reserved = 0;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
+struct UBXMsgBuffer getCFG_NVS(UBXX4_t clearMask,
+                               UBXX4_t saveMask,
+                               UBXX4_t loadMask,
+                               UBXX1_t deviceMask)
+{
+    int payloadSize = sizeof(struct UBXCFG_NVS);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NVS);
+    msg->payload.CFG_NVS.clearMask = clearMask;
+    msg->payload.CFG_NVS.saveMask = saveMask;
+    msg->payload.CFG_NVS.loadMask = loadMask;
+    msg->payload.CFG_NVS.deviceMask = deviceMask;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 struct UBXMsgBuffer getCFG_PM2_POLL()
 {
     int payloadSize = sizeof(struct UBXCFG_PM2_POLL);
@@ -682,7 +836,22 @@ struct UBXMsgBuffer getCFG_PM2_POLL()
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_PM2(){}
+struct UBXMsgBuffer getCFG_PM2(struct UBXCFG_PM2Flags flags, UBXU4_t updatePeriod, UBXU4_t searchPeriod, UBXU4_t gridOffset, UBXU2_t onTime, UBXU2_t minAcqTime)
+{
+    int payloadSize = sizeof(struct UBXCFG_PM2);
+    struct UBXMsgBuffer buffer = createBuffer(payloadSize);
+    struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
+    initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_PM2);
+    msg->payload.CFG_PM2.flags = flags;
+    msg->payload.CFG_PM2.updatePeriod = updatePeriod;
+    msg->payload.CFG_PM2.searchPeriod = searchPeriod;
+    msg->payload.CFG_PM2.gridOffset = gridOffset;
+    msg->payload.CFG_PM2.onTime = onTime;
+    msg->payload.CFG_PM2.minAcqTime = minAcqTime;
+    completeMsg(&buffer, payloadSize);
+    return buffer;
+}
+
 struct UBXMsgBuffer getCFG_PRT_POLL()
 {
     int payloadSize = sizeof(struct UBXCFG_PRT_POLL);
@@ -704,7 +873,26 @@ struct UBXMsgBuffer getCFG_PRT_POLL_OPT(UBXU1_t portId)
     return buffer;
 }
 
-struct UBXMsgBuffer getCFG_PRT(){}
+struct UBXMsgBuffer getCFG_PRT_UART()
+{
+
+}
+
+struct UBXMsgBuffer getCFG_PRT_USB()
+{
+
+}
+
+struct UBXMsgBuffer getCFG_PRT_SPI()
+{
+
+}
+
+struct UBXMsgBuffer getCFG_PRT_DDC()
+{
+
+}
+
 struct UBXMsgBuffer getCFG_RATE_POLL()
 {
     int payloadSize = sizeof(struct UBXCFG_RATE_POLL);

+ 68 - 18
ubxcfg.h

@@ -65,24 +65,74 @@ extern struct UBXMsgBuffer getCFG_GNSS(UBXU1_t msgVer,
 extern struct UBXMsgBuffer getCFG_INF_POLL(UBXU1_t protocolId);
 extern struct UBXMsgBuffer getCFG_INF(struct UBXCFG_INF_PART *infPart, int infPartCount);
 extern struct UBXMsgBuffer getCFG_ITFM_POLL();
-extern struct UBXMsgBuffer getCFG_ITFM();
+extern struct UBXMsgBuffer getCFG_ITFM(struct UBXITFMConfig config, struct UBXITFMConfig2 config2);
 extern struct UBXMsgBuffer getCFG_LOGFILTER_POLL();
-extern struct UBXMsgBuffer getCFG_LOGFILTER();
+extern struct 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);
 extern struct UBXMsgBuffer getCFG_MSG_POLL(enum UBXMessageClass msgClass, enum UBXMessageId msgId);
-extern struct UBXMsgBuffer getCFG_MSG_RATE(enum UBXMessageClass msgClass, enum UBXMessageId msgId, u_int8_t rate);
-extern struct UBXMsgBuffer getCFG_MSG_RATES(enum UBXMessageClass msgClass, enum UBXMessageId msgId, u_int8_t rate[6]);
+extern struct UBXMsgBuffer getCFG_MSG_RATE(enum UBXMessageClass msgClass, enum UBXMessageId msgId, UBXU1_t rate);
+extern struct UBXMsgBuffer getCFG_MSG_RATES(enum UBXMessageClass msgClass, enum UBXMessageId msgId, UBXU1_t rate[6]);
 extern struct UBXMsgBuffer getCFG_NAV5_POLL();
-extern struct UBXMsgBuffer getCFG_NAV5();
+extern struct UBXMsgBuffer getCFG_NAV5(UBXX2_t mask, //See UBXNAV5Mask to fill this field
+                                       enum UBXNAV5Model dynModel,
+                                       enum UBXNAV5FixMode fixMode,
+                                       UBXI4_t fixedAlt,
+                                       UBXU4_t fixedAltVar,
+                                       UBXI1_t minElev,
+                                       UBXU1_t drLimit,
+                                       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 struct UBXMsgBuffer getCFG_NAVX5_POLL();
-extern struct UBXMsgBuffer getCFG_NAVX5();
+extern struct 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);
+
 extern struct UBXMsgBuffer getCFG_NMEA_POLL();
-extern struct UBXMsgBuffer getCFG_NMEA();
-extern struct UBXMsgBuffer getCFG_NVS();
+extern struct 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
+                                       enum UBXNMEASVNumbering svNumbering,
+                                       enum UBXNMEATalkerIds mainTalkerId,
+                                       enum UBXNMEAGSVTalkerIds gsvTalkerId);
+extern struct 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
+                                      );
 extern struct UBXMsgBuffer getCFG_PM2_POLL();
-extern struct UBXMsgBuffer getCFG_PM2();
+extern struct UBXMsgBuffer getCFG_PM2(struct UBXCFG_PM2Flags flags,
+                                      UBXU4_t updatePeriod,
+                                      UBXU4_t searchPeriod,
+                                      UBXU4_t gridOffset,
+                                      UBXU2_t onTime,
+                                      UBXU2_t minAcqTime);
 extern struct UBXMsgBuffer getCFG_PRT_POLL();
 extern struct UBXMsgBuffer getCFG_PRT_POLL_OPT(UBXU1_t portId);
-extern struct UBXMsgBuffer getCFG_PRT();
+
+extern struct UBXMsgBuffer getCFG_PRT_UART();
+extern struct UBXMsgBuffer getCFG_PRT_USB();
+extern struct UBXMsgBuffer getCFG_PRT_SPI();
+extern struct UBXMsgBuffer getCFG_PRT_DDC();
+
 extern struct UBXMsgBuffer getCFG_RATE_POLL();
 extern struct UBXMsgBuffer getCFG_RATE();
 extern struct UBXMsgBuffer getCFG_RINV();
@@ -95,14 +145,14 @@ extern struct UBXMsgBuffer getCFG_SBAS();
 extern struct UBXMsgBuffer getCFG_TP5_POLL();
 extern struct UBXMsgBuffer getCFG_TP5_POLL_OPT(enum UBXCFGTimepulses tpIdx);
 extern struct UBXMsgBuffer getCFG_TP5(enum UBXCFGTimepulses tpIdx,
-                        int16_t antCableDelay,
-                        int16_t rfGroupDelay,
-                        u_int32_t freqPeriod,
-                        u_int32_t freqPeriodLock,
-                        u_int32_t pulseLenRatio,
-                        u_int32_t pulseLenRatioLock,
-                        int32_t userConfigDelay,
-                        int32_t flags);
+                                      int16_t antCableDelay,
+                                      int16_t rfGroupDelay,
+                                      u_int32_t freqPeriod,
+                                      u_int32_t freqPeriodLock,
+                                      u_int32_t pulseLenRatio,
+                                      u_int32_t pulseLenRatioLock,
+                                      int32_t userConfigDelay,
+                                      int32_t flags);
 extern struct UBXMsgBuffer getCFG_USB_POLL();
 extern struct UBXMsgBuffer getCFG_USB();
 

+ 45 - 1
ubxmessage.h

@@ -341,6 +341,25 @@ enum UBXNAV5Mask
     UBXNAV5DgpsMask = 1 << 7,
 };
 
+enum UBXNAV5Model
+{
+    UBXNAV5ModelPortable = 0,
+    UBXNAV5ModelStationary = 2,
+    UBXNAV5ModelPedestrian = 3,
+    UBXNAV5ModelAutomotive = 4,
+    UBXNAV5ModelSea = 5,
+    UBXNAV5ModelAirborne1g = 6,
+    UBXNAV5ModelAirborne2g = 7,
+    UBXNAV5ModelAirborne4g = 8
+};
+
+enum UBXNAV5FixMode
+{
+    UBXNAV5Fix2DOnly = 1,
+    UBXNAV5Fix3DOnly = 2,
+    UBXNAV5FixAuto2D3D = 3
+};
+
 enum UBXNAVX5Mask
 {
     UBXNAVX5AopMinMax = 1 << 2,
@@ -351,7 +370,6 @@ enum UBXNAVX5Mask
     UBXNAVX5Aop = 1 << 14
 };
 
-
 enum UBXNMEAFilter
 {
     UBXNMEAPosFilter = 1,
@@ -362,6 +380,12 @@ enum UBXNMEAFilter
     UBXNMEATrackFilter = 1 << 5,
 };
 
+enum UBXNMEAVersion
+{
+    UBXNMEAVersion23 = 0x23,
+    UBXNMEAVersion21 = 0x21
+};
+
 enum UBXNMEAFlags
 {
     UBXNMEACompatFlag = 1,
@@ -376,6 +400,26 @@ enum UBXNMEAGNSSToFilter
     UBXNMEAGLONASSFilter = 1 << 5
 };
 
+enum UBXNMEASVNumbering
+{
+    UBXNMEASVNumStrict = 0,
+    UBXNMEASVNumExtended = 1
+};
+
+enum UBXNMEATalkerIds
+{
+    UBXNMEATalkerNotOverriden = 0,
+    UBXNMEATalkerGP = 1,
+    UBXNMEATalkerGL = 2,
+    UBXNMEATalkerGN = 3
+};
+
+enum UBXNMEAGSVTalkerIds
+{
+    UBXNMEAGSVTalkerGNSSSpecific = 0,
+    UBXNMEAGSVTalkerMain = 1
+};
+
 enum UBXPM2LimitPeakCurrent
 {
     UBXPM2LimitCurrentDisabled = 0x00,