GPS updates (#3142)

* Portduino multiple logging levels

* Fixes based on GPSFan work

* Fix derped logic

* Correct size field for AID message

* Reformat to add comments, beginning of GPS rework

* Update PM2 message for Neo-6

* Correct ECO mode logic as ECO mode is only for Neo-6

* Cleanup ubx.h add a few more comments

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
This commit is contained in:
Ken McGuire 2024-01-30 16:38:31 -07:00 committed by GitHub
parent ca45888f3e
commit 9586c68c65
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 177 additions and 123 deletions

View File

@ -104,4 +104,4 @@ Input:
### ###
Logging: Logging:
# DebugMode: true LogLevel: info # debug, info, warn, error

View File

@ -73,10 +73,14 @@ size_t RedirectablePrint::vprintf(const char *format, va_list arg)
size_t RedirectablePrint::log(const char *logLevel, const char *format, ...) size_t RedirectablePrint::log(const char *logLevel, const char *format, ...)
{ {
#ifdef ARCH_PORTDUINO #ifdef ARCH_PORTDUINO
if (!settingsMap[debugmode] && strcmp(logLevel, "DEBUG") == 0) if (settingsMap[logoutputlevel] < level_debug && strcmp(logLevel, MESHTASTIC_LOG_LEVEL_DEBUG) == 0)
return 0;
else if (settingsMap[logoutputlevel] < level_info && strcmp(logLevel, MESHTASTIC_LOG_LEVEL_INFO) == 0)
return 0;
else if (settingsMap[logoutputlevel] < level_warn && strcmp(logLevel, MESHTASTIC_LOG_LEVEL_WARN) == 0)
return 0; return 0;
#endif #endif
if (moduleConfig.serial.override_console_serial_port && strcmp(logLevel, "DEBUG") == 0) { if (moduleConfig.serial.override_console_serial_port && strcmp(logLevel, MESHTASTIC_LOG_LEVEL_DEBUG) == 0) {
return 0; return 0;
} }
size_t r = 0; size_t r = 0;

View File

@ -251,17 +251,9 @@ int GPS::getACK(uint8_t *buffer, uint16_t size, uint8_t requestedClass, uint8_t
bool GPS::setup() bool GPS::setup()
{ {
int msglen = 0; int msglen = 0;
bool isProblematicGPS = false;
if (!didSerialInit) { if (!didSerialInit) {
#if !defined(GPS_UC6580) #if !defined(GPS_UC6580)
#ifdef HAS_PMU
// The T-Beam 1.2 has issues with the GPS
if (HW_VENDOR == meshtastic_HardwareModel_TBEAM && PMU->getChipModel() == XPOWERS_AXP2101) {
gnssModel = GNSS_MODEL_UBLOX;
isProblematicGPS = true;
}
#endif
#if defined(RAK4630) && defined(PIN_3V3_EN) #if defined(RAK4630) && defined(PIN_3V3_EN)
// If we are using the RAK4630 and we have no other peripherals on the I2C bus or module interest in 3V3_S, // If we are using the RAK4630 and we have no other peripherals on the I2C bus or module interest in 3V3_S,
@ -380,7 +372,7 @@ bool GPS::setup()
LOG_WARN("Unable to set GPS update rate.\n"); LOG_WARN("Unable to set GPS update rate.\n");
} }
msglen = makeUBXPacket(0x06, 0x01, sizeof(_message_GGL), _message_GGL); msglen = makeUBXPacket(0x06, 0x01, sizeof(_message_GLL), _message_GLL);
_serial_gps->write(UBXscratch, msglen); _serial_gps->write(UBXscratch, msglen);
if (getACK(0x06, 0x01, 300) != GNSS_RESPONSE_OK) { if (getACK(0x06, 0x01, 300) != GNSS_RESPONSE_OK) {
LOG_WARN("Unable to disable NMEA GGL.\n"); LOG_WARN("Unable to disable NMEA GGL.\n");
@ -416,6 +408,12 @@ bool GPS::setup()
LOG_WARN("Unable to enable NMEA GGA.\n"); LOG_WARN("Unable to enable NMEA GGA.\n");
} }
msglen = makeUBXPacket(0x06, 0x01, sizeof(_message_AID), _message_AID);
_serial_gps->write(UBXscratch, msglen);
if (getACK(0x06, 0x01, 300) != GNSS_RESPONSE_OK) {
LOG_WARN("Unable to disable UBX-AID.\n");
}
if (uBloxProtocolVersion >= 18) { if (uBloxProtocolVersion >= 18) {
msglen = makeUBXPacket(0x06, 0x86, sizeof(_message_PMS), _message_PMS); msglen = makeUBXPacket(0x06, 0x86, sizeof(_message_PMS), _message_PMS);
_serial_gps->write(UBXscratch, msglen); _serial_gps->write(UBXscratch, msglen);
@ -423,36 +421,31 @@ bool GPS::setup()
LOG_WARN("Unable to enable powersaving for GPS.\n"); LOG_WARN("Unable to enable powersaving for GPS.\n");
} }
} else { } else {
if (!(isProblematicGPS)) { if (strncmp(info.hwVersion, "00040007", 8) == 0) { // This PSM mode is only for Neo-6
if (strncmp(info.hwVersion, "00040007", 8) == 0) { // This PSM mode has only been tested on this hardware msglen = makeUBXPacket(0x06, 0x11, 0x2, _message_CFG_RXM_ECO);
msglen = makeUBXPacket(0x06, 0x11, 0x2, _message_CFG_RXM_PSM); _serial_gps->write(UBXscratch, msglen);
_serial_gps->write(UBXscratch, msglen); if (getACK(0x06, 0x11, 300) != GNSS_RESPONSE_OK) {
if (getACK(0x06, 0x11, 300) != GNSS_RESPONSE_OK) { LOG_WARN("Unable to enable powersaving ECO mode for Neo-6.\n");
LOG_WARN("Unable to enable powersaving mode for GPS.\n"); }
} msglen = makeUBXPacket(0x06, 0x3B, 44, _message_CFG_PM2);
msglen = makeUBXPacket(0x06, 0x3B, 44, _message_CFG_PM2); _serial_gps->write(UBXscratch, msglen);
_serial_gps->write(UBXscratch, msglen); if (getACK(0x06, 0x3B, 300) != GNSS_RESPONSE_OK) {
if (getACK(0x06, 0x3B, 300) != GNSS_RESPONSE_OK) { LOG_WARN("Unable to enable powersaving details for GPS.\n");
LOG_WARN("Unable to enable powersaving details for GPS.\n"); }
} } else {
} else { msglen = makeUBXPacket(0x06, 0x11, 0x2, _message_CFG_RXM_PSM);
msglen = makeUBXPacket(0x06, 0x11, 0x2, _message_CFG_RXM_ECO); _serial_gps->write(UBXscratch, msglen);
_serial_gps->write(UBXscratch, msglen); if (getACK(0x06, 0x11, 300) != GNSS_RESPONSE_OK) {
if (getACK(0x06, 0x11, 300) != GNSS_RESPONSE_OK) { LOG_WARN("Unable to enable powersaving mode for GPS.\n");
LOG_WARN("Unable to enable powersaving ECO mode for GPS.\n");
}
} }
} }
} }
// The T-beam 1.2 has issues. msglen = makeUBXPacket(0x06, 0x09, sizeof(_message_SAVE), _message_SAVE);
if (!(isProblematicGPS)) { _serial_gps->write(UBXscratch, msglen);
msglen = makeUBXPacket(0x06, 0x09, sizeof(_message_SAVE), _message_SAVE); if (getACK(0x06, 0x09, 2000) != GNSS_RESPONSE_OK) {
_serial_gps->write(UBXscratch, msglen); LOG_WARN("Unable to save GNSS module configuration.\n");
if (getACK(0x06, 0x09, 300) != GNSS_RESPONSE_OK) { } else {
LOG_WARN("Unable to save GNSS module configuration.\n"); LOG_INFO("GNSS module configuration saved!\n");
} else {
LOG_INFO("GNSS module configuration saved!\n");
}
} }
} }
didSerialInit = true; didSerialInit = true;
@ -682,7 +675,8 @@ int32_t GPS::runOnce()
// At least one GPS has a bad habit of losing its mind from time to time // At least one GPS has a bad habit of losing its mind from time to time
if (rebootsSeen > 2) { if (rebootsSeen > 2) {
rebootsSeen = 0; rebootsSeen = 0;
gps->factoryReset(); LOG_DEBUG("Would normally factoryReset()\n");
// gps->factoryReset();
} }
// If we are overdue for an update, turn on the GPS and at least publish the current status // If we are overdue for an update, turn on the GPS and at least publish the current status
@ -1286,4 +1280,4 @@ int32_t GPS::disable()
setAwake(false); setAwake(false);
return INT32_MAX; return INT32_MAX;
} }

