fix initial display of battery status on displays, and also fix a null deref

This commit is contained in:
zhiayang 2024-02-09 00:49:56 -05:00
parent b8846cf635
commit 4443164e3f
No known key found for this signature in database
GPG key ID: 5E2F30AD6F08571F
3 changed files with 30 additions and 6 deletions

View file

@ -66,8 +66,16 @@ void battery_status_update_cb(struct battery_status_state state) {
}
static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) {
return (struct battery_status_state) {
.level = zmk_battery_state_of_charge(),
const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh);
uint8_t soc;
if (ev != NULL) {
soc = ev->state_of_charge;
} else {
soc = zmk_battery_state_of_charge();
}
return (struct battery_status_state){
.level = soc,
#if IS_ENABLED(CONFIG_USB_DEVICE_STACK)
.usb_present = zmk_usb_is_powered(),
#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */

View file

@ -210,8 +210,16 @@ static void battery_status_update_cb(struct battery_status_state state) {
}
static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) {
return (struct battery_status_state) {
.level = zmk_battery_state_of_charge(),
const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh);
uint8_t soc;
if (ev != NULL) {
soc = ev->state_of_charge;
} else {
soc = zmk_battery_state_of_charge();
}
return (struct battery_status_state){
.level = soc,
#if IS_ENABLED(CONFIG_USB_DEVICE_STACK)
.usb_present = zmk_usb_is_powered(),
#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */

View file

@ -9,6 +9,7 @@
#include <zephyr/logging/log.h>
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
#include <zmk/battery.h>
#include <zmk/display.h>
#include <zmk/display/widgets/battery_status.h>
#include <zmk/usb.h>
@ -63,8 +64,15 @@ void battery_status_update_cb(struct battery_status_state state) {
static struct battery_status_state battery_status_get_state(const zmk_event_t *eh) {
const struct zmk_battery_state_changed *ev = as_zmk_battery_state_changed(eh);
return (struct battery_status_state) {
.level = ev->state_of_charge,
uint8_t soc;
if (ev != NULL) {
soc = ev->state_of_charge;
} else {
soc = zmk_battery_state_of_charge();
}
return (struct battery_status_state){
.level = soc,
#if IS_ENABLED(CONFIG_USB_DEVICE_STACK)
.usb_present = zmk_usb_is_powered(),
#endif /* IS_ENABLED(CONFIG_USB_DEVICE_STACK) */