From 730460bd99ff98bd2ddca58cf35195a70b82ded3 Mon Sep 17 00:00:00 2001 From: Th3maz1ng Date: Sat, 5 Oct 2019 18:24:08 +0200 Subject: [PATCH] Added dedicated class for power management --- src/app/PowerManager.cpp | 47 ++++++++++++++++++++++++++++++++++++++++ src/app/PowerManager.h | 28 ++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/app/PowerManager.cpp create mode 100644 src/app/PowerManager.h diff --git a/src/app/PowerManager.cpp b/src/app/PowerManager.cpp new file mode 100644 index 0000000..7652a6c --- /dev/null +++ b/src/app/PowerManager.cpp @@ -0,0 +1,47 @@ +#include "PowerManager.h" + +PowerManager::PowerManager() +{ + +} + +PowerManager::~PowerManager() +{ + +} + +PowerManager::PowerInfo PowerManager::getPowerInfo(const uint16_t nbOfMeasures) const +{ + uint16_t batteryMeasures(0), temp(0); + unsigned char i(0); + int checkLevel(0); + PowerInfo p; + + for(;i < nbOfMeasures;i++) + { + temp = analogRead(ADC); + batteryMeasures += temp; + } + + batteryMeasures /= nbOfMeasures; + + if(batteryMeasures <= USB_THRESHOLD) + { + p.powerType = USB; + p.level = 0; + } + else + { + p.powerType = BATTERY; + checkLevel = ((double)(batteryMeasures-BATT_EMPTY)*100.0/(double)BATT_DIFF); + + if(checkLevel > 100) + p.level = 100; + else if (checkLevel < 0) + p.level = 0; + else + p.level = checkLevel; + } + + return p; +} diff --git a/src/app/PowerManager.h b/src/app/PowerManager.h new file mode 100644 index 0000000..946cfc2 --- /dev/null +++ b/src/app/PowerManager.h @@ -0,0 +1,28 @@ +#ifndef POWERMANAGER +#define POWERMANAGER + +#include "Arduino.h" +#include "definition.h" + +class PowerManager +{ + friend class SAB; + + public: + enum PowerType { BATTERY = 0, USB }; + //Data structure for the battery info + struct PowerInfo + { + PowerType powerType; + unsigned char level; + }; + + ~PowerManager(); + + PowerManager::PowerInfo getPowerInfo(const uint16_t nbOfMeasures = 5) const; + protected: + PowerManager(); + private: +}; + +#endif //POWERMANAGER_H