From 4928bcf22abb9e28996df669da4c0ce0b1fc4ec5 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Thu, 2 Mar 2023 23:57:27 +0000 Subject: [PATCH] Why is clock app still here? --- .../plugins/clock_app/application.fam | 10 - applications/plugins/clock_app/clock.png | Bin 1896 -> 0 bytes applications/plugins/clock_app/clock_app.c | 241 ------------------ applications/plugins/clock_app/clock_app.h | 39 --- 4 files changed, 290 deletions(-) delete mode 100644 applications/plugins/clock_app/application.fam delete mode 100644 applications/plugins/clock_app/clock.png delete mode 100644 applications/plugins/clock_app/clock_app.c delete mode 100644 applications/plugins/clock_app/clock_app.h diff --git a/applications/plugins/clock_app/application.fam b/applications/plugins/clock_app/application.fam deleted file mode 100644 index bbf38c2f2..000000000 --- a/applications/plugins/clock_app/application.fam +++ /dev/null @@ -1,10 +0,0 @@ -App( - appid="clock", - name="Clock", - apptype=FlipperAppType.EXTERNAL, - entry_point="clock_app", - requires=["gui"], - stack_size=2 * 1024, - fap_icon="clock.png", - fap_category="Misc", -) diff --git a/applications/plugins/clock_app/clock.png b/applications/plugins/clock_app/clock.png deleted file mode 100644 index 0d96df1020317ef6df0652bc6a0b0b5c1190fa59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1896 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V6Od#IhXQ2>tmIipR1RclAn~S zSCLx)lxJYDv9BmdOwLX%QAkQn&&;z`dcS+Wl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3 za#eP+Wr~u$9hXgo70`g()RIJnirk#MVyg;UC9t_xKsHENUr7P1q$Jx`DZ)2E!8yMu zRl!uxRL?-kj!VI&C?(A*$i)q+8OXC$$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N z(gmu}Ew0QfNvzP#D^>;>0WrfRwK%ybv!En1KTiQQ?NYItfzCc^Z* zVyO3l0ih3)(KpmH&_`BYkda@KU!0L&0Cy3J9=J4y#*)l59QJ@@Fq8v>54#N&i3Qjc z`}*Qno|}u}jp7p5GGIVJ0~N&!Fbj%9DhpEegHnt0ON)|IUCUDQN|eDN0SXr@=lq=f zqF`XsNVQcmLXVw6UXlT~93c^&nSw43@?cIW zD20UPWdei52y8D{O9VpBR>|B*AIX|XtWv;8v+@O|?v%umM3=-8pi7MmfT`2aNY}_9 z#K6?b#K_9fRNKJP$^a57VDum{2EA0%6xpH@#=h%wQUZYC^la6WZH#5$!TUq(|>phQ6 zq1(EIr1y*cVa=JkHOR$l+9owKpYxT*!OAm>t-sg2`+l!@*Y}tWuA95EuKaX7`}C`a z#gln+XP2ArNjTowEw?MVYay?{uW!IryZ0+MK3aQzRp{S4`>)OMkm9;x!o{ySYo55A z@Vtn#*<$ZGc2DuqQLIsWbM=Vq<%rjUAd-T>6dHXx3uMISzG$D99VU67I;J!Gca%qgD@k*tT_@u zK^IRK#}J9Bt^J;S35`&tSQ2 tcwMJ+VNB(c2WNkm|NQ;lbiu<-j5A!_Z&kb&`3|ZeJzf1=);T3K0RUC#hDiVb diff --git a/applications/plugins/clock_app/clock_app.c b/applications/plugins/clock_app/clock_app.c deleted file mode 100644 index d2c178903..000000000 --- a/applications/plugins/clock_app/clock_app.c +++ /dev/null @@ -1,241 +0,0 @@ -#include -#include - -#include -#include - -#include "clock_app.h" - -static void clock_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { - furi_assert(event_queue); - PluginEvent event = {.type = EventTypeKey, .input = *input_event}; - furi_message_queue_put(event_queue, &event, FuriWaitForever); -} - -static void clock_render_callback(Canvas* const canvas, void* ctx) { - //canvas_clear(canvas); - //canvas_set_color(canvas, ColorBlack); - - ClockState* state = ctx; - if(furi_mutex_acquire(state->mutex, 200) != FuriStatusOk) { - //FURI_LOG_D(TAG, "Can't obtain mutex, requeue render"); - PluginEvent event = {.type = EventTypeTick}; - furi_message_queue_put(state->event_queue, &event, 0); - return; - } - - FuriHalRtcDateTime curr_dt; - furi_hal_rtc_get_datetime(&curr_dt); - uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); - - char time_string[TIME_LEN]; - char date_string[DATE_LEN]; - char meridian_string[MERIDIAN_LEN]; - char timer_string[20]; - - if(state->time_format == LocaleTimeFormat24h) { - snprintf( - time_string, TIME_LEN, CLOCK_TIME_FORMAT, curr_dt.hour, curr_dt.minute, curr_dt.second); - } else { - bool pm = curr_dt.hour > 12; - bool pm12 = curr_dt.hour >= 12; - bool am12 = curr_dt.hour == 0; - snprintf( - time_string, - TIME_LEN, - CLOCK_TIME_FORMAT, - pm ? curr_dt.hour - 12 : (am12 ? 12 : curr_dt.hour), - curr_dt.minute, - curr_dt.second); - - snprintf( - meridian_string, - MERIDIAN_LEN, - MERIDIAN_FORMAT, - pm12 ? MERIDIAN_STRING_PM : MERIDIAN_STRING_AM); - } - - if(state->date_format == LocaleDateFormatYMD) { - snprintf( - date_string, DATE_LEN, CLOCK_ISO_DATE_FORMAT, curr_dt.year, curr_dt.month, curr_dt.day); - } else if(state->date_format == LocaleDateFormatMDY) { - snprintf( - date_string, DATE_LEN, CLOCK_RFC_DATE_FORMAT, curr_dt.month, curr_dt.day, curr_dt.year); - } else { - snprintf( - date_string, DATE_LEN, CLOCK_RFC_DATE_FORMAT, curr_dt.day, curr_dt.month, curr_dt.year); - } - - bool timer_running = state->timer_running; - uint32_t timer_start_timestamp = state->timer_start_timestamp; - uint32_t timer_stopped_seconds = state->timer_stopped_seconds; - - furi_mutex_release(state->mutex); - - canvas_set_font(canvas, FontBigNumbers); - - if(timer_start_timestamp != 0) { - 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 - 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 - elements_button_left(canvas, "Reset"); - } else { - canvas_draw_str_aligned(canvas, 64, 28, AlignCenter, AlignCenter, time_string); - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned(canvas, 64, 42, AlignCenter, AlignTop, date_string); - - if(state->time_format == LocaleTimeFormat12h) - canvas_draw_str_aligned(canvas, 65, 12, AlignCenter, AlignCenter, meridian_string); - } - if(timer_running) { - elements_button_center(canvas, "Stop"); - } else if(timer_start_timestamp != 0 && !timer_running) { - elements_button_center(canvas, "Start"); - } -} - -static void clock_state_init(ClockState* const state) { - state->time_format = locale_get_time_format(); - - state->date_format = locale_get_date_format(); - - //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"); - //furi_hal_rtc_get_datetime(&state->datetime); -} - -// Runs every 1000ms by default -static void clock_tick(void* ctx) { - furi_assert(ctx); - FuriMessageQueue* event_queue = ctx; - PluginEvent event = {.type = EventTypeTick}; - // It's OK to loose this event if system overloaded - furi_message_queue_put(event_queue, &event, 0); -} - -int32_t clock_app(void* p) { - UNUSED(p); - ClockState* plugin_state = malloc(sizeof(ClockState)); - - plugin_state->event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); - if(plugin_state->event_queue == NULL) { - FURI_LOG_E(TAG, "Cannot create event queue"); - free(plugin_state); - return 255; - } - //FURI_LOG_D(TAG, "Event queue created"); - - plugin_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal); - if(plugin_state->mutex == NULL) { - FURI_LOG_E(TAG, "Cannot create mutex"); - furi_message_queue_free(plugin_state->event_queue); - free(plugin_state); - return 255; - } - //FURI_LOG_D(TAG, "Mutex created"); - - clock_state_init(plugin_state); - - // Set system callbacks - ViewPort* view_port = view_port_alloc(); - view_port_draw_callback_set(view_port, clock_render_callback, plugin_state); - view_port_input_callback_set(view_port, clock_input_callback, plugin_state->event_queue); - - FuriTimer* timer = - furi_timer_alloc(clock_tick, FuriTimerTypePeriodic, plugin_state->event_queue); - - if(timer == NULL) { - FURI_LOG_E(TAG, "Cannot create timer"); - furi_mutex_free(plugin_state->mutex); - furi_message_queue_free(plugin_state->event_queue); - free(plugin_state); - return 255; - } - //FURI_LOG_D(TAG, "Timer created"); - - // Open GUI and register view_port - Gui* gui = furi_record_open(RECORD_GUI); - gui_add_view_port(gui, view_port, GuiLayerFullscreen); - - furi_timer_start(timer, furi_kernel_get_tick_frequency()); - //FURI_LOG_D(TAG, "Timer started"); - - // Main loop - PluginEvent event; - for(bool processing = true; processing;) { - FuriStatus event_status = furi_message_queue_get(plugin_state->event_queue, &event, 100); - - if(event_status != FuriStatusOk) continue; - - if(furi_mutex_acquire(plugin_state->mutex, FuriWaitForever) != FuriStatusOk) continue; - // press events - if(event.type == EventTypeKey) { - if(event.input.type == InputTypeShort || event.input.type == InputTypeRepeat) { - switch(event.input.key) { - case InputKeyUp: - case InputKeyDown: - case InputKeyRight: - break; - case InputKeyLeft: - if(plugin_state->timer_start_timestamp != 0) { - // Reset seconds - plugin_state->timer_running = false; - plugin_state->timer_start_timestamp = 0; - plugin_state->timer_stopped_seconds = 0; - } - break; - case InputKeyOk:; - // START/STOP TIMER - - FuriHalRtcDateTime curr_dt; - furi_hal_rtc_get_datetime(&curr_dt); - uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); - - if(plugin_state->timer_running) { - // Update stopped seconds - plugin_state->timer_stopped_seconds = - curr_ts - plugin_state->timer_start_timestamp; - } else { - if(plugin_state->timer_start_timestamp == 0) { - // Set starting timestamp if this is first time - plugin_state->timer_start_timestamp = curr_ts; - } else { - // Timer was already running, need to slightly readjust so we don't - // count the intervening time - plugin_state->timer_start_timestamp = - curr_ts - plugin_state->timer_stopped_seconds; - } - } - plugin_state->timer_running = !plugin_state->timer_running; - break; - case InputKeyBack: - // Exit the plugin - processing = false; - break; - default: - break; - } - } - } /*else if(event.type == EventTypeTick) { - furi_hal_rtc_get_datetime(&plugin_state->datetime); - }*/ - - view_port_update(view_port); - furi_mutex_release(plugin_state->mutex); - } - - furi_timer_free(timer); - view_port_enabled_set(view_port, false); - gui_remove_view_port(gui, view_port); - furi_record_close(RECORD_GUI); - view_port_free(view_port); - furi_message_queue_free(plugin_state->event_queue); - furi_mutex_free(plugin_state->mutex); - free(plugin_state); - - return 0; -} diff --git a/applications/plugins/clock_app/clock_app.h b/applications/plugins/clock_app/clock_app.h deleted file mode 100644 index 693bdfac0..000000000 --- a/applications/plugins/clock_app/clock_app.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include -#include - -#define TAG "Clock" - -#define CLOCK_ISO_DATE_FORMAT "%.4d-%.2d-%.2d" -#define CLOCK_RFC_DATE_FORMAT "%.2d-%.2d-%.4d" -#define CLOCK_TIME_FORMAT "%.2d:%.2d:%.2d" - -#define MERIDIAN_FORMAT "%s" -#define MERIDIAN_STRING_AM "AM" -#define MERIDIAN_STRING_PM "PM" - -#define TIME_LEN 12 -#define DATE_LEN 14 -#define MERIDIAN_LEN 3 - -typedef enum { - EventTypeTick, - EventTypeKey, -} EventType; - -typedef struct { - EventType type; - InputEvent input; -} PluginEvent; - -typedef struct { - LocaleDateFormat date_format; - LocaleTimeFormat time_format; - FuriHalRtcDateTime datetime; - FuriMutex* mutex; - FuriMessageQueue* event_queue; - uint32_t timer_start_timestamp; - uint32_t timer_stopped_seconds; - bool timer_running; -} ClockState;