OMOTE/Platformio/HAL/HardwareAbstract.hpp
2023-09-09 21:47:04 -04:00

54 lines
1.7 KiB
C++

// OMOTE Hardware Abstraction
// 2023 Matthew Colvin
#pragma once
#include <functional>
#include <lvgl.h>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "BatteryInterface.h"
#include "DisplayInterface.h"
#include "wifiHandlerInterface.h"
class HardwareAbstract {
public:
struct batteryStatus {
/// @brief Percent of battery remaining (0-100]
int percentage;
/// @brief True - Battery is Charging
/// False - Battery discharging
bool isCharging;
};
virtual std::optional<batteryStatus> getBatteryStatus();
HardwareAbstract(std::shared_ptr<BatteryInterface> aBattery = nullptr,
std::shared_ptr<wifiHandlerInterface> aWifiHandler = nullptr,
std::shared_ptr<DisplayInterface> aDisplay = nullptr
);
/// @brief Override in order to do setup of hardware devices
virtual void init() = 0;
/// @brief Override to allow printing of a message for debugging
/// @param message - Debug message
virtual void debugPrint(std::string message) = 0;
/// @brief Register function to be ran when hardware notifies battery
/// status has changed.
/// @param onBatteryStatusChangeHandler - Callable to be ran when batter status changes
void onBatteryChange(std::function<void(batteryStatus)> onBatteryStatusChangeHandler);
protected:
/// @brief Call in child class implementation to alert users
/// the battery status has changed
/// @param aStatus - Current Battery Status
void notifyBatteryChange(batteryStatus aStatus);
private:
std::shared_ptr<BatteryInterface> mBattery;
std::shared_ptr<wifiHandlerInterface> mWifiHandler;
std::shared_ptr<DisplayInterface> mDisplay;
};