Explorar el Código

upd nightstand clock

by 956MB
and
Willy-JL
MX hace 11 meses
padre
commit
caa4d94ea8
Se han modificado 2 ficheros con 45 adiciones y 18 borrados
  1. 38 14
      clock_app.c
  2. 7 4
      clock_app.h

+ 38 - 14
clock_app.c

@@ -100,7 +100,8 @@ void elements_progress_bar_vertical(
     uint8_t height,
     float progress) {
     furi_assert(canvas);
-    furi_assert((progress >= 0) && (progress <= 1.0));
+    furi_assert(((float)progress >= 0.0f) && ((float)progress <= 1.0f));
+
     uint8_t width = 9;
 
     uint8_t progress_length = roundf((1.f - progress) * (height - 2));
@@ -142,6 +143,7 @@ static void clock_render_callback(Canvas* const canvas, void* ctx) {
     char time_string[TIME_LEN];
     char date_string[DATE_LEN];
     char meridian_string[MERIDIAN_LEN];
+    char date_pct_string[DATE_PCT_LEN];
     char timer_string[20];
 
     if(state->time_format == LocaleTimeFormat24h) {
@@ -188,18 +190,42 @@ static void clock_render_callback(Canvas* const canvas, void* ctx) {
         int32_t elapsed_secs = timer_running ? (curr_ts - timer_start_timestamp) :
                                                timer_stopped_seconds;
         snprintf(timer_string, 20, "%.2ld:%.2ld", elapsed_secs / 60, elapsed_secs % 60);
-        canvas_draw_str_aligned(canvas, 64, 8, AlignCenter, AlignCenter, time_string); // DRAW TIME
+        if(state->time_format == LocaleTimeFormat12h) {
+            canvas_draw_str_aligned(
+                canvas, 56, 8, AlignCenter, AlignCenter, time_string); // DRAW TIME
+        } else {
+            canvas_draw_str_aligned(
+                canvas, 64, 8, AlignCenter, AlignCenter, time_string); // DRAW TIME
+        }
         canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, timer_string); // DRAW TIMER
         canvas_set_font(canvas, FontSecondary);
-        canvas_draw_str_aligned(canvas, 64, 20, AlignCenter, AlignTop, date_string); // DRAW DATE
+        if(state->time_format == LocaleTimeFormat12h) {
+            canvas_draw_str_aligned(canvas, 112, 8, AlignCenter, AlignCenter, meridian_string);
+        }
+
+        snprintf(
+            date_pct_string, sizeof(date_pct_string), "%s   %u%%", date_string, state->battery_pct);
+        canvas_draw_str_aligned(
+            canvas, 64, 20, AlignCenter, AlignTop, date_pct_string); // DRAW DATE + BATTERY
         elements_button_left(canvas, "Reset");
     } else {
         canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignCenter, time_string);
         canvas_set_font(canvas, FontSecondary);
-        canvas_draw_str_aligned(canvas, 65, 17, AlignCenter, AlignCenter, date_string);
 
-        if(state->time_format == LocaleTimeFormat12h)
-            canvas_draw_str_aligned(canvas, 64, 47, AlignCenter, AlignCenter, meridian_string);
+        if(state->time_format == LocaleTimeFormat12h) {
+            snprintf(
+                date_pct_string,
+                sizeof(date_pct_string),
+                "%s   %u%%",
+                date_string,
+                state->battery_pct);
+            canvas_draw_str_aligned(canvas, 64, 17, AlignCenter, AlignCenter, date_pct_string);
+            canvas_draw_str_aligned(canvas, 64, 48, AlignCenter, AlignCenter, meridian_string);
+        } else {
+            canvas_draw_str_aligned(canvas, 64, 17, AlignCenter, AlignCenter, date_string);
+            snprintf(date_pct_string, sizeof(date_pct_string), "%u%%", state->battery_pct);
+            canvas_draw_str_aligned(canvas, 64, 48, AlignCenter, AlignCenter, date_pct_string);
+        }
     }
     if(timer_running) {
         elements_button_center(canvas, "Stop");
@@ -210,8 +236,8 @@ static void clock_render_callback(Canvas* const canvas, void* ctx) {
 
 static void clock_state_init(ClockState* const state) {
     state->time_format = locale_get_time_format();
-
     state->date_format = locale_get_date_format();
+    state->battery_pct = furi_hal_power_get_pct();
 
     //FURI_LOG_D(TAG, "Time format: %s", state->settings.time_format == H12 ? "12h" : "24h");
     //FURI_LOG_D(TAG, "Date format: %s", state->settings.date_format == Iso ? "ISO 8601" : "RFC 5322");
@@ -229,9 +255,7 @@ static void clock_tick(void* ctx) {
 
 void timer_start_stop(ClockState* plugin_state) {
     // START/STOP TIMER
-    DateTime curr_dt;
-    furi_hal_rtc_get_datetime(&curr_dt);
-    uint32_t curr_ts = datetime_datetime_to_timestamp(&curr_dt);
+    uint32_t curr_ts = furi_hal_rtc_get_timestamp();
 
     if(plugin_state->timer_running) {
         // Update stopped seconds
@@ -346,9 +370,9 @@ int32_t clock_app(void* p) {
                     break;
                 }
             }
-        } /*else if(event.type == EventTypeTick) {
-            furi_hal_rtc_get_datetime(&plugin_state->datetime);
-        }*/
+        } else if(event.type == EventTypeTick) {
+            plugin_state->battery_pct = furi_hal_power_get_pct();
+        }
 
         furi_mutex_release(plugin_state->mutex);
         view_port_update(view_port);
@@ -369,4 +393,4 @@ int32_t clock_app(void* p) {
     notification_message(notif, &led_reset);
 
     return 0;
-}
+}

+ 7 - 4
clock_app.h

@@ -7,15 +7,17 @@
 
 #define CLOCK_ISO_DATE_FORMAT "%.4d-%.2d-%.2d"
 #define CLOCK_RFC_DATE_FORMAT "%.2d-%.2d-%.4d"
-#define CLOCK_TIME_FORMAT "%.2d:%.2d:%.2d"
+#define CLOCK_TIME_FORMAT     "%.2d:%.2d:%.2d"
 
-#define MERIDIAN_FORMAT "%s"
+#define MERIDIAN_FORMAT    "%s"
 #define MERIDIAN_STRING_AM "AM"
 #define MERIDIAN_STRING_PM "PM"
 
-#define TIME_LEN 12
-#define DATE_LEN 14
+#define TIME_LEN     12
+#define DATE_LEN     14
 #define MERIDIAN_LEN 3
+#define BATTERY_LEN  4
+#define DATE_PCT_LEN 21
 
 typedef enum {
     EventTypeTick,
@@ -36,4 +38,5 @@ typedef struct {
     uint32_t timer_start_timestamp;
     uint32_t timer_stopped_seconds;
     bool timer_running;
+    uint8_t battery_pct;
 } ClockState;