diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-08-28 13:26:53 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-08-28 13:26:53 +1000 |
| commit | 3a0c42f9240eedfbc6a1e94ad3a59c52664fb5b5 (patch) | |
| tree | 0505db40de6fceaf5829548ef86f4cb53b739bcb /src/battery/include | |
| parent | a1327763ab70dbf4996e032dd227de368f78f4ad (diff) | |
| download | tangara-fw-3a0c42f9240eedfbc6a1e94ad3a59c52664fb5b5.tar.gz | |
Move battery measurement to its own class
Diffstat (limited to 'src/battery/include')
| -rw-r--r-- | src/battery/include/battery.hpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/battery/include/battery.hpp b/src/battery/include/battery.hpp new file mode 100644 index 00000000..dcb9b4ea --- /dev/null +++ b/src/battery/include/battery.hpp @@ -0,0 +1,44 @@ +/* + * Copyright 2023 jacqueline <me@jacqueline.id.au> + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#pragma once + +#include <cstdint> + +#include "freertos/FreeRTOS.h" +#include "freertos/timers.h" + +#include "adc.hpp" +#include "samd.hpp" + +namespace battery { + +class Battery { + public: + Battery(drivers::Samd* samd, drivers::AdcBattery* adc); + ~Battery(); + + auto Update() -> void; + + struct BatteryState { + uint_fast8_t percent; + bool is_charging; + }; + + auto State() -> std::optional<BatteryState>; + + private: + auto EmitEvent() -> void; + + drivers::Samd* samd_; + drivers::AdcBattery* adc_; + + TimerHandle_t timer_; + std::mutex state_mutex_; + std::optional<BatteryState> state_; +}; + +} // namespace battery |
