summaryrefslogtreecommitdiff
path: root/src/battery/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-28 13:26:53 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-28 13:26:53 +1000
commit3a0c42f9240eedfbc6a1e94ad3a59c52664fb5b5 (patch)
tree0505db40de6fceaf5829548ef86f4cb53b739bcb /src/battery/include
parenta1327763ab70dbf4996e032dd227de368f78f4ad (diff)
downloadtangara-fw-3a0c42f9240eedfbc6a1e94ad3a59c52664fb5b5.tar.gz
Move battery measurement to its own class
Diffstat (limited to 'src/battery/include')
-rw-r--r--src/battery/include/battery.hpp44
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