diff options
author | Tomasz Moń <desowin@gmail.com> | 2021-07-07 08:22:50 +0200 |
---|---|---|
committer | Tomasz Moń <desowin@gmail.com> | 2021-07-07 08:24:01 +0200 |
commit | 841e704fc3b5bde96ca8de4794c85198e2f12a65 (patch) | |
tree | 796859262b7398b6300d01c09782971f5ee65226 /firmware/powermgmt.c | |
parent | b87e75f768eba3ccdf422a5082c91097a0b72b5b (diff) | |
download | rockbox-841e704fc3b5bde96ca8de4794c85198e2f12a65.tar.gz rockbox-841e704fc3b5bde96ca8de4794c85198e2f12a65.zip |
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
Diffstat (limited to 'firmware/powermgmt.c')
-rw-r--r-- | firmware/powermgmt.c | 20 |
1 files changed, 7 insertions, 13 deletions
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; | |||
88 | #if (CONFIG_BATTERY_MEASURE & PERCENTAGE_MEASURE) == PERCENTAGE_MEASURE | 88 | #if (CONFIG_BATTERY_MEASURE & PERCENTAGE_MEASURE) == PERCENTAGE_MEASURE |
89 | #ifdef SIMULATOR | 89 | #ifdef SIMULATOR |
90 | int _battery_level(void) { return -1; } | 90 | int _battery_level(void) { return -1; } |
91 | int _battery_voltage(void); | ||
92 | extern const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; | ||
93 | extern const unsigned short percent_to_volt_charge[11]; | ||
94 | #else | ||
95 | int _battery_voltage(void) { return -1; } | ||
96 | const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; | ||
97 | const unsigned short percent_to_volt_charge[11]; | ||
98 | #endif | 91 | #endif |
99 | #elif (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) == VOLTAGE_MEASURE | 92 | #else |
100 | int _battery_level(void) { return -1; } | 93 | int _battery_level(void) { return -1; } |
94 | #endif | ||
95 | |||
96 | #if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) == VOLTAGE_MEASURE | ||
101 | /* | 97 | /* |
102 | * Average battery voltage and charger voltage, filtered via a digital | 98 | * Average battery voltage and charger voltage, filtered via a digital |
103 | * exponential filter (aka. exponential moving average, scaled): | 99 | * exponential filter (aka. exponential moving average, scaled): |
@@ -106,10 +102,8 @@ int _battery_level(void) { return -1; } | |||
106 | static unsigned int avgbat; | 102 | static unsigned int avgbat; |
107 | /* filtered battery voltage, millivolts */ | 103 | /* filtered battery voltage, millivolts */ |
108 | static unsigned int battery_millivolts; | 104 | static unsigned int battery_millivolts; |
109 | #elif (CONFIG_BATTERY_MEASURE == 0) | 105 | #else |
110 | int _battery_voltage(void) { return -1; } | 106 | int _battery_voltage(void) { return -1; } |
111 | int _battery_level(void) { return -1; } | ||
112 | |||
113 | const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; | 107 | const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; |
114 | const unsigned short percent_to_volt_charge[11]; | 108 | const unsigned short percent_to_volt_charge[11]; |
115 | #endif | 109 | #endif |
@@ -156,9 +150,9 @@ void battery_read_info(int *voltage, int *level) | |||
156 | *voltage = millivolts; | 150 | *voltage = millivolts; |
157 | 151 | ||
158 | if (level) { | 152 | if (level) { |
159 | percent = voltage_to_battery_level(millivolts); | 153 | percent = _battery_level(); |
160 | if (percent < 0) | 154 | if (percent < 0) |
161 | percent = _battery_level(); | 155 | percent = voltage_to_battery_level(millivolts); |
162 | *level = percent; | 156 | *level = percent; |
163 | } | 157 | } |
164 | } | 158 | } |