From 266ba03bb724441ed2e00d8f55bf8af22c750d68 Mon Sep 17 00:00:00 2001 From: geeksville Date: Sat, 26 Sep 2020 13:49:22 -0700 Subject: [PATCH] route debug output back to the CDC-ACM device instead of JLINK --- src/GPSStatus.h | 192 +++++++++++++++++----------------------- src/gps/NMEAGPS.cpp | 2 +- variants/eink/variant.h | 3 +- 3 files changed, 85 insertions(+), 112 deletions(-) diff --git a/src/GPSStatus.h b/src/GPSStatus.h index ed9e0fbc..237964eb 100644 --- a/src/GPSStatus.h +++ b/src/GPSStatus.h @@ -1,126 +1,98 @@ #pragma once -#include #include "Status.h" #include "configuration.h" +#include -namespace meshtastic { +namespace meshtastic +{ - /// Describes the state of the GPS system. - class GPSStatus : public Status +/// Describes the state of the GPS system. +class GPSStatus : public Status +{ + + private: + CallbackObserver statusObserver = + CallbackObserver(this, &GPSStatus::updateStatus); + + bool hasLock = false; // default to false, until we complete our first read + bool isConnected = false; // Do we have a GPS we are talking to + int32_t latitude = 0, longitude = 0; // as an int mult by 1e-7 to get value as double + int32_t altitude = 0; + uint32_t dop = 0; // Diminution of position; PDOP where possible (UBlox), HDOP otherwise (TinyGPS) in 10^2 units (needs + // scaling before use) + uint32_t heading = 0; + uint32_t numSatellites = 0; + + public: + GPSStatus() { statusType = STATUS_TYPE_GPS; } + GPSStatus(bool hasLock, bool isConnected, int32_t latitude, int32_t longitude, int32_t altitude, uint32_t dop, + uint32_t heading, uint32_t numSatellites) + : Status() { + this->hasLock = hasLock; + this->isConnected = isConnected; + this->latitude = latitude; + this->longitude = longitude; + this->altitude = altitude; + this->dop = dop; + this->heading = heading; + this->numSatellites = numSatellites; + } + GPSStatus(const GPSStatus &); + GPSStatus &operator=(const GPSStatus &); - private: - CallbackObserver statusObserver = CallbackObserver(this, &GPSStatus::updateStatus); + void observe(Observable *source) { statusObserver.observe(source); } - bool hasLock = false; // default to false, until we complete our first read - bool isConnected = false; // Do we have a GPS we are talking to - int32_t latitude = 0, longitude = 0; // as an int mult by 1e-7 to get value as double - int32_t altitude = 0; - uint32_t dop = 0; // Diminution of position; PDOP where possible (UBlox), HDOP otherwise (TinyGPS) in 10^2 units (needs scaling before use) - uint32_t heading = 0; - uint32_t numSatellites = 0; + bool getHasLock() const { return hasLock; } - public: + bool getIsConnected() const { return isConnected; } - GPSStatus() { - statusType = STATUS_TYPE_GPS; - } - GPSStatus( bool hasLock, bool isConnected, int32_t latitude, int32_t longitude, int32_t altitude, uint32_t dop, uint32_t heading, uint32_t numSatellites ) : Status() + int32_t getLatitude() const { return latitude; } + + int32_t getLongitude() const { return longitude; } + + int32_t getAltitude() const { return altitude; } + + uint32_t getDOP() const { return dop; } + + uint32_t getHeading() const { return heading; } + + uint32_t getNumSatellites() const { return numSatellites; } + + bool matches(const GPSStatus *newStatus) const + { + return (newStatus->hasLock != hasLock || newStatus->isConnected != isConnected || newStatus->latitude != latitude || + newStatus->longitude != longitude || newStatus->altitude != altitude || newStatus->dop != dop || + newStatus->heading != heading || newStatus->numSatellites != numSatellites); + } + int updateStatus(const GPSStatus *newStatus) + { + // Only update the status if values have actually changed + bool isDirty; { - this->hasLock = hasLock; - this->isConnected = isConnected; - this->latitude = latitude; - this->longitude = longitude; - this->altitude = altitude; - this->dop = dop; - this->heading = heading; - this->numSatellites = numSatellites; + isDirty = matches(newStatus); + initialized = true; + hasLock = newStatus->hasLock; + isConnected = newStatus->isConnected; + latitude = newStatus->latitude; + longitude = newStatus->longitude; + altitude = newStatus->altitude; + dop = newStatus->dop; + heading = newStatus->heading; + numSatellites = newStatus->numSatellites; } - GPSStatus(const GPSStatus &); - GPSStatus &operator=(const GPSStatus &); - - void observe(Observable *source) - { - statusObserver.observe(source); + if (isDirty) { + if (hasLock) + DEBUG_MSG("New GPS pos lat=%f, lon=%f, alt=%d, pdop=%f, heading=%f, sats=%d\n", latitude * 1e-7, longitude * 1e-7, + altitude, dop * 1e-2, heading * 1e-5, numSatellites); + else + DEBUG_MSG("No GPS lock\n"); + onNewStatus.notifyObservers(this); } + return 0; + } +}; - bool getHasLock() const - { - return hasLock; - } - - bool getIsConnected() const - { - return isConnected; - } - - int32_t getLatitude() const - { - return latitude; - } - - int32_t getLongitude() const - { - return longitude; - } - - int32_t getAltitude() const - { - return altitude; - } - - uint32_t getDOP() const - { - return dop; - } - - uint32_t getHeading() const - { - return heading; - } - - uint32_t getNumSatellites() const - { - return numSatellites; - } - - bool matches(const GPSStatus *newStatus) const - { - return ( - newStatus->hasLock != hasLock || - newStatus->isConnected != isConnected || - newStatus->latitude != latitude || - newStatus->longitude != longitude || - newStatus->altitude != altitude || - newStatus->dop != dop || - newStatus->heading != heading || - newStatus->numSatellites != numSatellites - ); - } - int updateStatus(const GPSStatus *newStatus) { - // Only update the status if values have actually changed - bool isDirty; - { - isDirty = matches(newStatus); - initialized = true; - hasLock = newStatus->hasLock; - isConnected = newStatus->isConnected; - latitude = newStatus->latitude; - longitude = newStatus->longitude; - altitude = newStatus->altitude; - dop = newStatus->dop; - heading = newStatus->heading; - numSatellites = newStatus->numSatellites; - } - if(isDirty) { - DEBUG_MSG("New GPS pos lat=%f, lon=%f, alt=%d, pdop=%f, heading=%f, sats=%d\n", latitude * 1e-7, longitude * 1e-7, altitude, dop * 1e-2, heading * 1e-5, numSatellites); - onNewStatus.notifyObservers(this); - } - return 0; - } - - }; - -} +} // namespace meshtastic extern meshtastic::GPSStatus *gpsStatus; \ No newline at end of file diff --git a/src/gps/NMEAGPS.cpp b/src/gps/NMEAGPS.cpp index 48a564d4..31df07c3 100644 --- a/src/gps/NMEAGPS.cpp +++ b/src/gps/NMEAGPS.cpp @@ -81,7 +81,7 @@ void NMEAGPS::loop() } // expect gps pos lat=37.520825, lon=-122.309162, alt=158 - DEBUG_MSG("new NMEA GPS pos lat=%f, lon=%f, alt=%d, hdop=%f, heading=%f\n", latitude * 1e-7, longitude * 1e-7, + DEBUG_MSG("new NMEA GPS pos lat=%f, lon=%f, alt=%d, hdop=%g, heading=%f\n", latitude * 1e-7, longitude * 1e-7, altitude, dop * 1e-2, heading * 1e-5); } diff --git a/variants/eink/variant.h b/variants/eink/variant.h index 2898e15f..bc54f7a5 100644 --- a/variants/eink/variant.h +++ b/variants/eink/variant.h @@ -29,6 +29,7 @@ fix bootloader to use two buttons - remove bootloader hacks fix battery voltage sensing +fix floating point SEGGER printf on nrf52 - see "new NMEA GPS pos" get second button working in app load if battery falls too low deassert PWR_ON (to force board to shutdown) fix display width and height @@ -201,7 +202,7 @@ FIXME define/FIX flash access #define PIN_SPI_SCK (0 + 19) // To debug via the segger JLINK console rather than the CDC-ACM serial device -#define USE_SEGGER +// #define USE_SEGGER #ifdef __cplusplus }