429 lines
21 KiB
C
429 lines
21 KiB
C
#include <SparkFun_u-blox_GNSS_Arduino_Library.h> //http://librarymanager/All#SparkFun_u-blox_GNSS
|
|
|
|
//System can enter a variety of states
|
|
//See statemachine diagram at: https://lucid.app/lucidchart/53519501-9fa5-4352-aa40-673f88ca0c9b/edit?invitationId=inv_ebd4b988-513d-4169-93fd-c291851108f8
|
|
typedef enum
|
|
{
|
|
STATE_ROVER_NOT_STARTED = 0,
|
|
STATE_ROVER_NO_FIX,
|
|
STATE_ROVER_FIX,
|
|
STATE_ROVER_RTK_FLOAT,
|
|
STATE_ROVER_RTK_FIX,
|
|
STATE_BASE_NOT_STARTED,
|
|
STATE_BASE_TEMP_SETTLE, //User has indicated base, but current pos accuracy is too low
|
|
STATE_BASE_TEMP_SURVEY_STARTED,
|
|
STATE_BASE_TEMP_TRANSMITTING,
|
|
STATE_BASE_FIXED_NOT_STARTED,
|
|
STATE_BASE_FIXED_TRANSMITTING,
|
|
STATE_BUBBLE_LEVEL,
|
|
STATE_MARK_EVENT,
|
|
STATE_DISPLAY_SETUP,
|
|
STATE_WIFI_CONFIG_NOT_STARTED,
|
|
STATE_WIFI_CONFIG,
|
|
STATE_TEST,
|
|
STATE_TESTING,
|
|
STATE_PROFILE,
|
|
STATE_KEYS_STARTED,
|
|
STATE_KEYS_NEEDED,
|
|
STATE_KEYS_WIFI_STARTED,
|
|
STATE_KEYS_WIFI_CONNECTED,
|
|
STATE_KEYS_WIFI_TIMEOUT,
|
|
STATE_KEYS_EXPIRED,
|
|
STATE_KEYS_DAYS_REMAINING,
|
|
STATE_KEYS_LBAND_CONFIGURE,
|
|
STATE_KEYS_LBAND_ENCRYPTED,
|
|
STATE_KEYS_PROVISION_WIFI_STARTED,
|
|
STATE_KEYS_PROVISION_WIFI_CONNECTED,
|
|
STATE_KEYS_PROVISION_WIFI_TIMEOUT,
|
|
STATE_ESPNOW_PAIRING_NOT_STARTED,
|
|
STATE_ESPNOW_PAIRING,
|
|
STATE_SHUTDOWN,
|
|
} SystemState;
|
|
volatile SystemState systemState = STATE_ROVER_NOT_STARTED;
|
|
SystemState lastSystemState = STATE_ROVER_NOT_STARTED;
|
|
SystemState requestedSystemState = STATE_ROVER_NOT_STARTED;
|
|
bool newSystemStateRequested = false;
|
|
|
|
//The setup display can show a limited set of states
|
|
//When user pauses for X amount of time, system will enter that state
|
|
SystemState setupState = STATE_MARK_EVENT;
|
|
|
|
typedef enum
|
|
{
|
|
RTK_SURVEYOR = 0,
|
|
RTK_EXPRESS,
|
|
RTK_FACET,
|
|
RTK_EXPRESS_PLUS,
|
|
RTK_FACET_LBAND,
|
|
} ProductVariant;
|
|
ProductVariant productVariant = RTK_SURVEYOR;
|
|
|
|
//Each constellation will have its config key, enable, and a visible name
|
|
typedef struct ubxConstellation
|
|
{
|
|
uint32_t configKey;
|
|
uint8_t gnssID;
|
|
bool enabled;
|
|
char textName[30];
|
|
} ubxConstellation;
|
|
|
|
//Different ZED modules support different messages (F9P vs F9R vs F9T)
|
|
//Create binary packed struct for different platforms
|
|
typedef enum ubxPlatform
|
|
{
|
|
PLATFORM_F9P = 0b0001,
|
|
PLATFORM_F9R = 0b0010,
|
|
PLATFORM_F9T = 0b0100,
|
|
} ubxPlatform;
|
|
|
|
//Data port mux (RTK Express) can enter one of four different connections
|
|
typedef enum muxConnectionType_e
|
|
{
|
|
MUX_UBLOX_NMEA = 0,
|
|
MUX_PPS_EVENTTRIGGER,
|
|
MUX_I2C_WT,
|
|
MUX_ADC_DAC,
|
|
} muxConnectionType_e;
|
|
|
|
//User can enter fixed base coordinates in ECEF or degrees
|
|
typedef enum
|
|
{
|
|
COORD_TYPE_ECEF = 0,
|
|
COORD_TYPE_GEODETIC,
|
|
} coordinateType_e;
|
|
|
|
//User can select output pulse as either falling or rising edge
|
|
typedef enum
|
|
{
|
|
PULSE_FALLING_EDGE = 0,
|
|
PULSE_RISING_EDGE,
|
|
} pulseEdgeType_e;
|
|
|
|
typedef enum RadioType_e
|
|
{
|
|
RADIO_EXTERNAL = 0,
|
|
RADIO_ESPNOW,
|
|
} RadioType_e;
|
|
|
|
typedef enum BluetoothRadioType_e
|
|
{
|
|
BLUETOOTH_RADIO_SPP = 0,
|
|
BLUETOOTH_RADIO_BLE,
|
|
BLUETOOTH_RADIO_OFF,
|
|
} BluetoothRadioType_e;
|
|
|
|
enum LogTestState
|
|
{
|
|
LOGTEST_START = 0,
|
|
LOGTEST_4HZ_5MSG_10MS,
|
|
LOGTEST_4HZ_7MSG_10MS,
|
|
LOGTEST_10HZ_5MSG_10MS,
|
|
LOGTEST_10HZ_7MSG_10MS,
|
|
LOGTEST_4HZ_5MSG_0MS,
|
|
LOGTEST_4HZ_7MSG_0MS,
|
|
LOGTEST_10HZ_5MSG_0MS,
|
|
LOGTEST_10HZ_7MSG_0MS,
|
|
LOGTEST_4HZ_5MSG_50MS,
|
|
LOGTEST_4HZ_7MSG_50MS,
|
|
LOGTEST_10HZ_5MSG_50MS,
|
|
LOGTEST_10HZ_7MSG_50MS,
|
|
|
|
LOGTEST_END,
|
|
} ;
|
|
uint8_t logTestState = LOGTEST_END;
|
|
|
|
|
|
//Custom NMEA sentence types output to the log file
|
|
typedef enum
|
|
{
|
|
CUSTOM_NMEA_TYPE_RESET_REASON = 0,
|
|
CUSTOM_NMEA_TYPE_WAYPOINT,
|
|
CUSTOM_NMEA_TYPE_EVENT,
|
|
CUSTOM_NMEA_TYPE_SYSTEM_VERSION,
|
|
CUSTOM_NMEA_TYPE_ZED_VERSION,
|
|
CUSTOM_NMEA_TYPE_STATUS,
|
|
CUSTOM_NMEA_TYPE_LOGTEST_STATUS,
|
|
} customNmeaType_e;
|
|
|
|
//These are the allowable constellations to receive from and log (if enabled)
|
|
//Tested with u-center v21.02
|
|
#define MAX_CONSTELLATIONS 6 //(sizeof(ubxConstellations)/sizeof(ubxConstellation))
|
|
|
|
//Each message will have a rate, a visible name, and a class
|
|
typedef struct ubxMsg
|
|
{
|
|
uint32_t msgConfigKey;
|
|
uint8_t msgID;
|
|
uint8_t msgClass;
|
|
uint8_t msgRate;
|
|
char msgTextName[30];
|
|
uint8_t supported;
|
|
} ubxMsg;
|
|
|
|
//These are the allowable messages to broadcast and log (if enabled)
|
|
//Tested with u-center v21.02
|
|
#define MAX_UBX_MSG (13 + 25 + 5 + 10 + 3 + 12 + 5) //(sizeof(ubxMessages)/sizeof(ubxMsg))
|
|
|
|
|
|
//This is all the settings that can be set on RTK Surveyor. It's recorded to NVM and the config file.
|
|
typedef struct {
|
|
int sizeOfSettings = 0; //sizeOfSettings **must** be the first entry and must be int
|
|
int rtkIdentifier = RTK_IDENTIFIER; // rtkIdentifier **must** be the second entry
|
|
bool printDebugMessages = false;
|
|
bool enableSD = true;
|
|
bool enableDisplay = true;
|
|
int maxLogTime_minutes = 60 * 24; //Default to 24 hours
|
|
int observationSeconds = 60; //Default survey in time of 60 seconds
|
|
float observationPositionAccuracy = 5.0; //Default survey in pos accy of 5m
|
|
bool fixedBase = false; //Use survey-in by default
|
|
bool fixedBaseCoordinateType = COORD_TYPE_ECEF;
|
|
double fixedEcefX = -1280206.568;
|
|
double fixedEcefY = -4716804.403;
|
|
double fixedEcefZ = 4086665.484;
|
|
double fixedLat = 40.09029479;
|
|
double fixedLong = -105.18505761;
|
|
double fixedAltitude = 1560.089;
|
|
uint32_t dataPortBaud = 460800; //Default to 460800bps to support >10Hz update rates
|
|
uint32_t radioPortBaud = 57600; //Default to 57600bps to support connection to SiK1000 radios
|
|
float surveyInStartingAccuracy = 1.0; //Wait for 1m horizontal positional accuracy before starting survey in
|
|
uint16_t measurementRate = 250; //Elapsed ms between GNSS measurements. 25ms to 65535ms. Default 4Hz.
|
|
uint16_t navigationRate = 1; //Ratio between number of measurements and navigation solutions. Default 1 for 4Hz (with measurementRate).
|
|
bool enableI2Cdebug = false; //Turn on to display GNSS library debug messages
|
|
bool enableHeapReport = true; //Turn on to display free heap
|
|
bool enableTaskReports = false; //Turn on to display task high water marks
|
|
muxConnectionType_e dataPortChannel = MUX_UBLOX_NMEA; //Mux default to ublox UART1
|
|
uint16_t spiFrequency = 16; //By default, use 16MHz SPI
|
|
bool enableLogging = true; //If an SD card is present, log default sentences
|
|
uint16_t sppRxQueueSize = 2048;
|
|
uint16_t sppTxQueueSize = 512;
|
|
uint8_t dynamicModel = DYN_MODEL_PORTABLE;
|
|
SystemState lastState = STATE_ROVER_NOT_STARTED; //For Express, start unit in last known state
|
|
bool enableSensorFusion = false; //If IMU is available, avoid using it unless user specifically selects automotive
|
|
bool autoIMUmountAlignment = true; //Allows unit to automatically establish device orientation in vehicle
|
|
bool enableResetDisplay = false;
|
|
uint8_t resetCount = 0;
|
|
bool enableExternalPulse = true; //Send pulse once lock is achieved
|
|
uint32_t externalPulseTimeBetweenPulse_us = 900000; //us between pulses, max of 65s
|
|
uint32_t externalPulseLength_us = 100000; //us length of pulse
|
|
pulseEdgeType_e externalPulsePolarity = PULSE_RISING_EDGE; //Pulse rises for pulse length, then falls
|
|
bool enableExternalHardwareEventLogging = false; //Log when INT/TM2 pin goes low
|
|
bool enableMarksFile = false; //Log marks to the marks file
|
|
|
|
ubxMsg ubxMessages[MAX_UBX_MSG] = //Report rates for all known messages
|
|
{
|
|
//NMEA
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_DTM_UART1, UBX_NMEA_DTM, UBX_CLASS_NMEA, 0, "UBX_NMEA_DTM", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GBS_UART1, UBX_NMEA_GBS, UBX_CLASS_NMEA, 0, "UBX_NMEA_GBS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GGA_UART1, UBX_NMEA_GGA, UBX_CLASS_NMEA, 1, "UBX_NMEA_GGA", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GLL_UART1, UBX_NMEA_GLL, UBX_CLASS_NMEA, 0, "UBX_NMEA_GLL", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GNS_UART1, UBX_NMEA_GNS, UBX_CLASS_NMEA, 0, "UBX_NMEA_GNS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GRS_UART1, UBX_NMEA_GRS, UBX_CLASS_NMEA, 0, "UBX_NMEA_GRS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GSA_UART1, UBX_NMEA_GSA, UBX_CLASS_NMEA, 1, "UBX_NMEA_GSA", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GST_UART1, UBX_NMEA_GST, UBX_CLASS_NMEA, 1, "UBX_NMEA_GST", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_GSV_UART1, UBX_NMEA_GSV, UBX_CLASS_NMEA, 4, "UBX_NMEA_GSV", (PLATFORM_F9P | PLATFORM_F9R)}, //Default to 1 update every 4 fixes
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_RMC_UART1, UBX_NMEA_RMC, UBX_CLASS_NMEA, 1, "UBX_NMEA_RMC", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_VLW_UART1, UBX_NMEA_VLW, UBX_CLASS_NMEA, 0, "UBX_NMEA_VLW", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_VTG_UART1, UBX_NMEA_VTG, UBX_CLASS_NMEA, 0, "UBX_NMEA_VTG", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_NMEA_ID_ZDA_UART1, UBX_NMEA_ZDA, UBX_CLASS_NMEA, 0, "UBX_NMEA_ZDA", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
//NAV
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_ATT_UART1, UBX_NAV_ATT, UBX_CLASS_NAV, 0, "UBX_NAV_ATT", (PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_CLOCK_UART1, UBX_NAV_CLOCK, UBX_CLASS_NAV, 0, "UBX_NAV_CLOCK", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_DOP_UART1, UBX_NAV_DOP, UBX_CLASS_NAV, 0, "UBX_NAV_DOP", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_EOE_UART1, UBX_NAV_EOE, UBX_CLASS_NAV, 0, "UBX_NAV_EOE", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_GEOFENCE_UART1, UBX_NAV_GEOFENCE, UBX_CLASS_NAV, 0, "UBX_NAV_GEOFENCE", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_HPPOSECEF_UART1, UBX_NAV_HPPOSECEF, UBX_CLASS_NAV, 0, "UBX_NAV_HPPOSECEF", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_HPPOSLLH_UART1, UBX_NAV_HPPOSLLH, UBX_CLASS_NAV, 0, "UBX_NAV_HPPOSLLH", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_ODO_UART1, UBX_NAV_ODO, UBX_CLASS_NAV, 0, "UBX_NAV_ODO", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_ORB_UART1, UBX_NAV_ORB, UBX_CLASS_NAV, 0, "UBX_NAV_ORB", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_POSECEF_UART1, UBX_NAV_POSECEF, UBX_CLASS_NAV, 0, "UBX_NAV_POSECEF", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_POSLLH_UART1, UBX_NAV_POSLLH, UBX_CLASS_NAV, 0, "UBX_NAV_POSLLH", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_PVT_UART1, UBX_NAV_PVT, UBX_CLASS_NAV, 0, "UBX_NAV_PVT", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_RELPOSNED_UART1, UBX_NAV_RELPOSNED, UBX_CLASS_NAV, 0, "UBX_NAV_RELPOSNED", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_SAT_UART1, UBX_NAV_SAT, UBX_CLASS_NAV, 0, "UBX_NAV_SAT", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_SIG_UART1, UBX_NAV_SIG, UBX_CLASS_NAV, 0, "UBX_NAV_SIG", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_STATUS_UART1, UBX_NAV_STATUS, UBX_CLASS_NAV, 0, "UBX_NAV_STATUS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_SVIN_UART1, UBX_NAV_SVIN, UBX_CLASS_NAV, 0, "UBX_NAV_SVIN", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_TIMEBDS_UART1, UBX_NAV_TIMEBDS, UBX_CLASS_NAV, 0, "UBX_NAV_TIMEBDS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_TIMEGAL_UART1, UBX_NAV_TIMEGAL, UBX_CLASS_NAV, 0, "UBX_NAV_TIMEGAL", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_TIMEGLO_UART1, UBX_NAV_TIMEGLO, UBX_CLASS_NAV, 0, "UBX_NAV_TIMEGLO", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_TIMEGPS_UART1, UBX_NAV_TIMEGPS, UBX_CLASS_NAV, 0, "UBX_NAV_TIMEGPS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_TIMELS_UART1, UBX_NAV_TIMELS, UBX_CLASS_NAV, 0, "UBX_NAV_TIMELS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_TIMEUTC_UART1, UBX_NAV_TIMEUTC, UBX_CLASS_NAV, 0, "UBX_NAV_TIMEUTC", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_VELECEF_UART1, UBX_NAV_VELECEF, UBX_CLASS_NAV, 0, "UBX_NAV_VELECEF", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_NAV_VELNED_UART1, UBX_NAV_VELNED, UBX_CLASS_NAV, 0, "UBX_NAV_VELNED", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
//RXM
|
|
{UBLOX_CFG_MSGOUT_UBX_RXM_MEASX_UART1, UBX_RXM_MEASX, UBX_CLASS_RXM, 0, "UBX_RXM_MEASX", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_RXM_RAWX_UART1, UBX_RXM_RAWX, UBX_CLASS_RXM, 0, "UBX_RXM_RAWX", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_RXM_RLM_UART1, UBX_RXM_RLM, UBX_CLASS_RXM, 0, "UBX_RXM_RLM", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_RXM_RTCM_UART1, UBX_RXM_RTCM, UBX_CLASS_RXM, 0, "UBX_RXM_RTCM", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_RXM_SFRBX_UART1, UBX_RXM_SFRBX, UBX_CLASS_RXM, 0, "UBX_RXM_SFRBX", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
//MON
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_COMMS_UART1, UBX_MON_COMMS, UBX_CLASS_MON, 0, "UBX_MON_COMMS", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_HW2_UART1, UBX_MON_HW2, UBX_CLASS_MON, 0, "UBX_MON_HW2", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_HW3_UART1, UBX_MON_HW3, UBX_CLASS_MON, 0, "UBX_MON_HW3", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_HW_UART1, UBX_MON_HW, UBX_CLASS_MON, 0, "UBX_MON_HW", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_IO_UART1, UBX_MON_IO, UBX_CLASS_MON, 0, "UBX_MON_IO", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_MSGPP_UART1, UBX_MON_MSGPP, UBX_CLASS_MON, 0, "UBX_MON_MSGPP", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_RF_UART1, UBX_MON_RF, UBX_CLASS_MON, 0, "UBX_MON_RF", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_RXBUF_UART1, UBX_MON_RXBUF, UBX_CLASS_MON, 0, "UBX_MON_RXBUF", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_RXR_UART1, UBX_MON_RXR, UBX_CLASS_MON, 0, "UBX_MON_RXR", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_MON_TXBUF_UART1, UBX_MON_TXBUF, UBX_CLASS_MON, 0, "UBX_MON_TXBUF", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
//TIM
|
|
{UBLOX_CFG_MSGOUT_UBX_TIM_TM2_UART1, UBX_TIM_TM2, UBX_CLASS_TIM, 0, "UBX_TIM_TM2", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_TIM_TP_UART1, UBX_TIM_TP, UBX_CLASS_TIM, 0, "UBX_TIM_TP", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_TIM_VRFY_UART1, UBX_TIM_VRFY, UBX_CLASS_TIM, 0, "UBX_TIM_VRFY", (PLATFORM_F9P | PLATFORM_F9R)},
|
|
|
|
//RTCM
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1005_UART1, UBX_RTCM_1005, UBX_RTCM_MSB, 0, "UBX_RTCM_1005", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1074_UART1, UBX_RTCM_1074, UBX_RTCM_MSB, 0, "UBX_RTCM_1074", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1077_UART1, UBX_RTCM_1077, UBX_RTCM_MSB, 0, "UBX_RTCM_1077", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1084_UART1, UBX_RTCM_1084, UBX_RTCM_MSB, 0, "UBX_RTCM_1084", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1087_UART1, UBX_RTCM_1087, UBX_RTCM_MSB, 0, "UBX_RTCM_1087", (PLATFORM_F9P)},
|
|
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1094_UART1, UBX_RTCM_1094, UBX_RTCM_MSB, 0, "UBX_RTCM_1094", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1097_UART1, UBX_RTCM_1097, UBX_RTCM_MSB, 0, "UBX_RTCM_1097", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1124_UART1, UBX_RTCM_1124, UBX_RTCM_MSB, 0, "UBX_RTCM_1124", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1127_UART1, UBX_RTCM_1127, UBX_RTCM_MSB, 0, "UBX_RTCM_1127", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE1230_UART1, UBX_RTCM_1230, UBX_RTCM_MSB, 0, "UBX_RTCM_1230", (PLATFORM_F9P)},
|
|
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE4072_0_UART1, UBX_RTCM_4072_0, UBX_RTCM_MSB, 0, "UBX_RTCM_4072_0", (PLATFORM_F9P)},
|
|
{UBLOX_CFG_MSGOUT_RTCM_3X_TYPE4072_1_UART1, UBX_RTCM_4072_1, UBX_RTCM_MSB, 0, "UBX_RTCM_4072_1", (PLATFORM_F9P)},
|
|
|
|
//ESF
|
|
{UBLOX_CFG_MSGOUT_UBX_ESF_MEAS_UART1, UBX_ESF_MEAS, UBX_CLASS_ESF, 0, "UBX_ESF_MEAS", (PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_ESF_RAW_UART1, UBX_ESF_RAW, UBX_CLASS_ESF, 0, "UBX_ESF_RAW", (PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_ESF_STATUS_UART1, UBX_ESF_STATUS, UBX_CLASS_ESF, 0, "UBX_ESF_STATUS", (PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_ESF_ALG_UART1, UBX_ESF_ALG, UBX_CLASS_ESF, 0, "UBX_ESF_ALG", (PLATFORM_F9R)},
|
|
{UBLOX_CFG_MSGOUT_UBX_ESF_INS_UART1, UBX_ESF_INS, UBX_CLASS_ESF, 0, "UBX_ESF_INS", (PLATFORM_F9R)},
|
|
};
|
|
|
|
//Constellations monitored/used for fix
|
|
ubxConstellation ubxConstellations[MAX_CONSTELLATIONS] =
|
|
{
|
|
{UBLOX_CFG_SIGNAL_GPS_ENA, SFE_UBLOX_GNSS_ID_GPS, true, "GPS"},
|
|
{UBLOX_CFG_SIGNAL_SBAS_ENA, SFE_UBLOX_GNSS_ID_SBAS, true, "SBAS"},
|
|
{UBLOX_CFG_SIGNAL_GAL_ENA, SFE_UBLOX_GNSS_ID_GALILEO, true, "Galileo"},
|
|
{UBLOX_CFG_SIGNAL_BDS_ENA, SFE_UBLOX_GNSS_ID_BEIDOU, true, "BeiDou"},
|
|
//{UBLOX_CFG_SIGNAL_QZSS_ENA, SFE_UBLOX_GNSS_ID_IMES, false, "IMES"}, //Not yet supported? Config key does not exist?
|
|
{UBLOX_CFG_SIGNAL_QZSS_ENA, SFE_UBLOX_GNSS_ID_QZSS, true, "QZSS"},
|
|
{UBLOX_CFG_SIGNAL_GLO_ENA, SFE_UBLOX_GNSS_ID_GLONASS, true, "GLONASS"},
|
|
};
|
|
|
|
int maxLogLength_minutes = 60 * 24; //Default to 24 hours
|
|
char profileName[50] = "";
|
|
|
|
//NTRIP Server
|
|
bool enableNtripServer = false;
|
|
bool ntripServer_StartAtSurveyIn = false; //true = Start WiFi instead of Bluetooth at Survey-In
|
|
char ntripServer_CasterHost[50] = "rtk2go.com"; //It's free...
|
|
uint16_t ntripServer_CasterPort = 2101;
|
|
char ntripServer_CasterUser[50] = "test@test.com"; //Some free casters require auth. User must provide their own email address to use RTK2Go
|
|
char ntripServer_CasterUserPW[50] = "";
|
|
char ntripServer_MountPoint[50] = "bldr_dwntwn2"; //NTRIP Server
|
|
char ntripServer_MountPointPW[50] = "WR5wRo4H";
|
|
char ntripServer_wifiSSID[50] = "TRex"; //NTRIP Server WiFi
|
|
char ntripServer_wifiPW[50] = "parachutes";
|
|
|
|
//NTRIP Client
|
|
bool enableNtripClient = false;
|
|
char ntripClient_CasterHost[50] = "rtk2go.com"; //It's free...
|
|
uint16_t ntripClient_CasterPort = 2101;
|
|
char ntripClient_CasterUser[50] = "test@test.com"; //Some free casters require auth. User must provide their own email address to use RTK2Go
|
|
char ntripClient_CasterUserPW[50] = "";
|
|
char ntripClient_MountPoint[50] = "bldr_SparkFun1";
|
|
char ntripClient_MountPointPW[50] = "";
|
|
char ntripClient_wifiSSID[50] = "TRex"; //NTRIP Server WiFi
|
|
char ntripClient_wifiPW[50] = "parachutes";
|
|
bool ntripClient_TransmitGGA = true;
|
|
|
|
int16_t serialTimeoutGNSS = 1; //In ms - used during SerialGNSS.begin. Number of ms to pass of no data before hardware serial reports data available.
|
|
|
|
char pointPerfectDeviceProfileToken[40] = "";
|
|
bool enablePointPerfectCorrections = true;
|
|
char home_wifiSSID[50] = ""; //WiFi network to use when attempting to obtain PointPerfect keys and ThingStream provisioning
|
|
char home_wifiPW[50] = "";
|
|
bool autoKeyRenewal = true; //Attempt to get keys if we get under 28 days from the expiration date
|
|
char pointPerfectClientID[50] = "";
|
|
char pointPerfectBrokerHost[50] = ""; // pp.services.u-blox.com
|
|
char pointPerfectLBandTopic[20] = ""; // /pp/key/Lb
|
|
|
|
char pointPerfectCurrentKey[33] = ""; //32 hexadecimal digits = 128 bits = 16 Bytes
|
|
uint64_t pointPerfectCurrentKeyDuration = 0;
|
|
uint64_t pointPerfectCurrentKeyStart = 0;
|
|
|
|
char pointPerfectNextKey[33] = "";
|
|
uint64_t pointPerfectNextKeyDuration = 0;
|
|
uint64_t pointPerfectNextKeyStart = 0;
|
|
|
|
uint64_t lastKeyAttempt = 0; //Epoch time of last attempt at obtaining keys
|
|
bool updateZEDSettings = true; //When in doubt, update the ZED with current settings
|
|
uint32_t LBandFreq = 1556290000; //Default to US band
|
|
|
|
//Time Zone - Default to UTC
|
|
int8_t timeZoneHours = 0;
|
|
int8_t timeZoneMinutes = 0;
|
|
int8_t timeZoneSeconds = 0;
|
|
|
|
//Debug settings
|
|
bool enablePrintWifiIpAddress = true;
|
|
bool enablePrintState = false;
|
|
bool enablePrintWifiState = false;
|
|
bool enablePrintNtripClientState = false;
|
|
bool enablePrintNtripServerState = false;
|
|
bool enablePrintPosition = false;
|
|
bool enablePrintIdleTime = false;
|
|
bool enablePrintBatteryMessages = true;
|
|
bool enablePrintRoverAccuracy = true;
|
|
bool enablePrintBadMessages = false;
|
|
bool enablePrintLogFileMessages = false;
|
|
bool enablePrintLogFileStatus = true;
|
|
bool enablePrintRingBufferOffsets = false;
|
|
bool enablePrintNtripServerRtcm = false;
|
|
bool enablePrintNtripClientRtcm = false;
|
|
bool enablePrintStates = true;
|
|
bool enablePrintDuplicateStates = false;
|
|
RadioType_e radioType = RADIO_EXTERNAL;
|
|
uint8_t espnowPeers[5][6]; //Max of 5 peers. Contains the MAC addresses (6 bytes) of paired units
|
|
uint8_t espnowPeerCount;
|
|
bool enableRtcmMessageChecking = false;
|
|
// BluetoothRadioType_e bluetoothRadioType = BLUETOOTH_RADIO_SPP;
|
|
BluetoothRadioType_e bluetoothRadioType = BLUETOOTH_RADIO_BLE;
|
|
bool runLogTest = false; //When set to true, device will create a series of test logs
|
|
} Settings;
|
|
Settings settings;
|
|
|
|
struct struct_online {
|
|
bool microSD = false;
|
|
bool display = false;
|
|
bool gnss = false;
|
|
bool logging = false;
|
|
bool serialOutput = false;
|
|
bool fs = false;
|
|
bool rtc = false;
|
|
bool battery = false;
|
|
bool accelerometer = false;
|
|
bool ntripClient = false;
|
|
bool ntripServer = false;
|
|
bool lband = false;
|
|
bool lbandCorrections = false;
|
|
bool i2c = false;
|
|
} online;
|
|
|
|
//Radio status LED goes from off (LED off), no connection (blinking), to connected (solid)
|
|
enum BTState
|
|
{
|
|
BT_OFF = 0,
|
|
BT_NOTCONNECTED,
|
|
BT_CONNECTED,
|
|
};
|