#pragma once #include "BluetoothStatus.h" #include "MeshModule.h" #include "PowerStatus.h" #include "concurrency/OSThread.h" #include "configuration.h" #include "main.h" #include #include #if !MESHTASTIC_EXCLUDE_INPUTBROKER #include "input/InputBroker.h" #endif class StatusLEDModule : private concurrency::OSThread { bool slowTrack = false; public: StatusLEDModule(); int handleStatusUpdate(const meshtastic::Status *); #if !MESHTASTIC_EXCLUDE_INPUTBROKER int handleInputEvent(const InputEvent *arg); #endif void setPowerLED(bool); protected: unsigned int my_interval = 1000; // interval in millisconds virtual int32_t runOnce() override; CallbackObserver bluetoothStatusObserver = CallbackObserver(this, &StatusLEDModule::handleStatusUpdate); CallbackObserver powerStatusObserver = CallbackObserver(this, &StatusLEDModule::handleStatusUpdate); #if !MESHTASTIC_EXCLUDE_INPUTBROKER CallbackObserver inputObserver = CallbackObserver(this, &StatusLEDModule::handleInputEvent); #endif private: bool CHARGE_LED_state = LED_STATE_OFF; bool PAIRING_LED_state = LED_STATE_OFF; uint32_t PAIRING_LED_starttime = 0; uint32_t lastUserbuttonTime = 0; uint32_t POWER_LED_starttime = 0; bool doing_fast_blink = false; enum PowerState { discharging, charging, charged, critical }; PowerState power_state = discharging; enum BLEState { unpaired, pairing, connected }; BLEState ble_state = unpaired; }; extern StatusLEDModule *statusLEDModule;