mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-10-29 20:52:39 +00:00
77 lines
2.6 KiB
C++
77 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <helpers/SensorManager.h>
|
|
#include <helpers/sensors/LocationProvider.h>
|
|
#if CARDPUTER_ADV_UI
|
|
using CardputerSensorBase = SensorManager;
|
|
#else
|
|
#include <helpers/sensors/EnvironmentSensorManager.h>
|
|
using CardputerSensorBase = EnvironmentSensorManager;
|
|
#endif
|
|
|
|
class CardputerSensorManager : public CardputerSensorBase {
|
|
private:
|
|
bool gps_active = false;
|
|
bool gps_serial_open = false;
|
|
uint32_t next_gps_update = 0;
|
|
uint32_t standby_renew_at = 0;
|
|
#if ENV_INCLUDE_GPS
|
|
LocationProvider *_location;
|
|
void armGpsPowerSavingCycle();
|
|
|
|
protected:
|
|
bool telemetryGpsDetected() const override { return gps_serial_open; }
|
|
bool telemetryGpsActive() const override { return gps_active; }
|
|
void telemetryGpsStart() override { start_gps(); }
|
|
void telemetryGpsStop() override { stop_gps(); }
|
|
#endif
|
|
|
|
public:
|
|
#if ENV_INCLUDE_GPS
|
|
#if CARDPUTER_ADV_UI
|
|
CardputerSensorManager(LocationProvider &location) : _location(&location) {}
|
|
#else
|
|
CardputerSensorManager(LocationProvider &location) : CardputerSensorBase(location), _location(&location) {}
|
|
#endif
|
|
#else
|
|
CardputerSensorManager() = default;
|
|
#endif
|
|
bool begin() override;
|
|
bool querySensors(uint8_t requester_permissions, CayenneLPP &telemetry) override;
|
|
void loop() override;
|
|
int getNumSettings() const override;
|
|
const char *getSettingName(int i) const override;
|
|
const char *getSettingValue(int i) const override;
|
|
bool setSettingValue(const char *name, const char *value) override;
|
|
void setPowerSavingEnabled(bool enabled) override;
|
|
bool isGPSDetected() const override {
|
|
#if ENV_INCLUDE_GPS
|
|
return gps_serial_open;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
// The cap has command-controlled standby, not a GPIO power switch. A
|
|
// pinless LocationProvider::isEnabled() cannot report its logical state.
|
|
bool isGpsPowered() const override { return gps_active; }
|
|
bool gpsUsesSerialUart(uint8_t uart) const override { return uart == 1 && gps_serial_open; }
|
|
// The cap cannot prove electrical silence without an enable pin. Do not
|
|
// let the environmental base or a serial bridge release this fixed UART.
|
|
bool gpsSerialTransportMayConflict(uint8_t uart) const override { return gpsUsesSerialUart(uart); }
|
|
bool gpsSerialTransportCanYield(uint8_t) const override { return false; }
|
|
bool setGpsSerialTransportBlocked(uint8_t, bool) override { return false; }
|
|
void shutdownGpsTransportForDeepSleep() override;
|
|
LocationProvider *getLocationProvider() override {
|
|
#if ENV_INCLUDE_GPS
|
|
return _location;
|
|
#else
|
|
return nullptr;
|
|
#endif
|
|
}
|
|
#if ENV_INCLUDE_GPS
|
|
void start_gps();
|
|
void stop_gps();
|
|
#endif
|
|
void gps_standby(bool active);
|
|
};
|