diff --git a/applications/desktop/scenes/desktop_scene_locked.c b/applications/desktop/scenes/desktop_scene_locked.c index c0cfd3c92..fd7a96b6c 100644 --- a/applications/desktop/scenes/desktop_scene_locked.c +++ b/applications/desktop/scenes/desktop_scene_locked.c @@ -45,7 +45,6 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) { void desktop_scene_locked_on_exit(void* context) { Desktop* desktop = (Desktop*)context; - DesktopLockedView* locked_view = desktop->locked_view; desktop_locked_reset_counter(desktop->locked_view); - osTimerStop(locked_view->timer); + osTimerStop(desktop->locked_view->timer); } diff --git a/applications/desktop/scenes/desktop_scene_main.c b/applications/desktop/scenes/desktop_scene_main.c index e63f8418f..05a5f258d 100644 --- a/applications/desktop/scenes/desktop_scene_main.c +++ b/applications/desktop/scenes/desktop_scene_main.c @@ -67,6 +67,7 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { desktop_switch_to_app(desktop, &FLIPPER_ARCHIVE); consumed = true; break; + case DesktopMainEventOpenFavorite: desktop_settings_load(&desktop->settings); desktop_switch_to_app(desktop, &FLIPPER_APPS[desktop->settings.favorite]); diff --git a/applications/desktop/views/desktop_locked.c b/applications/desktop/views/desktop_locked.c index 80ec099c6..801409009 100644 --- a/applications/desktop/views/desktop_locked.c +++ b/applications/desktop/views/desktop_locked.c @@ -20,13 +20,12 @@ void locked_view_timer_callback(void* context) { } // temporary locked screen animation managment -static void - desktop_scene_handler_set_scene(DesktopLockedView* locked_view, const Icon* icon_data) { +static void desktop_locked_set_scene(DesktopLockedView* locked_view, const Icon* icon_data) { with_view_model( locked_view->view, (DesktopLockedViewModel * model) { if(model->animation) icon_animation_free(model->animation); model->animation = icon_animation_alloc(icon_data); - icon_animation_start(model->animation); + view_tie_icon_animation(locked_view->view, model->animation); return true; }); } @@ -148,6 +147,25 @@ bool desktop_locked_input(InputEvent* event, void* context) { return true; } +void desktop_locked_enter(void* context) { + DesktopLockedView* locked_view = context; + + with_view_model( + locked_view->view, (DesktopLockedViewModel * model) { + if(model->animation) icon_animation_start(model->animation); + return false; + }); +} + +void desktop_locked_exit(void* context) { + DesktopLockedView* locked_view = context; + with_view_model( + locked_view->view, (DesktopLockedViewModel * model) { + if(model->animation) icon_animation_stop(model->animation); + return false; + }); +} + DesktopLockedView* desktop_locked_alloc() { DesktopLockedView* locked_view = furi_alloc(sizeof(DesktopLockedView)); locked_view->view = view_alloc(); @@ -158,8 +176,10 @@ DesktopLockedView* desktop_locked_alloc() { view_set_context(locked_view->view, locked_view); view_set_draw_callback(locked_view->view, (ViewDrawCallback)desktop_locked_render); view_set_input_callback(locked_view->view, desktop_locked_input); + view_set_enter_callback(locked_view->view, desktop_locked_enter); + view_set_exit_callback(locked_view->view, desktop_locked_exit); - desktop_scene_handler_set_scene(locked_view, idle_scenes[random() % COUNT_OF(idle_scenes)]); + desktop_locked_set_scene(locked_view, idle_scenes[random() % COUNT_OF(idle_scenes)]); return locked_view; } diff --git a/applications/desktop/views/desktop_main.c b/applications/desktop/views/desktop_main.c index 171bb42e8..72af9a1c2 100644 --- a/applications/desktop/views/desktop_main.c +++ b/applications/desktop/views/desktop_main.c @@ -17,17 +17,18 @@ void desktop_main_set_callback( void desktop_main_reset_hint(DesktopMainView* main_view) { with_view_model( main_view->view, (DesktopMainViewModel * model) { - model->hint_timeout = 0; + model->hint_expire_at = 0; return true; }); } + // temporary main screen animation managment -void desktop_scene_handler_set_scene(DesktopMainView* main_view, const Icon* icon_data) { +static void desktop_main_set_scene(DesktopMainView* main_view, const Icon* icon_data) { with_view_model( main_view->view, (DesktopMainViewModel * model) { if(model->animation) icon_animation_free(model->animation); model->animation = icon_animation_alloc(icon_data); - icon_animation_start(model->animation); + view_tie_icon_animation(main_view->view, model->animation); return true; }); } @@ -38,7 +39,6 @@ void desktop_scene_handler_switch_scene(DesktopMainView* main_view) { if(icon_animation_is_last_frame(model->animation)) { if(model->animation) icon_animation_free(model->animation); model->animation = icon_animation_alloc(idle_scenes[model->scene_num]); - icon_animation_start(model->animation); model->scene_num = random() % COUNT_OF(idle_scenes); } return true; @@ -53,8 +53,7 @@ void desktop_main_render(Canvas* canvas, void* model) { canvas_draw_icon_animation(canvas, 0, -3, m->animation); } - if(m->unlocked && m->hint_timeout) { - m->hint_timeout = CLAMP(m->hint_timeout - 1, 2, 0); + if(osKernelGetTickCount() < m->hint_expire_at) { canvas_set_font(canvas, FontPrimary); elements_multiline_text_framed(canvas, 42, 30, "Unlocked"); } @@ -87,6 +86,25 @@ bool desktop_main_input(InputEvent* event, void* context) { return true; } +void desktop_main_enter(void* context) { + DesktopMainView* main_view = context; + + with_view_model( + main_view->view, (DesktopMainViewModel * model) { + if(model->animation) icon_animation_start(model->animation); + return false; + }); +} + +void desktop_main_exit(void* context) { + DesktopMainView* main_view = context; + with_view_model( + main_view->view, (DesktopMainViewModel * model) { + if(model->animation) icon_animation_stop(model->animation); + return false; + }); +} + DesktopMainView* desktop_main_alloc() { DesktopMainView* main_view = furi_alloc(sizeof(DesktopMainView)); main_view->view = view_alloc(); @@ -94,8 +112,10 @@ DesktopMainView* desktop_main_alloc() { view_set_context(main_view->view, main_view); view_set_draw_callback(main_view->view, (ViewDrawCallback)desktop_main_render); view_set_input_callback(main_view->view, desktop_main_input); + view_set_enter_callback(main_view->view, desktop_main_enter); + view_set_exit_callback(main_view->view, desktop_main_exit); - desktop_scene_handler_set_scene(main_view, idle_scenes[random() % COUNT_OF(idle_scenes)]); + desktop_main_set_scene(main_view, idle_scenes[random() % COUNT_OF(idle_scenes)]); return main_view; } @@ -109,8 +129,7 @@ void desktop_main_free(DesktopMainView* main_view) { void desktop_main_unlocked(DesktopMainView* main_view) { with_view_model( main_view->view, (DesktopMainViewModel * model) { - model->unlocked = true; - model->hint_timeout = 2; + model->hint_expire_at = osKernelGetTickCount() + osKernelGetTickFreq(); return true; }); } diff --git a/applications/desktop/views/desktop_main.h b/applications/desktop/views/desktop_main.h index eadd1e82d..e723078c1 100644 --- a/applications/desktop/views/desktop_main.h +++ b/applications/desktop/views/desktop_main.h @@ -28,8 +28,7 @@ struct DesktopMainView { typedef struct { IconAnimation* animation; uint8_t scene_num; - uint8_t hint_timeout; - bool unlocked; + uint32_t hint_expire_at; } DesktopMainViewModel; void desktop_main_set_callback( @@ -40,4 +39,5 @@ void desktop_main_set_callback( View* desktop_main_get_view(DesktopMainView* main_view); DesktopMainView* desktop_main_alloc(); + void desktop_main_free(DesktopMainView* main_view); diff --git a/applications/gui/icon_animation.c b/applications/gui/icon_animation.c index f992e0e42..90a893499 100644 --- a/applications/gui/icon_animation.c +++ b/applications/gui/icon_animation.c @@ -7,26 +7,26 @@ IconAnimation* icon_animation_alloc(const Icon* icon) { furi_assert(icon); IconAnimation* instance = furi_alloc(sizeof(IconAnimation)); instance->icon = icon; + instance->timer = osTimerNew(icon_animation_timer_callback, osTimerPeriodic, instance, NULL); return instance; } void icon_animation_free(IconAnimation* instance) { furi_assert(instance); + furi_check(osTimerDelete(instance->timer) == osOK); free(instance); } -const uint8_t* icon_animation_get_data(IconAnimation* instance) { +void icon_animation_set_update_callback( + IconAnimation* instance, + IconAnimationCallback callback, + void* context) { furi_assert(instance); - if(instance->tick) { - uint32_t now = osKernelGetTickCount(); - if(now < instance->tick) { - instance->tick = now; - icon_animation_next_frame(instance); - } else if(now - instance->tick > osKernelGetTickFreq() / instance->icon->frame_rate) { - instance->tick = now; - icon_animation_next_frame(instance); - } - } + instance->callback = callback; + instance->callback_context = context; +} + +const uint8_t* icon_animation_get_data(IconAnimation* instance) { return instance->icon->frames[instance->frame]; } @@ -35,6 +35,19 @@ void icon_animation_next_frame(IconAnimation* instance) { instance->frame = (instance->frame + 1) % instance->icon->frame_count; } +void icon_animation_timer_callback(void* context) { + furi_assert(context); + + IconAnimation* instance = context; + + if(!instance->animating) return; + + icon_animation_next_frame(instance); + if(instance->callback) { + instance->callback(instance, instance->callback_context); + } +} + uint8_t icon_animation_get_width(IconAnimation* instance) { furi_assert(instance); return instance->icon->width; @@ -45,33 +58,26 @@ uint8_t icon_animation_get_height(IconAnimation* instance) { return instance->icon->height; } -bool icon_animation_is_animated(IconAnimation* instance) { - furi_assert(instance); - return instance->icon->frame_count > 1; -} - -bool icon_animation_is_animating(IconAnimation* instance) { - furi_assert(instance); - return instance->tick > 0; -} - void icon_animation_start(IconAnimation* instance) { furi_assert(instance); - instance->tick = osKernelGetTickCount(); + if(!instance->animating) { + instance->animating = true; + furi_check( + osTimerStart(instance->timer, (osKernelGetTickFreq() / instance->icon->frame_rate)) == + osOK); + } } void icon_animation_stop(IconAnimation* instance) { furi_assert(instance); - instance->tick = 0; - instance->frame = 0; -} - -uint8_t icon_animation_get_current_frame(IconAnimation* instance) { - furi_assert(instance); - return instance->frame; + if(instance->animating) { + instance->animating = false; + furi_check(osTimerStop(instance->timer) == osOK); + instance->frame = 0; + } } bool icon_animation_is_last_frame(IconAnimation* instance) { furi_assert(instance); return instance->icon->frame_count - instance->frame <= 1; -} \ No newline at end of file +} diff --git a/applications/gui/icon_animation.h b/applications/gui/icon_animation.h index 4ef3c78fb..6adc16ece 100644 --- a/applications/gui/icon_animation.h +++ b/applications/gui/icon_animation.h @@ -11,54 +11,41 @@ extern "C" { typedef struct IconAnimation IconAnimation; -/* - * Allocate icon animation instance with const icon data. +typedef void (*IconAnimationCallback)(IconAnimation* instance, void* context); + +/** Allocate icon animation instance with const icon data. * always returns Icon or stops system if not enough memory */ IconAnimation* icon_animation_alloc(const Icon* icon); -/* - * Release icon animation instance +/** Release icon animation instance */ void icon_animation_free(IconAnimation* instance); -/* - * Get icon animation width +/** Get icon animation width + */ +void icon_animation_set_update_callback( + IconAnimation* instance, + IconAnimationCallback callback, + void* context); + +/** Get icon animation width */ uint8_t icon_animation_get_width(IconAnimation* instance); -/* - * Get icon animation height +/** Get icon animation height */ uint8_t icon_animation_get_height(IconAnimation* instance); -/* - * Check if icon is animated - */ -bool icon_animation_is_animated(IconAnimation* instance); - -/* - * Check if icon animation is active - */ -bool icon_animation_is_animating(IconAnimation* instance); - -/* - * Start icon animation +/** Start icon animation */ void icon_animation_start(IconAnimation* instance); -/* - * Stop icon animation +/** Stop icon animation */ void icon_animation_stop(IconAnimation* instance); -/* - * Get current frame - */ -uint8_t icon_animation_get_current_frame(IconAnimation* instance); - -/* - * Returns true if current frame is a last one +/** Returns true if current frame is a last one */ bool icon_animation_is_last_frame(IconAnimation* instance); diff --git a/applications/gui/icon_animation_i.h b/applications/gui/icon_animation_i.h index 0f9960d46..61c74788e 100644 --- a/applications/gui/icon_animation_i.h +++ b/applications/gui/icon_animation_i.h @@ -2,20 +2,22 @@ #include "icon_animation.h" -#include +#include struct IconAnimation { const Icon* icon; uint8_t frame; - uint32_t tick; + bool animating; + osTimerId_t timer; + IconAnimationCallback callback; + void* callback_context; }; -/* - * Get pointer to current frame data - */ +/** Get pointer to current frame data */ const uint8_t* icon_animation_get_data(IconAnimation* instance); -/* - * Advance to next frame - */ +/** Advance to next frame */ void icon_animation_next_frame(IconAnimation* instance); + +/** IconAnimation timer callback */ +void icon_animation_timer_callback(void* context); diff --git a/applications/gui/modules/menu.c b/applications/gui/modules/menu.c old mode 100755 new mode 100644 index 3fe709c74..6450b1d39 --- a/applications/gui/modules/menu.c +++ b/applications/gui/modules/menu.c @@ -20,7 +20,7 @@ ARRAY_DEF(MenuItemArray, MenuItem, M_POD_OPLIST); typedef struct { MenuItemArray_t items; - uint8_t position; + size_t position; } MenuModel; static void menu_process_up(Menu* menu); @@ -32,7 +32,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { canvas_clear(canvas); - uint8_t position = model->position; + size_t position = model->position; size_t items_count = MenuItemArray_size(model->items); if(items_count) { MenuItem* item; @@ -43,7 +43,6 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { item = MenuItemArray_get(model->items, shift_position); if(item->icon) { canvas_draw_icon_animation(canvas, 4, 3, item->icon); - icon_animation_stop(item->icon); } canvas_draw_str(canvas, 22, 14, item->label); // Second line main @@ -52,7 +51,6 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { item = MenuItemArray_get(model->items, shift_position); if(item->icon) { canvas_draw_icon_animation(canvas, 4, 25, item->icon); - icon_animation_start(item->icon); } canvas_draw_str(canvas, 22, 36, item->label); // Third line @@ -61,7 +59,6 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { item = MenuItemArray_get(model->items, shift_position); if(item->icon) { canvas_draw_icon_animation(canvas, 4, 47, item->icon); - icon_animation_stop(item->icon); } canvas_draw_str(canvas, 22, 58, item->label); // Frame and scrollbar @@ -93,6 +90,30 @@ static bool menu_input_callback(InputEvent* event, void* context) { return consumed; } +static void menu_enter(void* context) { + Menu* menu = context; + with_view_model( + menu->view, (MenuModel * model) { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); + } + return false; + }); +} + +static void menu_exit(void* context) { + Menu* menu = context; + with_view_model( + menu->view, (MenuModel * model) { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } + return false; + }); +} + Menu* menu_alloc() { Menu* menu = furi_alloc(sizeof(Menu)); menu->view = view_alloc(menu->view); @@ -100,6 +121,8 @@ Menu* menu_alloc() { view_allocate_model(menu->view, ViewModelTypeLocking, sizeof(MenuModel)); view_set_draw_callback(menu->view, menu_draw_callback); view_set_input_callback(menu->view, menu_input_callback); + view_set_enter_callback(menu->view, menu_enter); + view_set_exit_callback(menu->view, menu_exit); with_view_model( menu->view, (MenuModel * model) { @@ -143,6 +166,7 @@ void menu_add_item( item = MenuItemArray_push_new(model->items); item->label = label; item->icon = icon; + view_tie_icon_animation(menu->view, item->icon); item->index = index; item->callback = callback; item->callback_context = context; @@ -175,11 +199,21 @@ void menu_set_selected_item(Menu* menu, uint32_t index) { static void menu_process_up(Menu* menu) { with_view_model( menu->view, (MenuModel * model) { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } + if(model->position > 0) { model->position--; } else { model->position = MenuItemArray_size(model->items) - 1; } + + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); + } return true; }); } @@ -187,11 +221,21 @@ static void menu_process_up(Menu* menu) { static void menu_process_down(Menu* menu) { with_view_model( menu->view, (MenuModel * model) { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } + if(model->position < MenuItemArray_size(model->items) - 1) { model->position++; } else { model->position = 0; } + + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); + } return true; }); } diff --git a/applications/gui/view.c b/applications/gui/view.c index 8dea6a432..c0420bd87 100644 --- a/applications/gui/view.c +++ b/applications/gui/view.c @@ -12,6 +12,11 @@ void view_free(View* view) { free(view); } +void view_tie_icon_animation(View* view, IconAnimation* icon_animation) { + furi_assert(view); + icon_animation_set_update_callback(icon_animation, view_icon_animation_callback, view); +} + void view_set_draw_callback(View* view, ViewDrawCallback callback) { furi_assert(view); furi_assert(view->draw_callback == NULL); @@ -120,6 +125,14 @@ void view_commit_model(View* view, bool update) { } } +void view_icon_animation_callback(IconAnimation* instance, void* context) { + furi_assert(context); + View* view = context; + if(view->update_callback) { + view->update_callback(view, view->update_callback_context); + } +} + void view_unlock_model(View* view) { furi_assert(view); if(view->model_type == ViewModelTypeLocking) { diff --git a/applications/gui/view.h b/applications/gui/view.h index 4cef59fab..33fdd187f 100644 --- a/applications/gui/view.h +++ b/applications/gui/view.h @@ -1,6 +1,8 @@ #pragma once #include + +#include "icon_animation.h" #include "canvas.h" #include @@ -10,9 +12,10 @@ extern "C" { #endif -/* Hides drawing view_port */ +/** Hides drawing view_port */ #define VIEW_NONE 0xFFFFFFFF -/* Ignore navigation event */ + +/** Ignore navigation event */ #define VIEW_IGNORE 0xFFFFFFFE typedef enum { @@ -20,17 +23,17 @@ typedef enum { ViewOrientationVertical, } ViewOrientation; -/* View, anonymous type */ +/** View, anonymous type */ typedef struct View View; -/* View Draw callback +/** View Draw callback * @param canvas, pointer to canvas * @param view_model, pointer to context * @warning called from GUI thread */ typedef void (*ViewDrawCallback)(Canvas* canvas, void* model); -/* View Input callback +/** View Input callback * @param event, pointer to input event data * @param context, pointer to context * @return true if event handled, false if event ignored @@ -38,27 +41,27 @@ typedef void (*ViewDrawCallback)(Canvas* canvas, void* model); */ typedef bool (*ViewInputCallback)(InputEvent* event, void* context); -/* View Custom callback +/** View Custom callback * @param event, number of custom event * @param context, pointer to context * @return true if event handled, false if event ignored */ typedef bool (*ViewCustomCallback)(uint32_t event, void* context); -/* View navigation callback +/** View navigation callback * @param context, pointer to context * @return next view id * @warning called from GUI thread */ typedef uint32_t (*ViewNavigationCallback)(void* context); -/* View callback +/** View callback * @param context, pointer to context * @warning called from GUI thread */ typedef void (*ViewCallback)(void* context); -/* View Update Callback +/** View Update Callback * Called upon model change, need to be propagated to GUI throw ViewPort update * @param view, pointer to view * @param context, pointer to context @@ -66,7 +69,7 @@ typedef void (*ViewCallback)(void* context); */ typedef void (*ViewUpdateCallback)(View* view, void* context); -/* View model types */ +/** View model types */ typedef enum { /* Model is not allocated */ ViewModelTypeNone, @@ -80,97 +83,103 @@ typedef enum { ViewModelTypeLocking, } ViewModelType; -/* Allocate and init View - * @return pointer to View +/** Allocate and init View + * @return View instance */ View* view_alloc(); -/* Free View - * @param pointer to View +/** Free View + * @param View instance */ void view_free(View* view); -/* Set View Draw callback - * @param view, pointer to View +/** Tie IconAnimation with View + * @param view, View instance + * @param icon_animation, IconAnimation instance + */ +void view_tie_icon_animation(View* view, IconAnimation* icon_animation); + +/** Set View Draw callback + * @param view, View instance * @param callback, draw callback */ void view_set_draw_callback(View* view, ViewDrawCallback callback); -/* Set View Input callback - * @param view, pointer to View +/** Set View Input callback + * @param view, View instance * @param callback, input callback */ void view_set_input_callback(View* view, ViewInputCallback callback); -/* Set View Custom callback - * @param view, pointer to View +/** Set View Custom callback + * @param view, View instance * @param callback, input callback */ void view_set_custom_callback(View* view, ViewCustomCallback callback); -/* Set Navigation Previous callback - * @param view, pointer to View +/** Set Navigation Previous callback + * @param view, View instance * @param callback, input callback */ void view_set_previous_callback(View* view, ViewNavigationCallback callback); -/* Set Enter callback - * @param view, pointer to View +/** Set Enter callback + * @param view, View instance * @param callback, callback */ void view_set_enter_callback(View* view, ViewCallback callback); -/* Set Exit callback - * @param view, pointer to View +/** Set Exit callback + * @param view, View instance * @param callback, callback */ void view_set_exit_callback(View* view, ViewCallback callback); -/* Set Update callback - * @param view, pointer to View +/** Set Update callback + * @param view, View instance * @param callback, callback */ void view_set_update_callback(View* view, ViewUpdateCallback callback); -/* Set View Draw callback - * @param view, pointer to View +/** Set View Draw callback + * @param view, View instance * @param context, context for callbacks */ void view_set_update_callback_context(View* view, void* context); -/* Set View Draw callback - * @param view, pointer to View +/** Set View Draw callback + * @param view, View instance * @param context, context for callbacks */ void view_set_context(View* view, void* context); -/* Set View Orientation - * @param view, pointer to View +/** Set View Orientation + * @param view, View instance * @param orientation, either vertical or horizontal */ void view_set_orientation(View* view, ViewOrientation orientation); -/* Allocate view model. - * @param view, pointer to View +/** Allocate view model. + * @param view, View instance * @param type, View Model Type * @param size, size */ void view_allocate_model(View* view, ViewModelType type, size_t size); -/* Free view model data memory. - * @param view, pointer to View +/** Free view model data memory. + * @param view, View instance */ void view_free_model(View* view); -/* Get view model data - * @param view, pointer to View +/** Get view model data + * @param view, View instance * @return pointer to model data * @warning Don't forget to commit model changes */ void* view_get_model(View* view); -/* Commit view model - * @param view, pointer to View +/** Commit view model + * @param view, View instance * @param update, true if you want to emit view update, false otherwise */ void view_commit_model(View* view, bool update); @@ -187,7 +196,7 @@ void view_commit_model(View* view, bool update); view_commit_model(view, update); \ } #else -/* +/** * With clause for view model * @param view, View instance pointer * @param function_body a (){} lambda declaration, executed within you parent function context diff --git a/applications/gui/view_i.h b/applications/gui/view_i.h index a03f3c4ef..2d2d779fe 100644 --- a/applications/gui/view_i.h +++ b/applications/gui/view_i.h @@ -26,6 +26,9 @@ struct View { void* context; }; +/* IconAnimation tie callback */ +void view_icon_animation_callback(IconAnimation* instance, void* context); + /* Unlock model */ void view_unlock_model(View* view); diff --git a/applications/gui/view_port.h b/applications/gui/view_port.h index 6d00563b3..24c133395 100644 --- a/applications/gui/view_port.h +++ b/applications/gui/view_port.h @@ -14,48 +14,41 @@ typedef enum { ViewPortOrientationVertical, } ViewPortOrientation; -/* - * ViewPort Draw callback +/** ViewPort Draw callback * @warning called from GUI thread */ typedef void (*ViewPortDrawCallback)(Canvas* canvas, void* context); -/* - * ViewPort Input callback +/** ViewPort Input callback * @warning called from GUI thread */ typedef void (*ViewPortInputCallback)(InputEvent* event, void* context); -/* - * ViewPort allocator +/** ViewPort allocator * always returns view_port or stops system if not enough memory. */ ViewPort* view_port_alloc(); -/* - * ViewPort deallocator +/** ViewPort deallocator * Ensure that view_port was unregistered in GUI system before use. */ void view_port_free(ViewPort* view_port); -/* - * Set view_port width. +/** Set view_port width. * Will be used to limit canvas drawing area and autolayout feature. * @param width - wanted width, 0 - auto. */ void view_port_set_width(ViewPort* view_port, uint8_t width); uint8_t view_port_get_width(ViewPort* view_port); -/* - * Set view_port height. +/** Set view_port height. * Will be used to limit canvas drawing area and autolayout feature. * @param height - wanted height, 0 - auto. */ void view_port_set_height(ViewPort* view_port, uint8_t height); uint8_t view_port_get_height(ViewPort* view_port); -/* - * Enable or disable view_port rendering. +/** Enable or disable view_port rendering. * @param view_port - ViewPort instance * @param enabled * @warning automatically dispatches update event @@ -63,8 +56,7 @@ uint8_t view_port_get_height(ViewPort* view_port); void view_port_enabled_set(ViewPort* view_port, bool enabled); bool view_port_is_enabled(ViewPort* view_port); -/* - * ViewPort event callbacks +/** ViewPort event callbacks * @param callback - appropriate callback function * @param context - context to pass to callback */ @@ -74,14 +66,12 @@ void view_port_input_callback_set( ViewPortInputCallback callback, void* context); -/* - * Emit update signal to GUI system. +/** Emit update signal to GUI system. * Rendering will happen later after GUI system process signal. */ void view_port_update(ViewPort* view_port); -/* - * Set ViewPort orientation. +/** Set ViewPort orientation. * @param orientation, display orientation, horizontal or vertical. */ void view_port_set_orientation(ViewPort* view_port, ViewPortOrientation orientation); diff --git a/applications/power/power_service/power.c b/applications/power/power_service/power.c old mode 100755 new mode 100644 index db791a206..e17cad5d2 --- a/applications/power/power_service/power.c +++ b/applications/power/power_service/power.c @@ -97,23 +97,27 @@ static void power_check_charging_state(Power* power) { } } -static void power_update_info(Power* power) { +static bool power_update_info(Power* power) { + PowerInfo info; + + info.charge = furi_hal_power_get_pct(); + info.health = furi_hal_power_get_bat_health_pct(); + info.capacity_remaining = furi_hal_power_get_battery_remaining_capacity(); + info.capacity_full = furi_hal_power_get_battery_full_capacity(); + info.current_charger = furi_hal_power_get_battery_current(FuriHalPowerICCharger); + info.current_gauge = furi_hal_power_get_battery_current(FuriHalPowerICFuelGauge); + info.voltage_charger = furi_hal_power_get_battery_voltage(FuriHalPowerICCharger); + info.voltage_gauge = furi_hal_power_get_battery_voltage(FuriHalPowerICFuelGauge); + info.voltage_vbus = furi_hal_power_get_usb_voltage(); + info.temperature_charger = furi_hal_power_get_battery_temperature(FuriHalPowerICCharger); + info.temperature_gauge = furi_hal_power_get_battery_temperature(FuriHalPowerICFuelGauge); + osMutexAcquire(power->info_mtx, osWaitForever); - PowerInfo* info = &power->info; - - info->charge = furi_hal_power_get_pct(); - info->health = furi_hal_power_get_bat_health_pct(); - info->capacity_remaining = furi_hal_power_get_battery_remaining_capacity(); - info->capacity_full = furi_hal_power_get_battery_full_capacity(); - info->current_charger = furi_hal_power_get_battery_current(FuriHalPowerICCharger); - info->current_gauge = furi_hal_power_get_battery_current(FuriHalPowerICFuelGauge); - info->voltage_charger = furi_hal_power_get_battery_voltage(FuriHalPowerICCharger); - info->voltage_gauge = furi_hal_power_get_battery_voltage(FuriHalPowerICFuelGauge); - info->voltage_vbus = furi_hal_power_get_usb_voltage(); - info->temperature_charger = furi_hal_power_get_battery_temperature(FuriHalPowerICCharger); - info->temperature_gauge = furi_hal_power_get_battery_temperature(FuriHalPowerICFuelGauge); - + bool need_refresh = power->info.charge != info.charge; + power->info = info; osMutexRelease(power->info_mtx); + + return need_refresh; } static void power_check_low_battery(Power* power) { @@ -156,7 +160,7 @@ int32_t power_srv(void* p) { while(1) { // Update data from gauge and charger - power_update_info(power); + bool need_refresh = power_update_info(power); // Check low battery level power_check_low_battery(power); @@ -168,7 +172,7 @@ int32_t power_srv(void* p) { power_check_battery_level_change(power); // Update battery view port - view_port_update(power->battery_view_port); + if(need_refresh) view_port_update(power->battery_view_port); osDelay(1000); } diff --git a/assets/compiled/assets_icons.c b/assets/compiled/assets_icons.c index 2af951ef6..90a0c6aac 100644 --- a/assets/compiled/assets_icons.c +++ b/assets/compiled/assets_icons.c @@ -12,8 +12,7 @@ const uint8_t _A_WatchingTV_128x64_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 const uint8_t _A_WatchingTV_128x64_1[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xA0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0xE0,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x55,0x75,0x00,0x00,0x00,0x00,0x02,0x00,0xA0,0x10,0x00,0x00,0x00,0x00,0x00,0xA0,0xAA,0xAA,0x00,0x00,0x00,0x00,0x04,0x00,0x50,0x09,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x50,0x01,0x00,0x00,0x00,0x08,0x00,0xB0,0x05,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0xA0,0x02,0x00,0x00,0x00,0x10,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x05,0x00,0x00,0x00,0x10,0x00,0xB0,0x07,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x0A,0x00,0x00,0x00,0x20,0x00,0x50,0x09,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1A,0x00,0x00,0x00,0x80,0x00,0x58,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x00,0x28,0xC0,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x01,0x38,0x00,0x00,0x83,0x03,0x00,0x80,0x03,0x80,0x0F,0x30,0x00,0x00,0x00,0x00,0x02,0x18,0x00,0x00,0xFC,0x02,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x18,0x00,0x00,0x00,0x02,0x00,0x80,0x03,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x00,0x01,0x00,0x80,0x03,0xE0,0xBF,0x60,0x00,0x00,0x00,0x00,0x08,0x24,0x00,0x00,0x80,0x00,0x00,0xC0,0x01,0xE0,0x67,0x51,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x40,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x47,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0xC0,0x53,0xD1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0xF0,0xFF,0x03,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD4,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xAA,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x7A,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0xAD,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0xD5,0x01,0x1E,0x60,0x80,0x56,0xD5,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0xA0,0xAA,0x03,0x00,0x50,0x40,0x83,0xAA,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x60,0x40,0x0F,0x00,0x2E,0xA0,0x01,0x55,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x15,0x50,0x01,0xAA,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x0A,0xA8,0x00,0x55,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x05,0xD5,0x00,0xEA,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0xC0,0xAA,0xAA,0x82,0xAA,0x00,0x1D,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x55,0x05,0x40,0x55,0x00,0x06,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0xA0,0x6A,0x00,0x03,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x50,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA8,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD5,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x50,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xAA,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x40,0x55,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0xA8,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x1D,0x00,0x40,0x55,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,}; const uint8_t _A_WatchingTV_128x64_2[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x18,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x14,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0x1C,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x60,0x00,0x00,0x00,0x00,0x02,0x00,0x16,0x10,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x00,0x04,0x00,0x2A,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x36,0x04,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x62,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0xC6,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x0A,0x07,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x40,0x00,0x86,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x4A,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x24,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x3C,0xF0,0x3F,0x80,0x01,0x00,0x80,0x03,0x80,0x0F,0x20,0x00,0x00,0x00,0x00,0x02,0x18,0x00,0xC0,0x60,0x01,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x38,0x00,0x00,0x1F,0x01,0x00,0x80,0x03,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x80,0x00,0x00,0x80,0x03,0xE0,0x3F,0x60,0x00,0x00,0x00,0x00,0x08,0x14,0x00,0x00,0x40,0x00,0x00,0xC0,0x01,0x20,0x67,0x40,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x20,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x27,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0xC0,0x53,0xC1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0x80,0xFF,0x01,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0x78,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD0,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xA8,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x78,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0x0C,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0x81,0x01,0x1E,0x60,0x00,0x06,0xD4,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0x20,0x00,0x03,0x00,0x10,0x00,0x03,0xA8,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x20,0x00,0x0F,0x00,0x2E,0x80,0x01,0x50,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x05,0x40,0x01,0xA8,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x02,0xA0,0x00,0x50,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x01,0xD0,0x00,0xE8,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0x40,0xAA,0x02,0x00,0xAA,0x00,0x18,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x00,0x00,0x00,0x55,0x00,0x04,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0x80,0x6A,0x00,0x02,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x40,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA0,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD0,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0x00,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x40,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x54,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0x80,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x0D,0x00,0x00,0x50,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0x2A,0x00,0x80,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,}; const uint8_t _A_WatchingTV_128x64_3[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x04,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0A,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0x0A,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x55,0x75,0x00,0x00,0x00,0x00,0x02,0x00,0x12,0x10,0x00,0x00,0x00,0x00,0x00,0xA0,0xAA,0xAA,0x00,0x00,0x00,0x00,0x04,0x00,0x11,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x50,0x01,0x00,0x00,0x00,0x08,0x00,0x11,0x04,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0xA0,0x02,0x00,0x00,0x00,0x10,0x00,0x21,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x05,0x00,0x00,0x00,0x10,0x00,0xC1,0x02,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x0A,0x00,0x00,0x00,0x20,0x00,0x81,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0x81,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1A,0x00,0x00,0x00,0x80,0x00,0x41,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x01,0x22,0xF0,0x0F,0xC0,0x00,0x00,0x80,0x03,0x80,0x0F,0x30,0x00,0x00,0x00,0x00,0x02,0x14,0x00,0xF0,0xA0,0x00,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x08,0x00,0x00,0x9F,0x00,0x00,0x80,0x03,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x40,0x00,0x00,0x80,0x03,0xE0,0xBF,0x60,0x00,0x00,0x00,0x00,0x08,0x14,0x00,0x00,0x40,0x00,0x00,0xC0,0x01,0xE0,0x67,0x51,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x27,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0xC0,0x53,0xD1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x03,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0x00,0xFC,0x00,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0xF8,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD4,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xAA,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x7A,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0xAD,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0xD5,0x01,0x1E,0x60,0x80,0x56,0xD5,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0xA0,0xAA,0x03,0x00,0x50,0x40,0x83,0xAA,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x60,0x40,0x0F,0x00,0x2E,0xA0,0x01,0x55,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x15,0x50,0x01,0xAA,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x0A,0xA8,0x00,0x55,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x05,0xD5,0x00,0xEA,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0xC0,0xAA,0xAA,0x82,0xAA,0x00,0x1D,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x55,0x05,0x40,0x55,0x00,0x06,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0xA0,0x6A,0x00,0x03,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x50,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA8,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD5,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x50,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xAA,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x40,0x55,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0xA8,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x1D,0x00,0x40,0x55,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,}; -const uint8_t _A_WatchingTV_128x64_4[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x04,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0A,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0x0A,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x55,0x75,0x00,0x00,0x00,0x00,0x02,0x00,0x12,0x10,0x00,0x00,0x00,0x00,0x00,0xA0,0xAA,0xAA,0x00,0x00,0x00,0x00,0x04,0x00,0x11,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x50,0x01,0x00,0x00,0x00,0x08,0x00,0x11,0x04,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0xA0,0x02,0x00,0x00,0x00,0x10,0x00,0x21,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x05,0x00,0x00,0x00,0x10,0x00,0xC1,0x02,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x0A,0x00,0x00,0x00,0x20,0x00,0x81,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0x81,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1A,0x00,0x00,0x00,0x80,0x00,0x41,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x01,0x22,0xF0,0x0F,0xC0,0x00,0x00,0x80,0x03,0x80,0x0F,0x30,0x00,0x00,0x00,0x00,0x02,0x14,0x00,0xF0,0xA0,0x00,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x08,0x00,0x00,0x9F,0x00,0x00,0x80,0x03,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x40,0x00,0x00,0x80,0x03,0xE0,0xBF,0x60,0x00,0x00,0x00,0x00,0x08,0x14,0x00,0x00,0x40,0x00,0x00,0xC0,0x01,0xE0,0x67,0x51,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x27,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0xC0,0x53,0xD1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x03,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0x00,0xFC,0x00,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0xF8,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD4,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xAA,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x7A,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0xAD,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0xD5,0x01,0x1E,0x60,0x80,0x56,0xD5,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0xA0,0xAA,0x03,0x00,0x50,0x40,0x83,0xAA,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x60,0x40,0x0F,0x00,0x2E,0xA0,0x01,0x55,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x15,0x50,0x01,0xAA,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x0A,0xA8,0x00,0x55,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x05,0xD5,0x00,0xEA,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0xC0,0xAA,0xAA,0x82,0xAA,0x00,0x1D,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x55,0x05,0x40,0x55,0x00,0x06,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0xA0,0x6A,0x00,0x03,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x50,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA8,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD5,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x50,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xAA,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x40,0x55,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0xA8,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x1D,0x00,0x40,0x55,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,}; -const uint8_t *_A_WatchingTV_128x64[] = {_A_WatchingTV_128x64_0,_A_WatchingTV_128x64_1,_A_WatchingTV_128x64_2,_A_WatchingTV_128x64_3,_A_WatchingTV_128x64_4}; +const uint8_t *_A_WatchingTV_128x64[] = {_A_WatchingTV_128x64_0,_A_WatchingTV_128x64_1,_A_WatchingTV_128x64_2,_A_WatchingTV_128x64_3}; const uint8_t _A_Wink_128x64_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0xF0,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xBF,0x1E,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x54,0x07,0xD8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xAA,0x03,0x8E,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x55,0x03,0x13,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAA,0xC1,0x61,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x70,0x84,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xEA,0x18,0x08,0x11,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x55,0x8C,0x10,0x38,0x1C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x6A,0x04,0x21,0x2C,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0xFF,0x3F,0x0C,0x02,0xE6,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xC0,0x00,0x18,0x18,0x84,0x23,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x60,0xFE,0x33,0x30,0xE0,0x10,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x30,0x01,0x64,0x20,0x38,0x0C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x90,0x00,0xC8,0xE0,0x0F,0x02,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x48,0xFC,0x91,0x00,0x00,0x01,0xE0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0xFE,0xA3,0x01,0xC0,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0xFF,0x27,0x01,0x30,0x00,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0xFF,0x47,0x01,0x08,0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xE7,0x4F,0x01,0x06,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xE7,0x4F,0x81,0x01,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xFF,0x4F,0x71,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xFF,0x4F,0x1D,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xFF,0x4F,0x07,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x96,0xFF,0x7F,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x25,0xFF,0x41,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x2A,0x7E,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x4D,0x1E,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x9A,0x02,0x00,0x00,0xC0,0xFF,0x01,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x95,0x01,0x00,0x00,0xF0,0xFF,0xFF,0x7F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xEA,0x00,0x00,0x00,0xF8,0x01,0x1F,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x55,0x00,0x00,0x00,0xFC,0x00,0x70,0xC0,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x2A,0x00,0x00,0x00,0x3E,0x00,0xE0,0x39,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x15,0x00,0x60,0x80,0x1F,0x00,0x80,0x0F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x0A,0x00,0xC0,0xF0,0x3F,0x00,0xF0,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x05,0x00,0x00,0xFF,0xFF,0xFF,0x1F,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; const uint8_t _A_Wink_128x64_1[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0xF0,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xBF,0x1E,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x54,0x07,0xD8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xAA,0x03,0x8E,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x55,0x03,0x13,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAA,0xC1,0x61,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x70,0x84,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xEA,0x18,0x08,0x11,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x55,0x8C,0x10,0x38,0x1C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x6A,0x04,0x21,0x2C,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0xFF,0x3F,0x0C,0x02,0xE6,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xC0,0x00,0x18,0x18,0x84,0x23,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x60,0x00,0x30,0x30,0xE0,0x10,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x30,0x00,0x60,0x20,0x38,0x0C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0xF8,0xC3,0xE0,0x0F,0x02,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0xFE,0x8F,0x00,0x00,0x01,0xE0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xFF,0x93,0x01,0xC0,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0xFF,0x27,0x01,0x30,0x00,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xFF,0x47,0x01,0x08,0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0xE7,0x4F,0x01,0x06,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0xE7,0x4F,0x81,0x01,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xFF,0x7F,0x71,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xFF,0x01,0x1D,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x3F,0x00,0x07,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x96,0x07,0x3E,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x25,0xC3,0x41,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0xAA,0x70,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x4D,0x1C,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x1A,0x02,0x00,0x00,0xC0,0xFF,0x01,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x15,0x01,0x00,0x00,0xF0,0xFF,0xFF,0x7F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xEA,0x00,0x00,0x00,0xF8,0x01,0x1F,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x55,0x00,0x00,0x00,0xFC,0x00,0x70,0xC0,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x2A,0x00,0x00,0x00,0x3E,0x00,0xE0,0x39,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x15,0x00,0x60,0x80,0x1F,0x00,0x80,0x0F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x0A,0x00,0xC0,0xF0,0x3F,0x00,0xF0,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x05,0x00,0x00,0xFF,0xFF,0xFF,0x1F,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; @@ -461,8 +460,8 @@ const uint8_t *_I_DolphinWait_61x59[] = {_I_DolphinWait_61x59_0}; const Icon I_Certification1_103x23 = {.width=103,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Certification1_103x23}; const Icon I_Certification2_119x30 = {.width=119,.height=30,.frame_count=1,.frame_rate=0,.frames=_I_Certification2_119x30}; -const Icon A_WatchingTV_128x64 = {.width=128,.height=64,.frame_count=5,.frame_rate=10,.frames=_A_WatchingTV_128x64}; -const Icon A_Wink_128x64 = {.width=128,.height=64,.frame_count=9,.frame_rate=10,.frames=_A_Wink_128x64}; +const Icon A_WatchingTV_128x64 = {.width=128,.height=64,.frame_count=4,.frame_rate=1,.frames=_A_WatchingTV_128x64}; +const Icon A_Wink_128x64 = {.width=128,.height=64,.frame_count=9,.frame_rate=1,.frames=_A_Wink_128x64}; const Icon I_dir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_dir_10px}; const Icon I_Nfc_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Nfc_10px}; const Icon I_sub1_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_sub1_10px}; diff --git a/assets/icons/Animations/WatchingTV_128x64/frame_05.png b/assets/icons/Animations/WatchingTV_128x64/frame_05.png deleted file mode 100644 index 15fa16011..000000000 Binary files a/assets/icons/Animations/WatchingTV_128x64/frame_05.png and /dev/null differ diff --git a/assets/icons/Animations/WatchingTV_128x64/frame_rate b/assets/icons/Animations/WatchingTV_128x64/frame_rate index 9a037142a..56a6051ca 100644 --- a/assets/icons/Animations/WatchingTV_128x64/frame_rate +++ b/assets/icons/Animations/WatchingTV_128x64/frame_rate @@ -1 +1 @@ -10 \ No newline at end of file +1 \ No newline at end of file diff --git a/assets/icons/Animations/Wink_128x64/frame_rate b/assets/icons/Animations/Wink_128x64/frame_rate index 9a037142a..56a6051ca 100644 --- a/assets/icons/Animations/Wink_128x64/frame_rate +++ b/assets/icons/Animations/Wink_128x64/frame_rate @@ -1 +1 @@ -10 \ No newline at end of file +1 \ No newline at end of file