route debug output back to the CDC-ACM device instead of JLINK

This commit is contained in:
geeksville 2020-09-26 13:49:22 -07:00
parent db33200468
commit 266ba03bb7
3 changed files with 85 additions and 112 deletions

View File

@ -1,31 +1,33 @@
#pragma once #pragma once
#include <Arduino.h>
#include "Status.h" #include "Status.h"
#include "configuration.h" #include "configuration.h"
#include <Arduino.h>
namespace meshtastic { namespace meshtastic
{
/// Describes the state of the GPS system. /// Describes the state of the GPS system.
class GPSStatus : public Status class GPSStatus : public Status
{ {
private: private:
CallbackObserver<GPSStatus, const GPSStatus *> statusObserver = CallbackObserver<GPSStatus, const GPSStatus *>(this, &GPSStatus::updateStatus); CallbackObserver<GPSStatus, const GPSStatus *> statusObserver =
CallbackObserver<GPSStatus, const GPSStatus *>(this, &GPSStatus::updateStatus);
bool hasLock = false; // default to false, until we complete our first read bool hasLock = false; // default to false, until we complete our first read
bool isConnected = false; // Do we have a GPS we are talking to 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 latitude = 0, longitude = 0; // as an int mult by 1e-7 to get value as double
int32_t altitude = 0; 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 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 heading = 0;
uint32_t numSatellites = 0; uint32_t numSatellites = 0;
public: public:
GPSStatus() { statusType = STATUS_TYPE_GPS; }
GPSStatus() { GPSStatus(bool hasLock, bool isConnected, int32_t latitude, int32_t longitude, int32_t altitude, uint32_t dop,
statusType = STATUS_TYPE_GPS; uint32_t heading, uint32_t numSatellites)
} : Status()
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->hasLock = hasLock;
this->isConnected = isConnected; this->isConnected = isConnected;
@ -39,65 +41,32 @@ namespace meshtastic {
GPSStatus(const GPSStatus &); GPSStatus(const GPSStatus &);
GPSStatus &operator=(const GPSStatus &); GPSStatus &operator=(const GPSStatus &);
void observe(Observable<const GPSStatus *> *source) void observe(Observable<const GPSStatus *> *source) { statusObserver.observe(source); }
{
statusObserver.observe(source);
}
bool getHasLock() const bool getHasLock() const { return hasLock; }
{
return hasLock;
}
bool getIsConnected() const bool getIsConnected() const { return isConnected; }
{
return isConnected;
}
int32_t getLatitude() const int32_t getLatitude() const { return latitude; }
{
return latitude;
}
int32_t getLongitude() const int32_t getLongitude() const { return longitude; }
{
return longitude;
}
int32_t getAltitude() const int32_t getAltitude() const { return altitude; }
{
return altitude;
}
uint32_t getDOP() const uint32_t getDOP() const { return dop; }
{
return dop;
}
uint32_t getHeading() const uint32_t getHeading() const { return heading; }
{
return heading;
}
uint32_t getNumSatellites() const uint32_t getNumSatellites() const { return numSatellites; }
{
return numSatellites;
}
bool matches(const GPSStatus *newStatus) const bool matches(const GPSStatus *newStatus) const
{ {
return ( return (newStatus->hasLock != hasLock || newStatus->isConnected != isConnected || newStatus->latitude != latitude ||
newStatus->hasLock != hasLock || newStatus->longitude != longitude || newStatus->altitude != altitude || newStatus->dop != dop ||
newStatus->isConnected != isConnected || newStatus->heading != heading || newStatus->numSatellites != numSatellites);
newStatus->latitude != latitude ||
newStatus->longitude != longitude ||
newStatus->altitude != altitude ||
newStatus->dop != dop ||
newStatus->heading != heading ||
newStatus->numSatellites != numSatellites
);
} }
int updateStatus(const GPSStatus *newStatus) { int updateStatus(const GPSStatus *newStatus)
{
// Only update the status if values have actually changed // Only update the status if values have actually changed
bool isDirty; bool isDirty;
{ {
@ -113,14 +82,17 @@ namespace meshtastic {
numSatellites = newStatus->numSatellites; numSatellites = newStatus->numSatellites;
} }
if (isDirty) { 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); 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); onNewStatus.notifyObservers(this);
} }
return 0; return 0;
} }
}; };
} } // namespace meshtastic
extern meshtastic::GPSStatus *gpsStatus; extern meshtastic::GPSStatus *gpsStatus;

View File

@ -81,7 +81,7 @@ void NMEAGPS::loop()
} }
// expect gps pos lat=37.520825, lon=-122.309162, alt=158 // 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); altitude, dop * 1e-2, heading * 1e-5);
} }

View File

@ -29,6 +29,7 @@
fix bootloader to use two buttons - remove bootloader hacks fix bootloader to use two buttons - remove bootloader hacks
fix battery voltage sensing fix battery voltage sensing
fix floating point SEGGER printf on nrf52 - see "new NMEA GPS pos"
get second button working in app load get second button working in app load
if battery falls too low deassert PWR_ON (to force board to shutdown) if battery falls too low deassert PWR_ON (to force board to shutdown)
fix display width and height fix display width and height
@ -201,7 +202,7 @@ FIXME define/FIX flash access
#define PIN_SPI_SCK (0 + 19) #define PIN_SPI_SCK (0 + 19)
// To debug via the segger JLINK console rather than the CDC-ACM serial device // To debug via the segger JLINK console rather than the CDC-ACM serial device
#define USE_SEGGER // #define USE_SEGGER
#ifdef __cplusplus #ifdef __cplusplus
} }