[FL-905] Add battery health state monitoring in power app (#358)

* add battery health reading from gauge
* add battery health reading to api-hal-power
* update battery health in power application

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
gornekich 2021-03-02 19:07:26 +03:00 committed by GitHub
parent 38011e88f3
commit cfa76f19d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 30 additions and 5 deletions

View File

@ -205,6 +205,7 @@ int32_t power_task(void* p) {
with_view_model( with_view_model(
power->info_view, (PowerInfoModel * model) { power->info_view, (PowerInfoModel * model) {
model->charge = api_hal_power_get_pct(); model->charge = api_hal_power_get_pct();
model->health = api_hal_power_get_bat_health_pct();
model->capacity_remaining = api_hal_power_get_battery_remaining_capacity(); model->capacity_remaining = api_hal_power_get_battery_remaining_capacity();
model->capacity_full = api_hal_power_get_battery_full_capacity(); model->capacity_full = api_hal_power_get_battery_full_capacity();
model->current_charger = api_hal_power_get_battery_current(ApiHalPowerICCharger); model->current_charger = api_hal_power_get_battery_current(ApiHalPowerICCharger);

View File

@ -24,7 +24,12 @@ void power_info_draw_callback(Canvas* canvas, void* context) {
(uint32_t)(data->voltage_gauge * 1000), (uint32_t)(data->voltage_gauge * 1000),
(uint32_t)(data->voltage_charger * 1000)); (uint32_t)(data->voltage_charger * 1000));
canvas_draw_str(canvas, 5, 32, buffer); canvas_draw_str(canvas, 5, 32, buffer);
snprintf(buffer, 64, "Charge: %ld%%", (uint32_t)(data->charge)); snprintf(
buffer,
64,
"Charge: %ld%% Health: %ld%%",
(uint32_t)(data->charge),
(uint32_t)(data->health));
canvas_draw_str(canvas, 5, 42, buffer); canvas_draw_str(canvas, 5, 42, buffer);
snprintf(buffer, 64, "Capacity: %ld of %ldmAh", data->capacity_remaining, data->capacity_full); snprintf(buffer, 64, "Capacity: %ld of %ldmAh", data->capacity_remaining, data->capacity_full);
canvas_draw_str(canvas, 5, 52, buffer); canvas_draw_str(canvas, 5, 52, buffer);

View File

@ -22,6 +22,7 @@ typedef struct {
float temperature_gauge; float temperature_gauge;
uint8_t charge; uint8_t charge;
uint8_t health;
} PowerInfoModel; } PowerInfoModel;
void power_info_draw_callback(Canvas* canvas, void* context); void power_info_draw_callback(Canvas* canvas, void* context);

View File

@ -44,6 +44,9 @@ void api_hal_power_deep_sleep();
/* Get predicted remaining battery capacity in percents */ /* Get predicted remaining battery capacity in percents */
uint8_t api_hal_power_get_pct(); uint8_t api_hal_power_get_pct();
/* Get battery health state in percents */
uint8_t api_hal_power_get_bat_health_pct();
/* Get charging status */ /* Get charging status */
bool api_hal_power_is_charging(); bool api_hal_power_is_charging();

View File

@ -90,6 +90,10 @@ uint8_t api_hal_power_get_pct() {
return bq27220_get_state_of_charge(); return bq27220_get_state_of_charge();
} }
uint8_t api_hal_power_get_bat_health_pct() {
return bq27220_get_state_of_health();
}
bool api_hal_power_is_charging() { bool api_hal_power_is_charging() {
return bq25896_is_charging(); return bq25896_is_charging();
} }
@ -175,9 +179,9 @@ void api_hal_power_dump_state(string_t buffer) {
); );
// Voltage and current info // Voltage and current info
string_cat_printf(buffer, string_cat_printf(buffer,
"bq27220: Full capacity: %dmAh, Remaining capacity: %dmAh, State of Charge: %d%%\r\n", "bq27220: Full capacity: %dmAh, Remaining capacity: %dmAh, State of Charge: %d%%, State of health: %d%%\r\n",
bq27220_get_full_charge_capacity(), bq27220_get_remaining_capacity(), bq27220_get_full_charge_capacity(), bq27220_get_remaining_capacity(),
bq27220_get_state_of_charge() bq27220_get_state_of_charge(), bq27220_get_state_of_health()
); );
string_cat_printf(buffer, string_cat_printf(buffer,
"bq27220: Voltage: %dmV, Current: %dmA, Temperature: %dC\r\n", "bq27220: Voltage: %dmV, Current: %dmA, Temperature: %dC\r\n",

View File

@ -90,6 +90,10 @@ uint8_t api_hal_power_get_pct() {
return bq27220_get_state_of_charge(); return bq27220_get_state_of_charge();
} }
uint8_t api_hal_power_get_bat_health_pct() {
return bq27220_get_state_of_health();
}
bool api_hal_power_is_charging() { bool api_hal_power_is_charging() {
return bq25896_is_charging(); return bq25896_is_charging();
} }
@ -175,9 +179,9 @@ void api_hal_power_dump_state(string_t buffer) {
); );
// Voltage and current info // Voltage and current info
string_cat_printf(buffer, string_cat_printf(buffer,
"bq27220: Full capacity: %dmAh, Remaining capacity: %dmAh, State of Charge: %d%%\r\n", "bq27220: Full capacity: %dmAh, Remaining capacity: %dmAh, State of Charge: %d%%, State of health: %d%%\r\n",
bq27220_get_full_charge_capacity(), bq27220_get_remaining_capacity(), bq27220_get_full_charge_capacity(), bq27220_get_remaining_capacity(),
bq27220_get_state_of_charge() bq27220_get_state_of_charge(), bq27220_get_state_of_health()
); );
string_cat_printf(buffer, string_cat_printf(buffer,
"bq27220: Voltage: %dmV, Current: %dmA, Temperature: %dC\r\n", "bq27220: Voltage: %dmV, Current: %dmA, Temperature: %dC\r\n",

View File

@ -79,3 +79,7 @@ uint16_t bq27220_get_remaining_capacity() {
uint16_t bq27220_get_state_of_charge() { uint16_t bq27220_get_state_of_charge() {
return bq27220_read_word(CommandStateOfCharge); return bq27220_read_word(CommandStateOfCharge);
} }
uint16_t bq27220_get_state_of_health() {
return bq27220_read_word(CommandStateOfHealth);
}

View File

@ -69,3 +69,6 @@ uint16_t bq27220_get_remaining_capacity();
/* Get predicted remaining battery capacity in percents */ /* Get predicted remaining battery capacity in percents */
uint16_t bq27220_get_state_of_charge(); uint16_t bq27220_get_state_of_charge();
/* Get ratio of full charge capacity over design capacity in percents */
uint16_t bq27220_get_state_of_health();