Skip to content

Add TMODE3 struct and matching getSurveyMode #142

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,18 @@ UBX_ESF_MEAS_sensorData_t KEYWORD1
UBX_ESF_RAW_sensorData_t KEYWORD1
UBX_ESF_STATUS_sensorStatus_t KEYWORD1

UBX_CFG_PRT_data_t KEYWORD1
UBX_CFG_RATE_data_t KEYWORD1
UBX_CFG_TP5_data_t KEYWORD1
UBX_CFG_ITFM_data_t KEYWORD1
UBX_CFG_TMODE3_data_t KEYWORD1

UBX_MON_RF_data_t KEYWORD1
UBX_MON_HW_data_t KEYWORD1
UBX_MON_HW2_data_t KEYWORD1

UBX_NAV_POSECEF_data_t KEYWORD1
UBX_NAV_POSLLH_data_t KEYWORD1
UBX_NAV_STATUS_data_t KEYWORD1
UBX_NAV_DOP_data_t KEYWORD1
UBX_NAV_ATT_data_t KEYWORD1
Expand All @@ -32,8 +38,10 @@ UBX_NAV_VELNED_data_t KEYWORD1
UBX_NAV_HPPOSECEF_data_t KEYWORD1
UBX_NAV_HPPOSLLH_data_t KEYWORD1
UBX_NAV_PVAT_data_t KEYWORD1
UBX_NAV_TIMEUTC_data_t KEYWORD1
UBX_NAV_CLOCK_data_t KEYWORD1
UBX_NAV_SAT_data_t KEYWORD1
UBX_NAV_SVIN_data_t KEYWORD1
UBX_NAV_RELPOSNED_data_t KEYWORD1
UBX_NAV_TIMELS_data_t KEYWORD1
UBX_NAV_AOPSTATUS_data_t KEYWORD1
Expand All @@ -52,6 +60,9 @@ UBX_ESF_MEAS_data_t KEYWORD1
UBX_ESF_RAW_data_t KEYWORD1
UBX_ESF_STATUS_data_t KEYWORD1

UBX_MGA_ACK_DATA0_t KEYWORD1
UBX_MGA_DBD_data_t KEYWORD1

UBX_HNR_PVT_data_t KEYWORD1
UBX_HNR_ATT_data_t KEYWORD1
UBX_HNR_INS_data_t KEYWORD1
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=SparkFun u-blox GNSS Arduino Library
version=2.2.10
version=2.2.11
author=SparkFun Electronics <[email protected]>
maintainer=SparkFun Electronics <sparkfun.com>
sentence=Library for I2C, Serial and SPI Communication with u-blox GNSS modules<br/><br/>
Expand Down
30 changes: 30 additions & 0 deletions src/SparkFun_u-blox_GNSS_Arduino_Library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7320,6 +7320,36 @@ bool SFE_UBLOX_GNSS::getSurveyMode(uint16_t maxWait)
return ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_RECEIVED); // We are expecting data and an ACK
}

// Get the current TimeMode3 settings - these contain survey in statuses
bool SFE_UBLOX_GNSS::getSurveyMode(UBX_CFG_TMODE3_data_t *data, uint16_t maxWait)
{
if (data == NULL) // Check if the user forgot to include the data pointer
return (false); // Bail

packetCfg.cls = UBX_CLASS_CFG;
packetCfg.id = UBX_CFG_TMODE3;
packetCfg.len = 0;
packetCfg.startingSpot = 0;

if (sendCommand(&packetCfg, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) // We are expecting data and an ACK
return (false);

// Extract the data
data->version = extractByte(&packetCfg, 0);
data->flags.all = extractInt(&packetCfg, 2);
data->ecefXOrLat = extractSignedLong(&packetCfg, 4);
data->ecefYOrLon = extractSignedLong(&packetCfg, 8);
data->ecefZOrAlt = extractSignedLong(&packetCfg, 12);
data->ecefXOrLatHP = extractSignedChar(&packetCfg, 16);
data->ecefYOrLonHP = extractSignedChar(&packetCfg, 17);
data->ecefZOrAltHP = extractSignedChar(&packetCfg, 18);
data->fixedPosAcc = extractLong(&packetCfg, 20);
data->svinMinDur = extractLong(&packetCfg, 24);
data->svinAccLimit = extractLong(&packetCfg, 28);

return (true);
}

// Control Survey-In for NEO-M8P
bool SFE_UBLOX_GNSS::setSurveyMode(uint8_t mode, uint16_t observationTime, float requiredAccuracy, uint16_t maxWait)
{
Expand Down
1 change: 1 addition & 0 deletions src/SparkFun_u-blox_GNSS_Arduino_Library.h
Original file line number Diff line number Diff line change
Expand Up @@ -861,6 +861,7 @@ class SFE_UBLOX_GNSS

// Functions used for RTK and base station setup
bool getSurveyMode(uint16_t maxWait = defaultMaxWait); // Get the current TimeMode3 settings
bool getSurveyMode(UBX_CFG_TMODE3_data_t *data = NULL, uint16_t maxWait = defaultMaxWait); // Get the current TimeMode3 settings
bool setSurveyMode(uint8_t mode, uint16_t observationTime, float requiredAccuracy, uint16_t maxWait = defaultMaxWait); // Control survey in mode
bool setSurveyModeFull(uint8_t mode, uint32_t observationTime, float requiredAccuracy, uint16_t maxWait = defaultMaxWait); // Control survey in mode
bool enableSurveyMode(uint16_t observationTime, float requiredAccuracy, uint16_t maxWait = defaultMaxWait); // Begin Survey-In for NEO-M8P / ZED-F9x
Expand Down
29 changes: 29 additions & 0 deletions src/u-blox_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1754,6 +1754,35 @@ typedef struct
} config2;
} UBX_CFG_ITFM_data_t;

// UBX-CFG-TMODE3 (0x06 0x71): Time Mode Settings 3
const uint16_t UBX_CFG_TMODE3_LEN = 40;

typedef struct
{
uint8_t version; // Message version (0x00 for this version)
uint8_t reserved1;
union
{
uint16_t all;
struct
{
uint16_t mode : 8; // Receiver Mode: 0 Disabled; 1 Survey In; 2 Fixed Mode (true ARP position information required); 3-255 Reserved
uint16_t lla : 1; // Position is given in LAT/LON/ALT (default is ECEF)
} bits;
} flags;
int32_t ecefXOrLat; // WGS84 ECEF X coordinate (or latitude) of the ARP position, depending on flags above: cm or deg*1e-7
int32_t ecefYOrLon; // WGS84 ECEF Y coordinate (or latitude) of the ARP position, depending on flags above: cm or deg*1e-7
int32_t ecefZOrAlt; // WGS84 ECEF Z coordinate (or altitude) of the ARP position, depending on flags above: cm
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
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
int8_t ecefZOrAltHP; // High-precision WGS84 ECEF Z coordinate (or altitude) of the ARP position, depending on flags above: 0.1 mm
uint8_t reserved2;
uint32_t fixedPosAcc; // Fixed position 3D accuracy: 0.1 mm
uint32_t svinMinDur; // Survey-in minimum duration: s
uint32_t svinAccLimit; // Survey-in position accuracy limit: 0.1 mm
uint8_t reserved3[8];
} UBX_CFG_TMODE3_data_t;

// MON-specific structs

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