View File

@ -103,11 +103,12 @@ class GPS : private concurrency::OSThread
static const uint8_t _message_JAM[]; static const uint8_t _message_JAM[];
static const uint8_t _message_NAVX5[]; static const uint8_t _message_NAVX5[];
static const uint8_t _message_1HZ[]; static const uint8_t _message_1HZ[];
static const uint8_t _message_GGL[]; static const uint8_t _message_GLL[];
static const uint8_t _message_GSA[]; static const uint8_t _message_GSA[];
static const uint8_t _message_GSV[]; static const uint8_t _message_GSV[];
static const uint8_t _message_VTG[]; static const uint8_t _message_VTG[];
static const uint8_t _message_RMC[]; static const uint8_t _message_RMC[];
static const uint8_t _message_AID[];
static const uint8_t _message_GGA[]; static const uint8_t _message_GGA[];
static const uint8_t _message_PMS[]; static const uint8_t _message_PMS[];
static const uint8_t _message_SAVE[]; static const uint8_t _message_SAVE[];

View File

@ -10,24 +10,32 @@ const uint8_t GPS::_message_CFG_RXM_PSM[] PROGMEM = {
0x01 // Power save mode 0x01 // Power save mode
}; };
// only for Neo-6
const uint8_t GPS::_message_CFG_RXM_ECO[] PROGMEM = { const uint8_t GPS::_message_CFG_RXM_ECO[] PROGMEM = {
0x08, // Reserved 0x08, // Reserved
0x04 // eco mode 0x04 // eco mode
}; };
const uint8_t GPS::_message_CFG_PM2[] PROGMEM = { const uint8_t GPS::_message_CFG_PM2[] PROGMEM = {
0x01, 0x06, 0x00, 0x00, // version, Reserved 0x01, // version
0x0E, 0x81, 0x43, 0x01, // flags 0x00, // Reserved 1, set to 0x06 by u-Center
0x00, // Reserved 2
0x00, // Reserved 1
0x00, 0x11, 0x03, 0x00, // flags-> cyclic mode, wait for normal fix ok, do not wake to update RTC or EPH, doNotEnterOff,
// LimitPeakCurrent
0xE8, 0x03, 0x00, 0x00, // update period 1000 ms 0xE8, 0x03, 0x00, 0x00, // update period 1000 ms
0x10, 0x27, 0x00, 0x00, // search period 10s 0x10, 0x27, 0x00, 0x00, // search period 10s
0x00, 0x00, 0x00, 0x00, // Grod offset 0 0x00, 0x00, 0x00, 0x00, // Grid offset 0
0x01, 0x00, // onTime 1 second 0x01, 0x00, // onTime 1 second
0x00, 0x00, // min search time 0 0x00, 0x00, // min search time 0
0x2C, 0x01, // reserved 0x00, 0x00, // 0x2C, 0x01, // reserved 4
0x00, 0x00, 0x4F, 0xC1, // reserved 0x00, 0x00, // 0x00, 0x00, // reserved 5
0x03, 0x00, 0x87, 0x02, // reserved 0x00, 0x00, 0x00, 0x00, // 0x4F, 0xC1, 0x03, 0x00, // reserved 6
0x00, 0x00, 0xFF, 0x00, // reserved 0x00, 0x00, 0x00, 0x00, // 0x87, 0x02, 0x00, 0x00, // reserved 7
0x01, 0x00, 0xD6, 0x4D // reserved 0x00, // 0xFF, // reserved 8
0x00, // 0x00, // reserved 9
0x00, 0x00, // 0x00, 0x00, // reserved 10
0x00, 0x00, 0x00, 0x00 // 0x64, 0x40, 0x01, 0x00 // reserved 11
}; };
const uint8_t GPS::_message_GNSS_7[] = { const uint8_t GPS::_message_GNSS_7[] = {
@ -56,52 +64,59 @@ const uint8_t GPS::_message_GNSS[] = {
0x01, 0x01, 0x03, 0x00, 0x01, 0x00, 0x01, 0x01, // SBAS 0x01, 0x01, 0x03, 0x00, 0x01, 0x00, 0x01, 0x01, // SBAS
0x06, 0x08, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x01 // GLONASS 0x06, 0x08, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x01 // GLONASS
}; };
// Enable jamming/interference monitor
// Enable interference resistance, because we are using LoRa, WiFi and Bluetooth on same board, // For Neo-6
// and we need to reduce interference from them
const uint8_t GPS::_message_JAM[] = { const uint8_t GPS::_message_JAM[] = {
// bbThreshold (Broadband jamming detection threshold) is set to 0x3F (63 in decimal) 0xf3, 0xac, 0x62, 0xad, // config1 bbThreshold = 3, cwThreshold = 15, enable = 1, reserved bits 0x16B156
// cwThreshold (CW jamming detection threshold) is set to 0x10 (16 in decimal) 0x1e, 0x03, 0x00, 0x00 // config2 antennaSetting Unknown = 0, reserved 3, = 0x00,0x00, reserved 2 = 0x31E
// algorithmBits (Reserved algorithm settings) is set to 0x16B156 as recommended };
// enable (Enable interference detection) is set to 1 (enabled) /* // WIP GPS reconfig
0x3F, 0x10, 0xB1, 0x56, // config: Interference config word // For Neo-6, Max-7 and Neo-7
// generalBits (General settings) is set to 0x31E as recommended const uint8_t GPS::_message_JAM_6_7[] = {
// antSetting (Antenna setting, 0=unknown, 1=passive, 2=active) is set to 0 (unknown) 0xf3, 0xac, 0x62, 0xad, // config1 bbThreshold = 3, cwThreshold = 15, enable = 1, reserved bits 0x16B156
// ToDo: Set to 1 (passive) or 2 (active) if known, for example from UBX-MON-HW, or from board info 0x1e, 0x03, 0x00, 0x00 // config2 antennaSetting Unknown = 0, reserved 3, = 0x00,0x00, reserved 2 = 0x31E
// enable2 (Set to 1 to scan auxiliary bands, u-blox 8 / u-blox M8 only, otherwise ignored) is set to 1
// (enabled)
0x1E, 0x03, 0x00, 0x01 // config2: Extra settings for jamming/interference monitor
}; };
// For M8
const uint8_t GPS::_message_JAM_8[] = {
0xf3, 0xac, 0x62, 0xad, // config1 bbThreshold = 3, cwThreshold = 15, enable1 = 1, reserved bits 0x16B156
0x1e, 0x43, 0x00, 0x00 // config2 antennaSetting Unknown = 0, enable2 = 1, generalBits = 0x31E
};
*/
// Configure navigation engine expert settings: // Configure navigation engine expert settings:
// there are many variations of what were Reserved fields for the Neo-6 in later versions
// ToDo: check UBX-MON-VER for module type and protocol version
// For the Neo-6
const uint8_t GPS::_message_NAVX5[] = { const uint8_t GPS::_message_NAVX5[] = {
0x00, 0x00, // msgVer (0 for this version) 0x00, 0x00, // msgVer (0 for this version)
// minMax flag = 1: apply min/max SVs settings 0x4c, 0x66, // mask1
// minCno flag = 1: apply minimum C/N0 setting 0x00, 0x00, 0x00, 0x00, // Reserved 0
// initial3dfix flag = 0: apply initial 3D fix settings 0x00, // Reserved 1
// aop flag = 1: apply aopCfg (useAOP flag) settings (AssistNow Autonomous) 0x00, // Reserved 2
0x1B, 0x00, // mask1 (First parameters bitmask) 0x03, // minSVs (Minimum number of satellites for navigation) = 3
// adr flag = 0: apply ADR sensor fusion on/off setting (useAdr flag) 0x10, // maxSVs (Maximum number of satellites for navigation) = 16
// If firmware is not ADR/UDR, enabling this flag will fail configuration 0x06, // minCNO (Minimum satellite signal level for navigation) = 6 dBHz
// ToDo: check this with UBX-MON-VER 0x00, // Reserved 5
0x00, 0x00, 0x00, 0x00, // mask2 (Second parameters bitmask) 0x00, // iniFix3D (Initial fix must be 3D) (0 = false 1 = true)
0x00, 0x00, // Reserved 0x00, // Reserved 6
0x03, // minSVs (Minimum number of satellites for navigation) = 3 0x00, // Reserved 7
0x10, // maxSVs (Maximum number of satellites for navigation) = 16 0x00, // Reserved 8
0x06, // minCNO (Minimum satellite signal level for navigation) = 6 dBHz 0x00, 0x00, // wknRollover 0 = firmware default
0x00, // Reserved 0x00, 0x00, 0x00, 0x00, // Reserved 9
0x00, // iniFix3D (Initial fix must be 3D) = 0 (disabled) 0x00, // Reserved 10
0x00, 0x00, // Reserved 0x00, // Reserved 11
0x00, // ackAiding (Issue acknowledgements for assistance message input) = 0 (disabled) 0x00, // usePPP (Precice Point Positioning) (0 = false, 1 = true)
0x00, 0x00, // Reserved 0x01, // useAOP (AssistNow Autonomous configuration) = 1 (enabled)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Reserved 0x00, // Reserved 12
0x00, // Reserved 0x00, // Reserved 13
0x01, // aopCfg (AssistNow Autonomous configuration) = 1 (enabled) 0x00, 0x00, // aopOrbMaxErr = 0 to reset to firmware default
0x00, 0x00, // Reserved 0x00, // Reserved 14
0x00, 0x00, // Reserved 0x00, // Reserved 15
0x00, 0x00, 0x00, 0x00, // Reserved 0x00, 0x00, // Reserved 3
0x00, 0x00, 0x00, // Reserved 0x00, 0x00, 0x00, 0x00 // Reserved 4
0x01, // useAdr (Enable/disable ADR sensor fusion) = 1 (enabled)
}; };
// Set GPS update rate to 1Hz // Set GPS update rate to 1Hz
@ -111,58 +126,88 @@ const uint8_t GPS::_message_NAVX5[] = {
const uint8_t GPS::_message_1HZ[] = { const uint8_t GPS::_message_1HZ[] = {
0xE8, 0x03, // Measurement Rate (1000ms for 1Hz) 0xE8, 0x03, // Measurement Rate (1000ms for 1Hz)
0x01, 0x00, // Navigation rate, always 1 in GPS mode 0x01, 0x00, // Navigation rate, always 1 in GPS mode
0x01, 0x00, // Time reference 0x01, 0x00 // Time reference
}; };
// Disable GGL. GGL - Geographic position (latitude and longitude), which provides the current geographical // Disable GLL. GLL - Geographic position (latitude and longitude), which provides the current geographical
// coordinates. // coordinates.
const uint8_t GPS::_message_GGL[] = { const uint8_t GPS::_message_GLL[] = {
0xF0, 0x01, // NMEA ID for GLL 0xF0, 0x01, // NMEA ID for GLL
0x01, // I/O Target 0=I/O, 1=UART1, 2=UART2, 3=USB, 4=SPI 0x00, // Rate for DDC
0x00, // Disable 0x00, // Rate for UART1
0x01, 0x01, 0x01, 0x01 // Reserved 0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
}; };
// Enable GSA. GSA - GPS DOP and active satellites, used for detailing the satellites used in the positioning and // Enable GSA. GSA - GPS DOP and active satellites, used for detailing the satellites used in the positioning and
// the DOP (Dilution of Precision) // the DOP (Dilution of Precision)
const uint8_t GPS::_message_GSA[] = { const uint8_t GPS::_message_GSA[] = {
0xF0, 0x02, // NMEA ID for GSA 0xF0, 0x02, // NMEA ID for GSA
0x01, // I/O Target 0=I/O, 1=UART1, 2=UART2, 3=USB, 4=SPI 0x00, // Rate for DDC
0x01, // Enable 0x01, // Rate for UART1
0x01, 0x01, 0x01, 0x01 // Reserved 0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
}; };
// Disable GSV. GSV - Satellites in view, details the number and location of satellites in view. // Disable GSV. GSV - Satellites in view, details the number and location of satellites in view.
const uint8_t GPS::_message_GSV[] = { const uint8_t GPS::_message_GSV[] = {
0xF0, 0x03, // NMEA ID for GSV 0xF0, 0x03, // NMEA ID for GSV
0x01, // I/O Target 0=I/O, 1=UART1, 2=UART2, 3=USB, 4=SPI 0x00, // Rate for DDC
0x00, // Disable 0x00, // Rate for UART1
0x01, 0x01, 0x01, 0x01 // Reserved 0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
}; };
// Disable VTG. VTG - Track made good and ground speed, which provides course and speed information relative to // Disable VTG. VTG - Track made good and ground speed, which provides course and speed information relative to
// the ground. // the ground.
const uint8_t GPS::_message_VTG[] = { const uint8_t GPS::_message_VTG[] = {
0xF0, 0x05, // NMEA ID for VTG 0xF0, 0x05, // NMEA ID for VTG
0x01, // I/O Target 0=I/O, 1=UART1, 2=UART2, 3=USB, 4=SPI 0x00, // Rate for DDC
0x00, // Disable 0x00, // Rate for UART1
0x01, 0x01, 0x01, 0x01 // Reserved 0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
}; };
// Enable RMC. RMC - Recommended Minimum data, the essential gps pvt (position, velocity, time) data. // Enable RMC. RMC - Recommended Minimum data, the essential gps pvt (position, velocity, time) data.
const uint8_t GPS::_message_RMC[] = { const uint8_t GPS::_message_RMC[] = {
0xF0, 0x04, // NMEA ID for RMC 0xF0, 0x04, // NMEA ID for RMC
0x01, // I/O Target 0=I/O, 1=UART1, 2=UART2, 3=USB, 4=SPI 0x00, // Rate for DDC
0x01, // Enable 0x01, // Rate for UART1
0x01, 0x01, 0x01, 0x01 // Reserved 0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
}; };
// Enable GGA. GGA - Global Positioning System Fix Data, which provides 3D location and accuracy data. // Enable GGA. GGA - Global Positioning System Fix Data, which provides 3D location and accuracy data.
const uint8_t GPS::_message_GGA[] = { const uint8_t GPS::_message_GGA[] = {
0xF0, 0x00, // NMEA ID for GGA 0xF0, 0x00, // NMEA ID for GGA
0x01, // I/O Target 0=I/O, 1=UART1, 2=UART2, 3=USB, 4=SPI 0x00, // Rate for DDC
0x01, // Enable 0x01, // Rate for UART1
0x01, 0x01, 0x01, 0x01 // Reserved 0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
};
// Disable UBX-AID-ALPSRV as it may confuse TinyGPS. The Neo-6 seems to send this message
// whether the AID Autonomous is enabled or not
const uint8_t GPS::_message_AID[] = {
0x0B, 0x32, // NMEA ID for UBX-AID-ALPSRV
0x00, // Rate for DDC
0x00, // Rate for UART1
0x00, // Rate for UART2
0x00, // Rate for USB
0x00, // Rate for SPI
0x00 // Reserved
}; };
// The Power Management configuration allows the GPS module to operate in different power modes for optimized // The Power Management configuration allows the GPS module to operate in different power modes for optimized
@ -176,17 +221,18 @@ const uint8_t GPS::_message_GGA[] = {
// is set to Interval; otherwise, it must be set to '0'. The 'onTime' field specifies the duration of the ON phase // is set to Interval; otherwise, it must be set to '0'. The 'onTime' field specifies the duration of the ON phase
// and must be smaller than the period. It is only valid when the powerSetupValue is set to Interval; otherwise, // and must be smaller than the period. It is only valid when the powerSetupValue is set to Interval; otherwise,
// it must be set to '0'. // it must be set to '0'.
// This command applies to M8 and higher products
const uint8_t GPS::_message_PMS[] = { const uint8_t GPS::_message_PMS[] = {
0x00, // Version (0) 0x00, // Version (0)
0x03, // Power setup value 0x03, // Power setup value 3 = Agresssive 1Hz
0x00, 0x00, // period: not applicable, set to 0 0x00, 0x00, // period: not applicable, set to 0
0x00, 0x00, // onTime: not applicable, set to 0 0x00, 0x00, // onTime: not applicable, set to 0
0x97, 0x6F // reserved, generated by u-center 0x00, 0x00 // reserved, generated by u-center
}; };
const uint8_t GPS::_message_SAVE[] = { const uint8_t GPS::_message_SAVE[] = {
0x00, 0x00, 0x00, 0x00, // clearMask: no sections cleared 0x00, 0x00, 0x00, 0x00, // clearMask: no sections cleared
0xFF, 0xFF, 0x00, 0x00, // saveMask: save all sections 0xFF, 0xFF, 0x00, 0x00, // saveMask: save all sections
0x00, 0x00, 0x00, 0x00, // loadMask: no sections loaded 0x00, 0x00, 0x00, 0x00, // loadMask: no sections loaded
0x0F // deviceMask: BBR, Flash, EEPROM, and SPI Flash 0x17 // deviceMask: BBR, Flash, EEPROM, and SPI Flash
}; };

View File

@ -113,7 +113,15 @@ void portduinoSetup()
try { try {
if (yamlConfig["Logging"]) { if (yamlConfig["Logging"]) {
settingsMap[debugmode] = yamlConfig["Logging"]["DebugMode"].as<bool>(false); if (yamlConfig["Logging"]["LogLevel"].as<std::string>("info") == "debug") {
settingsMap[logoutputlevel] = level_debug;
} else if (yamlConfig["Logging"]["LogLevel"].as<std::string>("info") == "info") {
settingsMap[logoutputlevel] = level_info;
} else if (yamlConfig["Logging"]["LogLevel"].as<std::string>("info") == "warn") {
settingsMap[logoutputlevel] = level_warn;
} else if (yamlConfig["Logging"]["LogLevel"].as<std::string>("info") == "error") {
settingsMap[logoutputlevel] = level_error;
}
} }
if (yamlConfig["Lora"]) { if (yamlConfig["Lora"]) {
settingsMap[use_sx1262] = false; settingsMap[use_sx1262] = false;

View File

@ -33,10 +33,11 @@ enum configNames {
displayOffsetY, displayOffsetY,
displayInvert, displayInvert,
keyboardDevice, keyboardDevice,
debugmode logoutputlevel
}; };
enum { no_screen, st7789, st7735, st7735s }; enum { no_screen, st7789, st7735, st7735s };
enum { no_touchscreen, xpt2046 }; enum { no_touchscreen, xpt2046 };
enum { level_error, level_warn, level_info, level_debug };
extern std::map<configNames, int> settingsMap; extern std::map<configNames, int> settingsMap;
extern std::map<configNames, std::string> settingsStrings; extern std::map<configNames, std::string> settingsStrings;