From 841e704fc3b5bde96ca8de4794c85198e2f12a65 Mon Sep 17 00:00:00 2001 From: Tomasz Moń Date: Wed, 7 Jul 2021 08:22:50 +0200 Subject: Sansa Connect: Read HDQ battery data Make it possible for target to provide voltage, percentage and time to empty values. The voltage measurement is nice to have in debug menu even if the actions are taken only based on percentage. Perform battery level estimation based on voltage only if percentage is not available. Use time to empty based on actual power consumption. This makes the estimated runtime displayed in Rockbox Info to react to backlight setting. The bq27000 updates time to empty estimate every 5.12 seconds so it is possible to see the estimate with backlight off on the screen if user enters Rockbox Info, activates hold switch, waits 11 seconds and releases the hold switch. Change-Id: Iafe3fa0fb334e3428e3a0ad05b2c020d208dc934 --- firmware/powermgmt.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'firmware/powermgmt.c') diff --git a/firmware/powermgmt.c b/firmware/powermgmt.c index a05e0aeb68..51ea99f6fa 100644 --- a/firmware/powermgmt.c +++ b/firmware/powermgmt.c @@ -88,16 +88,12 @@ static long last_event_tick = 0; #if (CONFIG_BATTERY_MEASURE & PERCENTAGE_MEASURE) == PERCENTAGE_MEASURE #ifdef SIMULATOR int _battery_level(void) { return -1; } -int _battery_voltage(void); -extern const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; -extern const unsigned short percent_to_volt_charge[11]; -#else -int _battery_voltage(void) { return -1; } -const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; -const unsigned short percent_to_volt_charge[11]; #endif -#elif (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) == VOLTAGE_MEASURE +#else int _battery_level(void) { return -1; } +#endif + +#if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) == VOLTAGE_MEASURE /* * Average battery voltage and charger voltage, filtered via a digital * exponential filter (aka. exponential moving average, scaled): @@ -106,10 +102,8 @@ int _battery_level(void) { return -1; } static unsigned int avgbat; /* filtered battery voltage, millivolts */ static unsigned int battery_millivolts; -#elif (CONFIG_BATTERY_MEASURE == 0) +#else int _battery_voltage(void) { return -1; } -int _battery_level(void) { return -1; } - const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; const unsigned short percent_to_volt_charge[11]; #endif @@ -156,9 +150,9 @@ void battery_read_info(int *voltage, int *level) *voltage = millivolts; if (level) { - percent = voltage_to_battery_level(millivolts); + percent = _battery_level(); if (percent < 0) - percent = _battery_level(); + percent = voltage_to_battery_level(millivolts); *level = percent; } } -- cgit v1.2.3