From fcbd341c1cf0084d50e7d32337013095d45091b9 Mon Sep 17 00:00:00 2001 From: JF Date: Fri, 27 Dec 2019 16:05:35 +0100 Subject: Implement battery measurement in BatteryController. Update battery info on wake up (with button) --- src/main.cpp | 79 +++++++++--------------------------------------------------- 1 file changed, 12 insertions(+), 67 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 533d5f5b..b883ce02 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,14 +6,12 @@ #include #include #include - #include #include #include #include -#include - #include "BLE/BleManager.h" +#include "Components/Battery/BatteryController.h" #if NRF_LOG_ENABLED #include "Logging/NrfLogger.h" @@ -23,10 +21,11 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif -Pinetime::Applications::DisplayApp displayApp; +std::unique_ptr displayApp; TaskHandle_t systemThread; bool isSleeping = false; TimerHandle_t debounceTimer; +Pinetime::Controllers::Battery batteryController; extern "C" { void vApplicationIdleHook() { @@ -47,25 +46,24 @@ void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action void DebounceTimerCallback(TimerHandle_t xTimer) { xTimerStop(xTimer, 0); if(isSleeping) { - displayApp.PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToRunning); + displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToRunning); isSleeping = false; + batteryController.Update(); } else { - displayApp.PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToSleep); + displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToSleep); isSleeping = true; } } -void nrfx_saadc_event_handler(nrfx_saadc_evt_t const * p_event) { - -} - - void SystemTask(void *) { APP_GPIOTE_INIT(2); bool erase_bonds=false; nrf_sdh_freertos_init(ble_manager_start_advertising, &erase_bonds); - displayApp.Start(); + displayApp->Start(); + + batteryController.Init(); + batteryController.Update(); debounceTimer = xTimerCreate ("debounceTimer", 200, pdFALSE, (void *) 0, DebounceTimerCallback); @@ -82,69 +80,16 @@ void SystemTask(void *) { nrfx_gpiote_in_init(13, &pinConfig, nrfx_gpiote_evt_handler); - nrf_gpio_cfg_input(12, (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup); - nrf_gpio_cfg_input(19, (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup); - - nrf_gpio_cfg_output(27); - nrf_gpio_pin_set(27); - - nrfx_saadc_config_t adcConfig = NRFX_SAADC_DEFAULT_CONFIG; - nrfx_saadc_init(&adcConfig, nrfx_saadc_event_handler); - nrfx_err_t nrfx_saadc_calibrate_offset(void); - - vTaskDelay(1000); - - 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_DISABLED, - .pin_p = (nrf_saadc_input_t)(SAADC_CH_PSELP_PSELP_AnalogInput7), - .pin_n = NRF_SAADC_INPUT_DISABLED - }; - nrfx_saadc_channel_init(0, &adcChannelConfig); - - nrf_saadc_value_t value = 0; - nrfx_saadc_sample_convert(0, &value); - - while(true) { - bool charge = nrf_gpio_pin_read(12); - bool power = nrf_gpio_pin_read(19); - - if(!charge) { - NRF_LOG_INFO("CHARGE ON"); - } else { - NRF_LOG_INFO("CHARGE OFF"); - } - - if(!power) { - NRF_LOG_INFO("POWER ON"); - } else { - NRF_LOG_INFO("POWER OFF"); - } - nrf_saadc_value_t value = 0; - - nrfx_saadc_sample_convert(0, &value); - float v = (value * 2.0f) / (1024/3.0f); - float percent = ((v - 3.55)*100)*3.9; - NRF_LOG_INFO(NRF_LOG_FLOAT_MARKER "v - " NRF_LOG_FLOAT_MARKER "%%", NRF_LOG_FLOAT(v), NRF_LOG_FLOAT(percent)); - - - nrf_gpio_pin_toggle(27); - vTaskDelay(1000); - } vTaskSuspend(nullptr); } void OnNewTime(uint8_t minutes, uint8_t hours) { - displayApp.SetTime(minutes, hours); + displayApp->SetTime(minutes, hours); } int main(void) { + displayApp.reset(new Pinetime::Applications::DisplayApp(batteryController)); logger.Init(); nrf_drv_clock_init(); -- cgit v1.2.3-70-g09d2