mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-18 19:03:16 +00:00
Add power enabled check to power API (#68)
This commit is contained in:
parent
632d7ccccf
commit
28c456e2d9
@ -10,6 +10,10 @@ static bool power_is_charging() {
|
|||||||
return is_charging_enabled;
|
return is_charging_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool power_is_charging_enabled() {
|
||||||
|
return is_charging_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
static void power_set_charging_enabled(bool enabled) {
|
static void power_set_charging_enabled(bool enabled) {
|
||||||
is_charging_enabled = enabled;
|
is_charging_enabled = enabled;
|
||||||
}
|
}
|
||||||
@ -24,6 +28,7 @@ static int32_t power_get_current() {
|
|||||||
|
|
||||||
const Power power = {
|
const Power power = {
|
||||||
.is_charging = &power_is_charging,
|
.is_charging = &power_is_charging,
|
||||||
|
.is_charging_enabled = &power_is_charging_enabled,
|
||||||
.set_charging_enabled = &power_set_charging_enabled,
|
.set_charging_enabled = &power_set_charging_enabled,
|
||||||
.get_charge_level = &power_get_charge_level,
|
.get_charge_level = &power_get_charge_level,
|
||||||
.get_current = &power_get_current
|
.get_current = &power_get_current
|
||||||
|
|||||||
@ -5,11 +5,22 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* M5.Power by default doesn't have a check to see if charging is enabled.
|
||||||
|
* However, it's always enabled by default after boot, so we cover that here:
|
||||||
|
*/
|
||||||
|
static bool is_charging_enabled = true;
|
||||||
|
|
||||||
static bool power_is_charging() {
|
static bool power_is_charging() {
|
||||||
return M5.Power.isCharging() == m5::Power_Class::is_charging;
|
return M5.Power.isCharging() == m5::Power_Class::is_charging;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool power_is_charging_enabled() {
|
||||||
|
return is_charging_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
static void power_set_charging_enabled(bool enabled) {
|
static void power_set_charging_enabled(bool enabled) {
|
||||||
|
is_charging_enabled = enabled; // Local shadow copy because M5 API doesn't provide a function for it
|
||||||
M5.Power.setBatteryCharge(enabled);
|
M5.Power.setBatteryCharge(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +35,7 @@ static int32_t power_get_current() {
|
|||||||
|
|
||||||
Power core2_power = {
|
Power core2_power = {
|
||||||
.is_charging = &power_is_charging,
|
.is_charging = &power_is_charging,
|
||||||
|
.is_charging_enabled = &power_is_charging_enabled,
|
||||||
.set_charging_enabled = &power_set_charging_enabled,
|
.set_charging_enabled = &power_set_charging_enabled,
|
||||||
.get_charge_level = &power_get_charge_level,
|
.get_charge_level = &power_get_charge_level,
|
||||||
.get_current = &power_get_current
|
.get_current = &power_get_current
|
||||||
|
|||||||
@ -8,12 +8,14 @@ extern "C" {
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
typedef bool (*PowerIsCharging)();
|
typedef bool (*PowerIsCharging)();
|
||||||
|
typedef bool (*PowerIsChargingEnabled)();
|
||||||
typedef void (*PowerSetChargingEnabled)(bool enabled);
|
typedef void (*PowerSetChargingEnabled)(bool enabled);
|
||||||
typedef uint8_t (*PowerGetBatteryCharge)(); // Power value [0, 255] which maps to 0-100% charge
|
typedef uint8_t (*PowerGetBatteryCharge)(); // Power value [0, 255] which maps to 0-100% charge
|
||||||
typedef int32_t (*PowerGetCurrent)(); // Consumption or charge current in mAh
|
typedef int32_t (*PowerGetCurrent)(); // Consumption or charge current in mAh
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PowerIsCharging is_charging;
|
PowerIsCharging is_charging;
|
||||||
|
PowerIsChargingEnabled is_charging_enabled;
|
||||||
PowerSetChargingEnabled set_charging_enabled;
|
PowerSetChargingEnabled set_charging_enabled;
|
||||||
PowerGetBatteryCharge get_charge_level;
|
PowerGetBatteryCharge get_charge_level;
|
||||||
PowerGetCurrent get_current;
|
PowerGetCurrent get_current;
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
Timer* update_timer;
|
Timer* update_timer;
|
||||||
const Power* power;
|
const Power* power;
|
||||||
|
lv_obj_t* enable_switch;
|
||||||
lv_obj_t* charge_state;
|
lv_obj_t* charge_state;
|
||||||
lv_obj_t* charge_level;
|
lv_obj_t* charge_level;
|
||||||
lv_obj_t* current;
|
lv_obj_t* current;
|
||||||
@ -21,12 +22,14 @@ typedef struct {
|
|||||||
static void app_update_ui(App app) {
|
static void app_update_ui(App app) {
|
||||||
AppData* data = tt_app_get_data(app);
|
AppData* data = tt_app_get_data(app);
|
||||||
|
|
||||||
|
bool charging_enabled = data->power->is_charging_enabled();
|
||||||
const char* charge_state = data->power->is_charging() ? "yes" : "no";
|
const char* charge_state = data->power->is_charging() ? "yes" : "no";
|
||||||
uint8_t charge_level = data->power->get_charge_level();
|
uint8_t charge_level = data->power->get_charge_level();
|
||||||
uint16_t charge_level_scaled = (int16_t)charge_level * 100 / 255;
|
uint16_t charge_level_scaled = (int16_t)charge_level * 100 / 255;
|
||||||
int32_t current = data->power->get_current();
|
int32_t current = data->power->get_current();
|
||||||
|
|
||||||
tt_lvgl_lock(tt_ms_to_ticks(1000));
|
tt_lvgl_lock(tt_ms_to_ticks(1000));
|
||||||
|
lv_obj_set_state(data->enable_switch, LV_STATE_CHECKED, charging_enabled);
|
||||||
lv_label_set_text_fmt(data->charge_state, "Charging: %s", charge_state);
|
lv_label_set_text_fmt(data->charge_state, "Charging: %s", charge_state);
|
||||||
lv_label_set_text_fmt(data->charge_level, "Charge level: %d%%", charge_level_scaled);
|
lv_label_set_text_fmt(data->charge_level, "Charge level: %d%%", charge_level_scaled);
|
||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
@ -44,8 +47,10 @@ static void on_power_enabled_change(lv_event_t* event) {
|
|||||||
bool is_on = lv_obj_has_state(enable_switch, LV_STATE_CHECKED);
|
bool is_on = lv_obj_has_state(enable_switch, LV_STATE_CHECKED);
|
||||||
App app = lv_event_get_user_data(event);
|
App app = lv_event_get_user_data(event);
|
||||||
AppData* data = tt_app_get_data(app);
|
AppData* data = tt_app_get_data(app);
|
||||||
data->power->set_charging_enabled(is_on);
|
if (data->power->is_charging_enabled() != is_on) {
|
||||||
app_update_ui(app);
|
data->power->set_charging_enabled(is_on);
|
||||||
|
app_update_ui(app);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +82,7 @@ static void app_show(App app, lv_obj_t* parent) {
|
|||||||
lv_obj_add_event_cb(enable_switch, on_power_enabled_change, LV_EVENT_ALL, app);
|
lv_obj_add_event_cb(enable_switch, on_power_enabled_change, LV_EVENT_ALL, app);
|
||||||
lv_obj_set_align(enable_switch, LV_ALIGN_RIGHT_MID);
|
lv_obj_set_align(enable_switch, LV_ALIGN_RIGHT_MID);
|
||||||
|
|
||||||
|
data->enable_switch = enable_switch;
|
||||||
data->charge_state = lv_label_create(wrapper);
|
data->charge_state = lv_label_create(wrapper);
|
||||||
data->charge_level = lv_label_create(wrapper);
|
data->charge_level = lv_label_create(wrapper);
|
||||||
data->current = lv_label_create(wrapper);
|
data->current = lv_label_create(wrapper);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user