[FL-2019] Battery test application (#940)

* Power: rework API
* Applications: introduce battery test application
* Power: fix typo
* Desktop: cleanup merge artifacts

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
gornekich
2022-01-03 01:52:45 +03:00
committed by GitHub
parent 7522b111c2
commit 2cbf99e15a
10 changed files with 187 additions and 22 deletions

17
applications/power/power_service/power.c Normal file → Executable file
View File

@@ -7,11 +7,6 @@
#include <gui/view.h>
#define POWER_OFF_TIMEOUT 90
#define POWER_BATTERY_WELL_LEVEL 70
bool power_is_battery_well(PowerInfo* info) {
return info->health > POWER_BATTERY_WELL_LEVEL;
}
void power_draw_battery_callback(Canvas* canvas, void* context) {
furi_assert(context);
@@ -50,7 +45,7 @@ Power* power_alloc() {
power->state = PowerStateNotCharging;
power->battery_low = false;
power->power_off_timeout = POWER_OFF_TIMEOUT;
power->info_mtx = osMutexNew(NULL);
power->api_mtx = osMutexNew(NULL);
// Gui
power->view_dispatcher = view_dispatcher_alloc();
@@ -66,6 +61,7 @@ Power* power_alloc() {
// Battery view port
power->battery_view_port = power_battery_view_port_alloc(power);
power->show_low_bat_level_message = true;
return power;
}
@@ -81,7 +77,7 @@ void power_free(Power* power) {
view_port_free(power->battery_view_port);
// State
osMutexDelete(power->info_mtx);
osMutexDelete(power->api_mtx);
// FuriPubSub
furi_pubsub_free(power->event_pubsub);
@@ -135,17 +131,18 @@ static bool power_update_info(Power* power) {
info.temperature_charger = furi_hal_power_get_battery_temperature(FuriHalPowerICCharger);
info.temperature_gauge = furi_hal_power_get_battery_temperature(FuriHalPowerICFuelGauge);
osMutexAcquire(power->info_mtx, osWaitForever);
osMutexAcquire(power->api_mtx, osWaitForever);
bool need_refresh = power->info.charge != info.charge;
power->info = info;
osMutexRelease(power->info_mtx);
osMutexRelease(power->api_mtx);
return need_refresh;
}
static void power_check_low_battery(Power* power) {
// Check battery charge and vbus voltage
if((power->info.charge == 0) && (power->info.voltage_vbus < 4.0f)) {
if((power->info.charge == 0) && (power->info.voltage_vbus < 4.0f) &&
power->show_low_bat_level_message) {
if(!power->battery_low) {
view_dispatcher_send_to_front(power->view_dispatcher);
view_dispatcher_switch_to_view(power->view_dispatcher, PowerViewOff);