ref: fdc89f1a20889c0295534f58dc2e82ce8c55a18b
src/components/battery/BatteryController.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#pragma once #include <cstdint> #include <drivers/include/nrfx_saadc.h> #include <systemtask/SystemTask.h> namespace Pinetime { namespace Controllers { class Battery { public: Battery(); void ReadPowerState(); void MeasureVoltage(); void Register(System::SystemTask* systemTask); uint8_t PercentRemaining() const { return percentRemaining; } bool BatteryIsLow() const { return percentRemaining <= lowBatteryThreshold; } uint16_t Voltage() const { return voltage; } bool IsCharging() const { // isCharging will go up and down when fully charged // isFull makes sure this returns false while fully charged. return isCharging && !isFull; } bool IsPowerPresent() const { return isPowerPresent; } private: static Battery* instance; nrf_saadc_value_t saadc_value; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; uint16_t voltage = 0; uint8_t percentRemaining = 0; bool batteryLowNotified = false; bool isFull = false; bool isCharging = false; bool isPowerPresent = false; bool firstMeasurement = true; void SaadcInit(); void SaadcEventHandler(nrfx_saadc_evt_t const* p_event); static void AdcCallbackStatic(nrfx_saadc_evt_t const* event); static constexpr uint8_t lowBatteryThreshold {15}; bool isReading = false; Pinetime::System::SystemTask* systemTask = nullptr; }; } } |