1
1
#include "power_i.h"
2
2
#include "views/power_off.h"
3
+ #include "desktop/desktop_settings/desktop_settings.h"
3
4
4
5
#include <furi.h>
5
6
#include <furi_hal.h>
@@ -14,7 +15,51 @@ void power_draw_battery_callback(Canvas* canvas, void* context) {
14
15
canvas_draw_icon (canvas , 0 , 0 , & I_Battery_26x8 );
15
16
16
17
if (power -> info .gauge_is_ok ) {
17
- canvas_draw_box (canvas , 2 , 2 , (power -> info .charge + 4 ) / 5 , 4 );
18
+
19
+ char batteryPercentile [5 ];
20
+ snprintf (batteryPercentile , sizeof (batteryPercentile ), "%d" , power -> info .charge );
21
+ strcat (batteryPercentile , "%" );
22
+
23
+ if ((power -> displayBatteryPercentage == 1 ) && (power -> state != PowerStateCharging )) { //if display battery percentage, black background white text
24
+ canvas_set_font (canvas , FontBatteryPercent );
25
+ canvas_set_color (canvas , ColorBlack );
26
+ canvas_draw_box (canvas , 1 , 1 , 22 , 6 );
27
+ canvas_set_color (canvas , ColorWhite );
28
+ canvas_draw_str_aligned (canvas , 12 , 4 , AlignCenter , AlignCenter , batteryPercentile );
29
+ } else if ((power -> displayBatteryPercentage == 2 ) && (power -> state != PowerStateCharging )) { //if display inverted percentage, white background black text
30
+ canvas_set_font (canvas , FontBatteryPercent );
31
+ canvas_set_color (canvas , ColorBlack );
32
+ canvas_draw_str_aligned (canvas , 12 , 4 , AlignCenter , AlignCenter , batteryPercentile );
33
+ } else if ((power -> displayBatteryPercentage == 3 ) && (power -> state != PowerStateCharging )) { //Retro style segmented display, 3 parts
34
+ if (power -> info .charge > 25 ) {
35
+ canvas_draw_box (canvas , 2 , 2 , 6 , 4 );
36
+ }
37
+ if (power -> info .charge > 50 ) {
38
+ canvas_draw_box (canvas , 9 , 2 , 6 , 4 );
39
+ }
40
+ if (power -> info .charge > 75 ) {
41
+ canvas_draw_box (canvas , 16 , 2 , 6 , 4 );
42
+ }
43
+ } else if ((power -> displayBatteryPercentage == 4 ) && (power -> state != PowerStateCharging )) { //Retro style segmented display, 5 parts
44
+ if (power -> info .charge > 10 ) {
45
+ canvas_draw_box (canvas , 2 , 2 , 3 , 4 );
46
+ }
47
+ if (power -> info .charge > 30 ) {
48
+ canvas_draw_box (canvas , 6 , 2 , 3 , 4 );
49
+ }
50
+ if (power -> info .charge > 50 ) {
51
+ canvas_draw_box (canvas , 10 , 2 , 3 , 4 );
52
+ }
53
+ if (power -> info .charge > 70 ) {
54
+ canvas_draw_box (canvas , 14 , 2 , 3 , 4 );
55
+ }
56
+ if (power -> info .charge > 90 ) {
57
+ canvas_draw_box (canvas , 18 , 2 , 3 , 4 );
58
+ }
59
+ } else { //default bar display, added here to serve as fallback/default behaviour.
60
+ canvas_draw_box (canvas , 2 , 2 , (power -> info .charge + 4 ) / 5 , 4 );
61
+ }
62
+
18
63
if (power -> state == PowerStateCharging ) {
19
64
canvas_set_bitmap_mode (canvas , 1 );
20
65
canvas_set_color (canvas , ColorWhite );
@@ -126,6 +171,11 @@ static void power_check_charging_state(Power* power) {
126
171
127
172
static bool power_update_info (Power * power ) {
128
173
PowerInfo info ;
174
+
175
+ DesktopSettings * settings = malloc (sizeof (DesktopSettings ));
176
+ LOAD_DESKTOP_SETTINGS (settings );
177
+ power -> displayBatteryPercentage = settings -> displayBatteryPercentage ;
178
+ free (settings );
129
179
130
180
info .gauge_is_ok = furi_hal_power_gauge_is_ok ();
131
181
info .charge = furi_hal_power_get_pct ();
0 commit comments