diff --git a/components/services/battery.c b/components/services/battery.c
index e1882b72..30e69b82 100644
--- a/components/services/battery.c
+++ b/components/services/battery.c
@@ -51,8 +51,9 @@ float battery_value_svc(void) {
*
*/
uint8_t battery_level_svc(void) {
- // TODO: this is totally incorrect
- return battery.avg ? (battery.avg - (3.0 * battery.cells)) / ((4.2 - 3.0) * battery.cells) * 100 : 0;
+ // TODO: this is vastly incorrect
+ int level = battery.avg ? (battery.avg - (3.0 * battery.cells)) / ((4.2 - 3.0) * battery.cells) * 100 : 0;
+ return level < 100 ? level : 100;
}
/****************************************************************************************
diff --git a/components/services/monitor.h b/components/services/monitor.h
index 8e255e87..3f441ff9 100644
--- a/components/services/monitor.h
+++ b/components/services/monitor.h
@@ -21,7 +21,7 @@ extern void (*spkfault_handler_svc)(bool inserted);
extern bool spkfault_svc(void);
extern float battery_value_svc(void);
-extern uint8_t battery_level_svc(void);
+extern uint16_t battery_level_svc(void);
extern monitor_gpio_t * get_spkfault_gpio();
extern monitor_gpio_t * get_jack_insertion_gpio();
diff --git a/components/squeezelite/embedded.c b/components/squeezelite/embedded.c
index dfa43771..fb0b3d5d 100644
--- a/components/squeezelite/embedded.c
+++ b/components/squeezelite/embedded.c
@@ -67,8 +67,8 @@ u16_t get_plugged(void) {
return jack_inserted_svc() ? PLUG_HEADPHONE : 0;
}
-u8_t get_battery(void) {
- return (battery_level_svc() * 16) / 100;
+u16_t get_battery(void) {
+ return (u16_t) (battery_value_svc() * 128) & 0x0fff;
}
void set_name(char *name) {
diff --git a/components/squeezelite/embedded.h b/components/squeezelite/embedded.h
index 29a7563a..984cb6bc 100644
--- a/components/squeezelite/embedded.h
+++ b/components/squeezelite/embedded.h
@@ -77,7 +77,7 @@ extern mutex_type slimp_mutex;
#define PLUG_HEADPHONE 0x04
u16_t get_RSSI(void); // must provide or define as 0xffff
u16_t get_plugged(void); // must provide or define as 0x0
-u8_t get_battery(void); // must provide 0..15 or define as 0x0
+u16_t get_battery(void); // must provide 12 bits data or define as 0x0 (exact meaning is device-dependant)
// set name
void set_name(char *name); // can be defined as an empty macro
diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml
index 200de627..44753dce 100644
--- a/plugin/SqueezeESP32/install.xml
+++ b/plugin/SqueezeESP32/install.xml
@@ -10,6 +10,6 @@
PLUGIN_SQUEEZEESP32
PLUGIN_SQUEEZEESP32_DESC
Plugins::SqueezeESP32::Plugin
- 0.211
+ 0.310
Philippe