Skip to content

Commit d68d8e8

Browse files
committed
Add TMODE3 struct and matching getSurveyMode
1 parent c385606 commit d68d8e8

5 files changed

+72
-1
lines changed

keywords.txt

+11
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,18 @@ UBX_ESF_MEAS_sensorData_t KEYWORD1
1616
UBX_ESF_RAW_sensorData_t KEYWORD1
1717
UBX_ESF_STATUS_sensorStatus_t KEYWORD1
1818

19+
UBX_CFG_PRT_data_t KEYWORD1
20+
UBX_CFG_RATE_data_t KEYWORD1
21+
UBX_CFG_TP5_data_t KEYWORD1
1922
UBX_CFG_ITFM_data_t KEYWORD1
23+
UBX_CFG_TMODE3_data_t KEYWORD1
24+
2025
UBX_MON_RF_data_t KEYWORD1
2126
UBX_MON_HW_data_t KEYWORD1
2227
UBX_MON_HW2_data_t KEYWORD1
2328

2429
UBX_NAV_POSECEF_data_t KEYWORD1
30+
UBX_NAV_POSLLH_data_t KEYWORD1
2531
UBX_NAV_STATUS_data_t KEYWORD1
2632
UBX_NAV_DOP_data_t KEYWORD1
2733
UBX_NAV_ATT_data_t KEYWORD1
@@ -32,8 +38,10 @@ UBX_NAV_VELNED_data_t KEYWORD1
3238
UBX_NAV_HPPOSECEF_data_t KEYWORD1
3339
UBX_NAV_HPPOSLLH_data_t KEYWORD1
3440
UBX_NAV_PVAT_data_t KEYWORD1
41+
UBX_NAV_TIMEUTC_data_t KEYWORD1
3542
UBX_NAV_CLOCK_data_t KEYWORD1
3643
UBX_NAV_SAT_data_t KEYWORD1
44+
UBX_NAV_SVIN_data_t KEYWORD1
3745
UBX_NAV_RELPOSNED_data_t KEYWORD1
3846
UBX_NAV_TIMELS_data_t KEYWORD1
3947
UBX_NAV_AOPSTATUS_data_t KEYWORD1
@@ -52,6 +60,9 @@ UBX_ESF_MEAS_data_t KEYWORD1
5260
UBX_ESF_RAW_data_t KEYWORD1
5361
UBX_ESF_STATUS_data_t KEYWORD1
5462

63+
UBX_MGA_ACK_DATA0_t KEYWORD1
64+
UBX_MGA_DBD_data_t KEYWORD1
65+
5566
UBX_HNR_PVT_data_t KEYWORD1
5667
UBX_HNR_ATT_data_t KEYWORD1
5768
UBX_HNR_INS_data_t KEYWORD1

library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=SparkFun u-blox GNSS Arduino Library
2-
version=2.2.10
2+
version=2.2.11
33
author=SparkFun Electronics <[email protected]>
44
maintainer=SparkFun Electronics <sparkfun.com>
55
sentence=Library for I2C, Serial and SPI Communication with u-blox GNSS modules<br/><br/>

src/SparkFun_u-blox_GNSS_Arduino_Library.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -7320,6 +7320,36 @@ bool SFE_UBLOX_GNSS::getSurveyMode(uint16_t maxWait)
73207320
return ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_RECEIVED); // We are expecting data and an ACK
73217321
}
73227322

