summaryrefslogtreecommitdiff
path: root/src/components/battery/BatteryController.cpp
diff options
context:
space:
mode:
authorJoaquim <joaquim.org@gmail.com>2021-04-26 21:29:48 +0100
committerJoaquim <joaquim.org@gmail.com>2021-04-26 21:29:48 +0100
commitcd0d85dff95bbc5f285d92eb78a642aab1ae4b8b (patch)
treefc568aa2516c8c64cc55eb0d08e9a929c11b454a /src/components/battery/BatteryController.cpp
parent5fc07a8df7d18d1fa9c4971f2c7b69ea68db559b (diff)
parenteedff2c06c292bda8dcb92fc04c67097fe72e22f (diff)
Merge branch 'develop' of
https://github.com/JF002/InfiniTime into StepsApp
Diffstat (limited to 'src/components/battery/BatteryController.cpp')
-rw-r--r--src/components/battery/BatteryController.cpp78
1 files changed, 37 insertions, 41 deletions
diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp
index 99afa55c..b39efefb 100644
--- a/src/components/battery/BatteryController.cpp
+++ b/src/components/battery/BatteryController.cpp
@@ -7,33 +7,33 @@
using namespace Pinetime::Controllers;
-Battery *Battery::instance = nullptr;
+Battery* Battery::instance = nullptr;
Battery::Battery() {
instance = this;
}
void Battery::Init() {
- nrf_gpio_cfg_input(chargingPin, (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup);
- nrf_gpio_cfg_input(powerPresentPin, (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup);
+ nrf_gpio_cfg_input(chargingPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup);
+ nrf_gpio_cfg_input(powerPresentPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup);
}
void Battery::Update() {
isCharging = !nrf_gpio_pin_read(chargingPin);
isPowerPresent = !nrf_gpio_pin_read(powerPresentPin);
-
- if ( isReading ) return;
+
+ if (isReading)
+ return;
// Non blocking read
samples = 0;
isReading = true;
- SaadcInit();
+ SaadcInit();
- nrfx_saadc_sample();
-
+ nrfx_saadc_sample();
}
-void Battery::adcCallbackStatic(nrfx_saadc_evt_t const *event) {
+void Battery::adcCallbackStatic(nrfx_saadc_evt_t const* event) {
instance->SaadcEventHandler(event);
}
@@ -41,48 +41,44 @@ void Battery::SaadcInit() {
nrfx_saadc_config_t adcConfig = NRFX_SAADC_DEFAULT_CONFIG;
APP_ERROR_CHECK(nrfx_saadc_init(&adcConfig, adcCallbackStatic));
- nrf_saadc_channel_config_t adcChannelConfig = {
- .resistor_p = NRF_SAADC_RESISTOR_DISABLED,
- .resistor_n = NRF_SAADC_RESISTOR_DISABLED,
- .gain = NRF_SAADC_GAIN1_5,
- .reference = NRF_SAADC_REFERENCE_INTERNAL,
- .acq_time = NRF_SAADC_ACQTIME_3US,
- .mode = NRF_SAADC_MODE_SINGLE_ENDED,
- .burst = NRF_SAADC_BURST_ENABLED,
- .pin_p = batteryVoltageAdcInput,
- .pin_n = NRF_SAADC_INPUT_DISABLED
- };
+ nrf_saadc_channel_config_t adcChannelConfig = {.resistor_p = NRF_SAADC_RESISTOR_DISABLED,
+ .resistor_n = NRF_SAADC_RESISTOR_DISABLED,
+ .gain = NRF_SAADC_GAIN1_5,
+ .reference = NRF_SAADC_REFERENCE_INTERNAL,
+ .acq_time = NRF_SAADC_ACQTIME_3US,
+ .mode = NRF_SAADC_MODE_SINGLE_ENDED,
+ .burst = NRF_SAADC_BURST_ENABLED,
+ .pin_p = batteryVoltageAdcInput,
+ .pin_n = NRF_SAADC_INPUT_DISABLED};
APP_ERROR_CHECK(nrfx_saadc_channel_init(0, &adcChannelConfig));
APP_ERROR_CHECK(nrfx_saadc_buffer_convert(&saadc_value, 1));
-
}
-void Battery::SaadcEventHandler(nrfx_saadc_evt_t const * p_event) {
+void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) {
+
+ const float battery_max = 4.18; // maximum voltage of battery ( max charging voltage is 4.21 )
+ const float battery_min = 3.20; // minimum voltage of battery before shutdown ( depends on the battery )
- const float battery_max = 4.18; // maximum voltage of battery ( max charging voltage is 4.21 )
- const float battery_min = 3.20; // minimum voltage of battery before shutdown ( depends on the battery )
+ if (p_event->type == NRFX_SAADC_EVT_DONE) {
- if (p_event->type == NRFX_SAADC_EVT_DONE) {
-
- APP_ERROR_CHECK(nrfx_saadc_buffer_convert(&saadc_value, 1));
+ APP_ERROR_CHECK(nrfx_saadc_buffer_convert(&saadc_value, 1));
- voltage = (static_cast<float>(p_event->data.done.p_buffer[0]) * 2.04f) / (1024 / 3.0f);
- voltage = roundf(voltage * 100) / 100;
+ voltage = (static_cast<float>(p_event->data.done.p_buffer[0]) * 2.04f) / (1024 / 3.0f);
+ voltage = roundf(voltage * 100) / 100;
- percentRemaining = static_cast<int>(((voltage - battery_min) / (battery_max - battery_min)) * 100);
+ percentRemaining = static_cast<int>(((voltage - battery_min) / (battery_max - battery_min)) * 100);
- percentRemaining = std::max(percentRemaining, 0);
- percentRemaining = std::min(percentRemaining, 100);
+ percentRemaining = std::max(percentRemaining, 0);
+ percentRemaining = std::min(percentRemaining, 100);
- percentRemainingBuffer.insert(percentRemaining);
+ percentRemainingBuffer.insert(percentRemaining);
- samples++;
- if ( samples > percentRemainingSamples ) {
- nrfx_saadc_uninit();
- isReading = false;
- } else {
- nrfx_saadc_sample();
- }
+ samples++;
+ if (samples > percentRemainingSamples) {
+ nrfx_saadc_uninit();
+ isReading = false;
+ } else {
+ nrfx_saadc_sample();
}
}
-
+}