7323+
// Get the current TimeMode3 settings - these contain survey in statuses
7324+
bool SFE_UBLOX_GNSS::getSurveyMode(UBX_CFG_TMODE3_data_t *data, uint16_t maxWait)
7325+
{
7326+
if (data == NULL) // Check if the user forgot to include the data pointer
7327+
return (false); // Bail
7328+
7329+
packetCfg.cls = UBX_CLASS_CFG;
7330+
packetCfg.id = UBX_CFG_TMODE3;
7331+
packetCfg.len = 0;
7332+
packetCfg.startingSpot = 0;
7333+
7334+
if (sendCommand(&packetCfg, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) // We are expecting data and an ACK
7335+
return (false);
7336+
7337+
// Extract the data
7338+
data->version = extractByte(&packetCfg, 0);
7339+
data->flags.all = extractInt(&packetCfg, 2);
7340+
data->ecefXOrLat = extractSignedLong(&packetCfg, 4);
7341+
data->ecefYOrLon = extractSignedLong(&packetCfg, 8);
7342+
data->ecefZOrAlt = extractSignedLong(&packetCfg, 12);
7343+
data->ecefXOrLatHP = extractSignedChar(&packetCfg, 16);
7344+
data->ecefYOrLonHP = extractSignedChar(&packetCfg, 17);
7345+
data->ecefZOrAltHP = extractSignedChar(&packetCfg, 18);
7346+
data->fixedPosAcc = extractLong(&packetCfg, 20);
7347+
data->svinMinDur = extractLong(&packetCfg, 24);
7348+
data->svinAccLimit = extractLong(&packetCfg, 28);
7349+
7350+
return (true);
7351+
}
7352+
73237353
// Control Survey-In for NEO-M8P
73247354
bool SFE_UBLOX_GNSS::setSurveyMode(uint8_t mode, uint16_t observationTime, float requiredAccuracy, uint16_t maxWait)
73257355
{

src/SparkFun_u-blox_GNSS_Arduino_Library.h

+1
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,7 @@ class SFE_UBLOX_GNSS
861861

862862
// Functions used for RTK and base station setup
863863
bool getSurveyMode(uint16_t maxWait = defaultMaxWait); // Get the current TimeMode3 settings
864+
bool getSurveyMode(UBX_CFG_TMODE3_data_t *data = NULL, uint16_t maxWait = defaultMaxWait); // Get the current TimeMode3 settings
864865
bool setSurveyMode(uint8_t mode, uint16_t observationTime, float requiredAccuracy, uint16_t maxWait = defaultMaxWait); // Control survey in mode
865866
bool setSurveyModeFull(uint8_t mode, uint32_t observationTime, float requiredAccuracy, uint16_t maxWait = defaultMaxWait); // Control survey in mode
866867
bool enableSurveyMode(uint16_t observationTime, float requiredAccuracy, uint16_t maxWait = defaultMaxWait); // Begin Survey-In for NEO-M8P / ZED-F9x

src/u-blox_structs.h

+29
Original file line numberDiff line numberDiff line change
@@ -1754,6 +1754,35 @@ typedef struct
17541754
} config2;
17551755
} UBX_CFG_ITFM_data_t;
17561756

1757+
// UBX-CFG-TMODE3 (0x06 0x71): Time Mode Settings 3
1758+
const uint16_t UBX_CFG_TMODE3_LEN = 40;
1759+
1760+
typedef struct
1761+
{
1762+
uint8_t version; // Message version (0x00 for this version)
1763+
uint8_t reserved1;
1764+
union
1765+
{
1766+
uint16_t all;
1767+
struct
1768+
{
1769+
uint16_t mode : 8; // Receiver Mode: 0 Disabled; 1 Survey In; 2 Fixed Mode (true ARP position information required); 3-255 Reserved
1770+
uint16_t lla : 1; // Position is given in LAT/LON/ALT (default is ECEF)
1771+
} bits;
1772+
} flags;
1773+
int32_t ecefXOrLat; // WGS84 ECEF X coordinate (or latitude) of the ARP position, depending on flags above: cm or deg*1e-7
1774+
int32_t ecefYOrLon; // WGS84 ECEF Y coordinate (or latitude) of the ARP position, depending on flags above: cm or deg*1e-7
1775+
int32_t ecefZOrAlt; // WGS84 ECEF Z coordinate (or altitude) of the ARP position, depending on flags above: cm
1776+
int8_t ecefXOrLatHP; // High-precision WGS84 ECEF X coordinate (or latitude) of the ARP position, depending on flags above: 0.1 mm or deg*1e-9
1777+
int8_t ecefYOrLonHP; // High-precision WGS84 ECEF Y coordinate (or longitude) of the ARP position, depending on flags above: 0.1 mm or deg*1e-9
1778+
int8_t ecefZOrAltHP; // High-precision WGS84 ECEF Z coordinate (or altitude) of the ARP position, depending on flags above: 0.1 mm
1779+
uint8_t reserved2;
1780+
uint32_t fixedPosAcc; // Fixed position 3D accuracy: 0.1 mm
1781+
uint32_t svinMinDur; // Survey-in minimum duration: s
1782+
uint32_t svinAccLimit; // Survey-in position accuracy limit: 0.1 mm
1783+
uint8_t reserved3[8];
1784+
} UBX_CFG_TMODE3_data_t;
1785+
17571786
// MON-specific structs
17581787

17591788
// UBX-MON-HW (0x0A 0x09): Hardware status

0 commit comments

Comments
 (0)