USB-UART: New GUI (#826)
* USB-UART: new gui * Furi: use furi_console for logging instead of printf. * CDC: calling open/close callbacks on interface change * fix vcp_tx block on disconnect * USB mode set by struct pointer * FuriHal: proper event sequence on vcp reconnect * disable debug prints * HAL: add context to UART IRQ's * Context usage in UART IRQ and CDC callbacks * USB-UART: geting rid of baudrate limitations * FuriHal: remove struct pollutant in usb api. Co-authored-by: あく <alleteam@gmail.com> Co-authored-by: DrZlo13 <who.just.the.doctor@gmail.com>
This commit is contained in:
		
							parent
							
								
									a5052a0375
								
							
						
					
					
						commit
						efded63bcb
					
				| @ -285,8 +285,8 @@ int32_t bad_usb_app(void* p) { | |||||||
|     furi_check(app->event_queue); |     furi_check(app->event_queue); | ||||||
|     ViewPort* view_port = view_port_alloc(); |     ViewPort* view_port = view_port_alloc(); | ||||||
| 
 | 
 | ||||||
|     UsbMode usb_mode_prev = furi_hal_usb_get_config(); |     UsbInterface* usb_mode_prev = furi_hal_usb_get_config(); | ||||||
|     furi_hal_usb_set_config(UsbModeHid); |     furi_hal_usb_set_config(&usb_hid); | ||||||
| 
 | 
 | ||||||
|     view_port_draw_callback_set(view_port, bad_usb_render_callback, app); |     view_port_draw_callback_set(view_port, bad_usb_render_callback, app); | ||||||
|     view_port_input_callback_set(view_port, bad_usb_input_callback, app->event_queue); |     view_port_input_callback_set(view_port, bad_usb_input_callback, app->event_queue); | ||||||
|  | |||||||
| @ -41,8 +41,8 @@ int32_t usb_mouse_app(void* p) { | |||||||
|     furi_check(event_queue); |     furi_check(event_queue); | ||||||
|     ViewPort* view_port = view_port_alloc(); |     ViewPort* view_port = view_port_alloc(); | ||||||
| 
 | 
 | ||||||
|     UsbMode usb_mode_prev = furi_hal_usb_get_config(); |     UsbInterface* usb_mode_prev = furi_hal_usb_get_config(); | ||||||
|     furi_hal_usb_set_config(UsbModeHid); |     furi_hal_usb_set_config(&usb_hid); | ||||||
| 
 | 
 | ||||||
|     view_port_draw_callback_set(view_port, usb_mouse_render_callback, NULL); |     view_port_draw_callback_set(view_port, usb_mouse_render_callback, NULL); | ||||||
|     view_port_input_callback_set(view_port, usb_mouse_input_callback, event_queue); |     view_port_input_callback_set(view_port, usb_mouse_input_callback, event_queue); | ||||||
|  | |||||||
| @ -29,11 +29,11 @@ void usb_test_submenu_callback(void* context, uint32_t index) { | |||||||
|     } else if(index == UsbTestSubmenuIndexDisable) { |     } else if(index == UsbTestSubmenuIndexDisable) { | ||||||
|         furi_hal_usb_disable(); |         furi_hal_usb_disable(); | ||||||
|     } else if(index == UsbTestSubmenuIndexVcpSingle) { |     } else if(index == UsbTestSubmenuIndexVcpSingle) { | ||||||
|         furi_hal_usb_set_config(UsbModeVcpSingle); |         furi_hal_usb_set_config(&usb_cdc_single); | ||||||
|     } else if(index == UsbTestSubmenuIndexVcpDual) { |     } else if(index == UsbTestSubmenuIndexVcpDual) { | ||||||
|         furi_hal_usb_set_config(UsbModeVcpDual); |         furi_hal_usb_set_config(&usb_cdc_dual); | ||||||
|     } else if(index == UsbTestSubmenuIndexHid) { |     } else if(index == UsbTestSubmenuIndexHid) { | ||||||
|         furi_hal_usb_set_config(UsbModeHid); |         furi_hal_usb_set_config(&usb_hid); | ||||||
|     } else if(index == UsbTestSubmenuIndexHidU2F) { |     } else if(index == UsbTestSubmenuIndexHidU2F) { | ||||||
|         //furi_hal_usb_set_config(UsbModeU2F);
 |         //furi_hal_usb_set_config(UsbModeU2F);
 | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -15,11 +15,16 @@ static bool gpio_app_back_event_callback(void* context) { | |||||||
|     return scene_manager_handle_back_event(app->scene_manager); |     return scene_manager_handle_back_event(app->scene_manager); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void gpio_app_tick_event_callback(void* context) { | ||||||
|  |     furi_assert(context); | ||||||
|  |     GpioApp* app = context; | ||||||
|  |     scene_manager_handle_tick_event(app->scene_manager); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| GpioApp* gpio_app_alloc() { | GpioApp* gpio_app_alloc() { | ||||||
|     GpioApp* app = furi_alloc(sizeof(GpioApp)); |     GpioApp* app = furi_alloc(sizeof(GpioApp)); | ||||||
| 
 | 
 | ||||||
|     app->gui = furi_record_open("gui"); |     app->gui = furi_record_open("gui"); | ||||||
|     app->notifications = furi_record_open("notification"); |  | ||||||
| 
 | 
 | ||||||
|     app->view_dispatcher = view_dispatcher_alloc(); |     app->view_dispatcher = view_dispatcher_alloc(); | ||||||
|     app->scene_manager = scene_manager_alloc(&gpio_scene_handlers, app); |     app->scene_manager = scene_manager_alloc(&gpio_scene_handlers, app); | ||||||
| @ -30,9 +35,13 @@ GpioApp* gpio_app_alloc() { | |||||||
|         app->view_dispatcher, gpio_app_custom_event_callback); |         app->view_dispatcher, gpio_app_custom_event_callback); | ||||||
|     view_dispatcher_set_navigation_event_callback( |     view_dispatcher_set_navigation_event_callback( | ||||||
|         app->view_dispatcher, gpio_app_back_event_callback); |         app->view_dispatcher, gpio_app_back_event_callback); | ||||||
|  |     view_dispatcher_set_tick_event_callback( | ||||||
|  |         app->view_dispatcher, gpio_app_tick_event_callback, 100); | ||||||
| 
 | 
 | ||||||
|     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); |     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); | ||||||
| 
 | 
 | ||||||
|  |     app->notifications = furi_record_open("notification"); | ||||||
|  | 
 | ||||||
|     app->var_item_list = variable_item_list_alloc(); |     app->var_item_list = variable_item_list_alloc(); | ||||||
|     view_dispatcher_add_view( |     view_dispatcher_add_view( | ||||||
|         app->view_dispatcher, |         app->view_dispatcher, | ||||||
| @ -42,8 +51,14 @@ GpioApp* gpio_app_alloc() { | |||||||
|     view_dispatcher_add_view( |     view_dispatcher_add_view( | ||||||
|         app->view_dispatcher, GpioAppViewGpioTest, gpio_test_get_view(app->gpio_test)); |         app->view_dispatcher, GpioAppViewGpioTest, gpio_test_get_view(app->gpio_test)); | ||||||
| 
 | 
 | ||||||
|  |     app->gpio_usb_uart = gpio_usb_uart_alloc(); | ||||||
|     view_dispatcher_add_view( |     view_dispatcher_add_view( | ||||||
|         app->view_dispatcher, GpioAppViewUsbUart, variable_item_list_get_view(app->var_item_list)); |         app->view_dispatcher, GpioAppViewUsbUart, gpio_usb_uart_get_view(app->gpio_usb_uart)); | ||||||
|  | 
 | ||||||
|  |     view_dispatcher_add_view( | ||||||
|  |         app->view_dispatcher, | ||||||
|  |         GpioAppViewUsbUartCfg, | ||||||
|  |         variable_item_list_get_view(app->var_item_list)); | ||||||
| 
 | 
 | ||||||
|     scene_manager_next_scene(app->scene_manager, GpioSceneStart); |     scene_manager_next_scene(app->scene_manager, GpioSceneStart); | ||||||
| 
 | 
 | ||||||
| @ -55,10 +70,12 @@ void gpio_app_free(GpioApp* app) { | |||||||
| 
 | 
 | ||||||
|     // Views
 |     // Views
 | ||||||
|     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewVarItemList); |     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewVarItemList); | ||||||
|     variable_item_list_free(app->var_item_list); |  | ||||||
|     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewGpioTest); |     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewGpioTest); | ||||||
|     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewUsbUart); |     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewUsbUart); | ||||||
|  |     view_dispatcher_remove_view(app->view_dispatcher, GpioAppViewUsbUartCfg); | ||||||
|  |     variable_item_list_free(app->var_item_list); | ||||||
|     gpio_test_free(app->gpio_test); |     gpio_test_free(app->gpio_test); | ||||||
|  |     gpio_usb_uart_free(app->gpio_usb_uart); | ||||||
| 
 | 
 | ||||||
|     // View dispatcher
 |     // View dispatcher
 | ||||||
|     view_dispatcher_free(app->view_dispatcher); |     view_dispatcher_free(app->view_dispatcher); | ||||||
|  | |||||||
| @ -3,6 +3,8 @@ | |||||||
| #include "gpio_app.h" | #include "gpio_app.h" | ||||||
| #include "gpio_item.h" | #include "gpio_item.h" | ||||||
| #include "scenes/gpio_scene.h" | #include "scenes/gpio_scene.h" | ||||||
|  | #include "gpio_custom_event.h" | ||||||
|  | #include "usb_uart_bridge.h" | ||||||
| 
 | 
 | ||||||
| #include <gui/gui.h> | #include <gui/gui.h> | ||||||
| #include <gui/view_dispatcher.h> | #include <gui/view_dispatcher.h> | ||||||
| @ -11,27 +13,23 @@ | |||||||
| #include <notification/notification-messages.h> | #include <notification/notification-messages.h> | ||||||
| #include <gui/modules/variable-item-list.h> | #include <gui/modules/variable-item-list.h> | ||||||
| #include "views/gpio_test.h" | #include "views/gpio_test.h" | ||||||
| 
 | #include "views/gpio_usb_uart.h" | ||||||
| #define GPIO_SCENE_START_CUSTOM_EVENT_OTG_OFF (0UL) |  | ||||||
| #define GPIO_SCENE_START_CUSTOM_EVENT_OTG_ON (1UL) |  | ||||||
| #define GPIO_SCENE_START_CUSTOM_EVENT_TEST (2UL) |  | ||||||
| #define GPIO_SCENE_START_CUSTOM_EVENT_USB_UART (3UL) |  | ||||||
| 
 |  | ||||||
| #define GPIO_SCENE_USB_UART_CUSTOM_EVENT_ENABLE (4UL) |  | ||||||
| #define GPIO_SCENE_USB_UART_CUSTOM_EVENT_DISABLE (5UL) |  | ||||||
| 
 | 
 | ||||||
| struct GpioApp { | struct GpioApp { | ||||||
|     Gui* gui; |     Gui* gui; | ||||||
|  |     NotificationApp* notifications; | ||||||
|     ViewDispatcher* view_dispatcher; |     ViewDispatcher* view_dispatcher; | ||||||
|     SceneManager* scene_manager; |     SceneManager* scene_manager; | ||||||
|     NotificationApp* notifications; |  | ||||||
| 
 | 
 | ||||||
|     VariableItemList* var_item_list; |     VariableItemList* var_item_list; | ||||||
|     GpioTest* gpio_test; |     GpioTest* gpio_test; | ||||||
|  |     GpioUsbUart* gpio_usb_uart; | ||||||
|  |     UsbUartBridge* usb_uart_bridge; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     GpioAppViewVarItemList, |     GpioAppViewVarItemList, | ||||||
|     GpioAppViewGpioTest, |     GpioAppViewGpioTest, | ||||||
|     GpioAppViewUsbUart, |     GpioAppViewUsbUart, | ||||||
|  |     GpioAppViewUsbUartCfg, | ||||||
| } GpioAppView; | } GpioAppView; | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								applications/gpio/gpio_custom_event.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								applications/gpio/gpio_custom_event.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | typedef enum { | ||||||
|  |     GpioStartEventOtgOff = 0, | ||||||
|  |     GpioStartEventOtgOn, | ||||||
|  |     GpioStartEventManualConrol, | ||||||
|  |     GpioStartEventUsbUart, | ||||||
|  | 
 | ||||||
|  |     GpioUsbUartEventConfig, | ||||||
|  | } GpioCustomEvent; | ||||||
| @ -1,3 +1,4 @@ | |||||||
| ADD_SCENE(gpio, start, Start) | ADD_SCENE(gpio, start, Start) | ||||||
| ADD_SCENE(gpio, test, Test) | ADD_SCENE(gpio, test, Test) | ||||||
| ADD_SCENE(gpio, usb_uart, UsbUart) | ADD_SCENE(gpio, usb_uart, UsbUart) | ||||||
|  | ADD_SCENE(gpio, usb_uart_cfg, UsbUartCfg) | ||||||
|  | |||||||
| @ -2,9 +2,9 @@ | |||||||
| #include "furi-hal-power.h" | #include "furi-hal-power.h" | ||||||
| 
 | 
 | ||||||
| enum GpioItem { | enum GpioItem { | ||||||
|     GpioItemOtg, |  | ||||||
|     GpioItemTest, |  | ||||||
|     GpioItemUsbUart, |     GpioItemUsbUart, | ||||||
|  |     GpioItemTest, | ||||||
|  |     GpioItemOtg, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum GpioOtg { | enum GpioOtg { | ||||||
| @ -22,11 +22,9 @@ static void gpio_scene_start_var_list_enter_callback(void* context, uint32_t ind | |||||||
|     furi_assert(context); |     furi_assert(context); | ||||||
|     GpioApp* app = context; |     GpioApp* app = context; | ||||||
|     if(index == GpioItemTest) { |     if(index == GpioItemTest) { | ||||||
|         view_dispatcher_send_custom_event( |         view_dispatcher_send_custom_event(app->view_dispatcher, GpioStartEventManualConrol); | ||||||
|             app->view_dispatcher, GPIO_SCENE_START_CUSTOM_EVENT_TEST); |  | ||||||
|     } else if(index == GpioItemUsbUart) { |     } else if(index == GpioItemUsbUart) { | ||||||
|         view_dispatcher_send_custom_event( |         view_dispatcher_send_custom_event(app->view_dispatcher, GpioStartEventUsbUart); | ||||||
|             app->view_dispatcher, GPIO_SCENE_START_CUSTOM_EVENT_USB_UART); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -36,11 +34,9 @@ static void gpio_scene_start_var_list_change_callback(VariableItem* item) { | |||||||
| 
 | 
 | ||||||
|     variable_item_set_current_value_text(item, gpio_otg_text[index]); |     variable_item_set_current_value_text(item, gpio_otg_text[index]); | ||||||
|     if(index == GpioOtgOff) { |     if(index == GpioOtgOff) { | ||||||
|         view_dispatcher_send_custom_event( |         view_dispatcher_send_custom_event(app->view_dispatcher, GpioStartEventOtgOff); | ||||||
|             app->view_dispatcher, GPIO_SCENE_START_CUSTOM_EVENT_OTG_OFF); |  | ||||||
|     } else if(index == GpioOtgOn) { |     } else if(index == GpioOtgOn) { | ||||||
|         view_dispatcher_send_custom_event( |         view_dispatcher_send_custom_event(app->view_dispatcher, GpioStartEventOtgOn); | ||||||
|             app->view_dispatcher, GPIO_SCENE_START_CUSTOM_EVENT_OTG_ON); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -51,6 +47,11 @@ void gpio_scene_start_on_enter(void* context) { | |||||||
|     VariableItem* item; |     VariableItem* item; | ||||||
|     variable_item_list_set_enter_callback( |     variable_item_list_set_enter_callback( | ||||||
|         var_item_list, gpio_scene_start_var_list_enter_callback, app); |         var_item_list, gpio_scene_start_var_list_enter_callback, app); | ||||||
|  | 
 | ||||||
|  |     variable_item_list_add(var_item_list, "USB-UART bridge", 0, NULL, NULL); | ||||||
|  | 
 | ||||||
|  |     variable_item_list_add(var_item_list, "GPIO manual control", 0, NULL, NULL); | ||||||
|  | 
 | ||||||
|     item = variable_item_list_add( |     item = variable_item_list_add( | ||||||
|         var_item_list, |         var_item_list, | ||||||
|         "5V on GPIO", |         "5V on GPIO", | ||||||
| @ -64,8 +65,6 @@ void gpio_scene_start_on_enter(void* context) { | |||||||
|         variable_item_set_current_value_index(item, GpioOtgOff); |         variable_item_set_current_value_index(item, GpioOtgOff); | ||||||
|         variable_item_set_current_value_text(item, gpio_otg_text[GpioOtgOff]); |         variable_item_set_current_value_text(item, gpio_otg_text[GpioOtgOff]); | ||||||
|     } |     } | ||||||
|     variable_item_list_add(var_item_list, "GPIO tester", 0, NULL, NULL); |  | ||||||
|     variable_item_list_add(var_item_list, "USB-UART bridge", 0, NULL, NULL); |  | ||||||
| 
 | 
 | ||||||
|     variable_item_list_set_selected_item( |     variable_item_list_set_selected_item( | ||||||
|         var_item_list, scene_manager_get_scene_state(app->scene_manager, GpioSceneStart)); |         var_item_list, scene_manager_get_scene_state(app->scene_manager, GpioSceneStart)); | ||||||
| @ -78,15 +77,15 @@ bool gpio_scene_start_on_event(void* context, SceneManagerEvent event) { | |||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == GPIO_SCENE_START_CUSTOM_EVENT_OTG_ON) { |         if(event.event == GpioStartEventOtgOn) { | ||||||
|             furi_hal_power_enable_otg(); |             furi_hal_power_enable_otg(); | ||||||
|         } else if(event.event == GPIO_SCENE_START_CUSTOM_EVENT_OTG_OFF) { |         } else if(event.event == GpioStartEventOtgOff) { | ||||||
|             furi_hal_power_disable_otg(); |             furi_hal_power_disable_otg(); | ||||||
|         } else if(event.event == GPIO_SCENE_START_CUSTOM_EVENT_TEST) { |         } else if(event.event == GpioStartEventManualConrol) { | ||||||
|             scene_manager_set_scene_state(app->scene_manager, GpioSceneStart, 1); |             scene_manager_set_scene_state(app->scene_manager, GpioSceneStart, GpioItemTest); | ||||||
|             scene_manager_next_scene(app->scene_manager, GpioSceneTest); |             scene_manager_next_scene(app->scene_manager, GpioSceneTest); | ||||||
|         } else if(event.event == GPIO_SCENE_START_CUSTOM_EVENT_USB_UART) { |         } else if(event.event == GpioStartEventUsbUart) { | ||||||
|             scene_manager_set_scene_state(app->scene_manager, GpioSceneStart, 2); |             scene_manager_set_scene_state(app->scene_manager, GpioSceneStart, GpioItemUsbUart); | ||||||
|             scene_manager_next_scene(app->scene_manager, GpioSceneUsbUart); |             scene_manager_next_scene(app->scene_manager, GpioSceneUsbUart); | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
|  | |||||||
| @ -1,138 +1,65 @@ | |||||||
| #include "../usb_uart_bridge.h" |  | ||||||
| #include "../gpio_app_i.h" | #include "../gpio_app_i.h" | ||||||
| #include "furi-hal.h" | #include "../usb_uart_bridge.h" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef struct { | ||||||
|     UsbUartLineIndexVcp, |     UsbUartConfig cfg; | ||||||
|     UsbUartLineIndexUart, |     UsbUartState state; | ||||||
|     UsbUartLineIndexBaudrate, | } SceneUsbUartBridge; | ||||||
|     UsbUartLineIndexEnable, |  | ||||||
|     UsbUartLineIndexDisable, |  | ||||||
| } LineIndex; |  | ||||||
| 
 | 
 | ||||||
| static UsbUartConfig* cfg_set; | static SceneUsbUartBridge* scene_usb_uart; | ||||||
| 
 | 
 | ||||||
| static const char* vcp_ch[] = {"0 (CLI)", "1"}; | void gpio_scene_usb_uart_callback(GpioCustomEvent event, void* context) { | ||||||
| static const char* uart_ch[] = {"USART1", "LPUART1"}; |  | ||||||
| static const char* baudrate_mode[] = {"Host"}; |  | ||||||
| static const uint32_t baudrate_list[] = { |  | ||||||
|     2400, |  | ||||||
|     9600, |  | ||||||
|     19200, |  | ||||||
|     38400, |  | ||||||
|     57600, |  | ||||||
|     115200, |  | ||||||
|     230400, |  | ||||||
|     460800, |  | ||||||
|     921600, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| bool gpio_scene_usb_uart_on_event(void* context, SceneManagerEvent event) { |  | ||||||
|     //GpioApp* app = context;
 |  | ||||||
|     bool consumed = false; |  | ||||||
| 
 |  | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |  | ||||||
|         if(event.event == GPIO_SCENE_USB_UART_CUSTOM_EVENT_ENABLE) { |  | ||||||
|             usb_uart_enable(cfg_set); |  | ||||||
|         } else if(event.event == GPIO_SCENE_USB_UART_CUSTOM_EVENT_DISABLE) { |  | ||||||
|             usb_uart_disable(); |  | ||||||
|         } |  | ||||||
|         consumed = true; |  | ||||||
|     } |  | ||||||
|     return consumed; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void line_vcp_cb(VariableItem* item) { |  | ||||||
|     //GpioApp* app = variable_item_get_context(item);
 |  | ||||||
|     uint8_t index = variable_item_get_current_value_index(item); |  | ||||||
| 
 |  | ||||||
|     variable_item_set_current_value_text(item, vcp_ch[index]); |  | ||||||
| 
 |  | ||||||
|     cfg_set->vcp_ch = index; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void line_port_cb(VariableItem* item) { |  | ||||||
|     //GpioApp* app = variable_item_get_context(item);
 |  | ||||||
|     uint8_t index = variable_item_get_current_value_index(item); |  | ||||||
| 
 |  | ||||||
|     variable_item_set_current_value_text(item, uart_ch[index]); |  | ||||||
| 
 |  | ||||||
|     if(index == 0) |  | ||||||
|         cfg_set->uart_ch = FuriHalUartIdUSART1; |  | ||||||
|     else if(index == 1) |  | ||||||
|         cfg_set->uart_ch = FuriHalUartIdLPUART1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void line_baudrate_cb(VariableItem* item) { |  | ||||||
|     //GpioApp* app = variable_item_get_context(item);
 |  | ||||||
|     uint8_t index = variable_item_get_current_value_index(item); |  | ||||||
| 
 |  | ||||||
|     char br_text[8]; |  | ||||||
| 
 |  | ||||||
|     if(index > 0) { |  | ||||||
|         snprintf(br_text, 7, "%lu", baudrate_list[index - 1]); |  | ||||||
|         variable_item_set_current_value_text(item, br_text); |  | ||||||
|         cfg_set->baudrate = baudrate_list[index - 1]; |  | ||||||
|     } else { |  | ||||||
|         variable_item_set_current_value_text(item, baudrate_mode[index]); |  | ||||||
|         cfg_set->baudrate = 0; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void gpio_scene_usb_uart_enter_callback(void* context, uint32_t index) { |  | ||||||
|     furi_assert(context); |     furi_assert(context); | ||||||
|     GpioApp* app = context; |     GpioApp* app = context; | ||||||
|     if(index == UsbUartLineIndexEnable) |     view_dispatcher_send_custom_event(app->view_dispatcher, event); | ||||||
|         view_dispatcher_send_custom_event( |  | ||||||
|             app->view_dispatcher, GPIO_SCENE_USB_UART_CUSTOM_EVENT_ENABLE); |  | ||||||
|     else if(index == UsbUartLineIndexDisable) |  | ||||||
|         view_dispatcher_send_custom_event( |  | ||||||
|             app->view_dispatcher, GPIO_SCENE_USB_UART_CUSTOM_EVENT_DISABLE); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void gpio_scene_usb_uart_on_enter(void* context) { | void gpio_scene_usb_uart_on_enter(void* context) { | ||||||
|     GpioApp* app = context; |     GpioApp* app = context; | ||||||
|     VariableItemList* var_item_list = app->var_item_list; |     uint32_t prev_state = scene_manager_get_scene_state(app->scene_manager, GpioAppViewUsbUart); | ||||||
|  |     if(prev_state == 0) { | ||||||
|  |         scene_usb_uart = furi_alloc(sizeof(SceneUsbUartBridge)); | ||||||
|  |         scene_usb_uart->cfg.vcp_ch = 0; // TODO: settings load
 | ||||||
|  |         scene_usb_uart->cfg.uart_ch = 0; | ||||||
|  |         scene_usb_uart->cfg.flow_pins = 0; | ||||||
|  |         scene_usb_uart->cfg.baudrate_mode = 0; | ||||||
|  |         scene_usb_uart->cfg.baudrate = 0; | ||||||
|  |         app->usb_uart_bridge = usb_uart_enable(&scene_usb_uart->cfg); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     cfg_set = furi_alloc(sizeof(UsbUartConfig)); |     usb_uart_get_config(app->usb_uart_bridge, &scene_usb_uart->cfg); | ||||||
| 
 |     usb_uart_get_state(app->usb_uart_bridge, &scene_usb_uart->state); | ||||||
|     VariableItem* item; |  | ||||||
| 
 |  | ||||||
|     variable_item_list_set_enter_callback(var_item_list, gpio_scene_usb_uart_enter_callback, app); |  | ||||||
| 
 |  | ||||||
|     item = variable_item_list_add(var_item_list, "VCP Channel", 2, line_vcp_cb, app); |  | ||||||
|     variable_item_set_current_value_index(item, 0); |  | ||||||
|     variable_item_set_current_value_text(item, vcp_ch[0]); |  | ||||||
| 
 |  | ||||||
|     item = variable_item_list_add(var_item_list, "UART Port", 2, line_port_cb, app); |  | ||||||
|     variable_item_set_current_value_index(item, 0); |  | ||||||
|     variable_item_set_current_value_text(item, uart_ch[0]); |  | ||||||
| 
 |  | ||||||
|     item = variable_item_list_add( |  | ||||||
|         var_item_list, |  | ||||||
|         "Baudrate", |  | ||||||
|         sizeof(baudrate_list) / sizeof(baudrate_list[0]) + 1, |  | ||||||
|         line_baudrate_cb, |  | ||||||
|         app); |  | ||||||
|     variable_item_set_current_value_index(item, 0); |  | ||||||
|     variable_item_set_current_value_text(item, baudrate_mode[0]); |  | ||||||
| 
 |  | ||||||
|     item = variable_item_list_add(var_item_list, "Enable", 0, NULL, NULL); |  | ||||||
|     item = variable_item_list_add(var_item_list, "Disable", 0, NULL, NULL); |  | ||||||
| 
 |  | ||||||
|     variable_item_list_set_selected_item( |  | ||||||
|         var_item_list, scene_manager_get_scene_state(app->scene_manager, GpioSceneUsbUart)); |  | ||||||
| 
 | 
 | ||||||
|  |     gpio_usb_uart_set_callback(app->gpio_usb_uart, gpio_scene_usb_uart_callback, app); | ||||||
|  |     scene_manager_set_scene_state(app->scene_manager, GpioAppViewUsbUart, 0); | ||||||
|     view_dispatcher_switch_to_view(app->view_dispatcher, GpioAppViewUsbUart); |     view_dispatcher_switch_to_view(app->view_dispatcher, GpioAppViewUsbUart); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool gpio_scene_usb_uart_on_event(void* context, SceneManagerEvent event) { | ||||||
|  |     GpioApp* app = context; | ||||||
|  |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|  |         scene_manager_set_scene_state(app->scene_manager, GpioAppViewUsbUart, 1); | ||||||
|  |         scene_manager_next_scene(app->scene_manager, GpioAppViewUsbUartCfg); | ||||||
|  |         return true; | ||||||
|  |     } else if(event.type == SceneManagerEventTypeTick) { | ||||||
|  |         uint32_t tx_cnt_last = scene_usb_uart->state.tx_cnt; | ||||||
|  |         uint32_t rx_cnt_last = scene_usb_uart->state.rx_cnt; | ||||||
|  |         usb_uart_get_state(app->usb_uart_bridge, &scene_usb_uart->state); | ||||||
|  |         gpio_usb_uart_update_state( | ||||||
|  |             app->gpio_usb_uart, &scene_usb_uart->cfg, &scene_usb_uart->state); | ||||||
|  |         if(tx_cnt_last != scene_usb_uart->state.tx_cnt) | ||||||
|  |             notification_message(app->notifications, &sequence_blink_blue_10); | ||||||
|  |         if(rx_cnt_last != scene_usb_uart->state.rx_cnt) | ||||||
|  |             notification_message(app->notifications, &sequence_blink_green_10); | ||||||
|  |     } | ||||||
|  |     return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void gpio_scene_usb_uart_on_exit(void* context) { | void gpio_scene_usb_uart_on_exit(void* context) { | ||||||
|     GpioApp* app = context; |     GpioApp* app = context; | ||||||
|     usb_uart_disable(); |     uint32_t prev_state = scene_manager_get_scene_state(app->scene_manager, GpioAppViewUsbUart); | ||||||
|     scene_manager_set_scene_state( |     if(prev_state == 0) { | ||||||
|         app->scene_manager, |         usb_uart_disable(app->usb_uart_bridge); | ||||||
|         GpioSceneUsbUart, |         free(scene_usb_uart); | ||||||
|         variable_item_list_get_selected_item_index(app->var_item_list)); |     } | ||||||
|     variable_item_list_clean(app->var_item_list); |  | ||||||
|     free(cfg_set); |  | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										140
									
								
								applications/gpio/scenes/gpio_scene_usb_uart_config.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								applications/gpio/scenes/gpio_scene_usb_uart_config.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,140 @@ | |||||||
|  | #include "../usb_uart_bridge.h" | ||||||
|  | #include "../gpio_app_i.h" | ||||||
|  | #include "furi-hal.h" | ||||||
|  | 
 | ||||||
|  | typedef enum { | ||||||
|  |     UsbUartLineIndexVcp, | ||||||
|  |     UsbUartLineIndexBaudrate, | ||||||
|  |     UsbUartLineIndexUart, | ||||||
|  |     UsbUartLineIndexFlow, | ||||||
|  | } LineIndex; | ||||||
|  | 
 | ||||||
|  | static UsbUartConfig* cfg_set; | ||||||
|  | 
 | ||||||
|  | static const char* vcp_ch[] = {"0 (CLI)", "1"}; | ||||||
|  | static const char* uart_ch[] = {"13,14", "15,16"}; | ||||||
|  | static const char* flow_pins[] = {"None", "2,3", "6,7"}; | ||||||
|  | static const char* baudrate_mode[] = {"Host"}; | ||||||
|  | static const uint32_t baudrate_list[] = { | ||||||
|  |     2400, | ||||||
|  |     9600, | ||||||
|  |     19200, | ||||||
|  |     38400, | ||||||
|  |     57600, | ||||||
|  |     115200, | ||||||
|  |     230400, | ||||||
|  |     460800, | ||||||
|  |     921600, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | bool gpio_scene_usb_uart_cfg_on_event(void* context, SceneManagerEvent event) { | ||||||
|  |     //GpioApp* app = context;
 | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|  |     } | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void line_vcp_cb(VariableItem* item) { | ||||||
|  |     GpioApp* app = variable_item_get_context(item); | ||||||
|  |     uint8_t index = variable_item_get_current_value_index(item); | ||||||
|  | 
 | ||||||
|  |     variable_item_set_current_value_text(item, vcp_ch[index]); | ||||||
|  | 
 | ||||||
|  |     cfg_set->vcp_ch = index; | ||||||
|  |     usb_uart_set_config(app->usb_uart_bridge, cfg_set); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void line_port_cb(VariableItem* item) { | ||||||
|  |     GpioApp* app = variable_item_get_context(item); | ||||||
|  |     uint8_t index = variable_item_get_current_value_index(item); | ||||||
|  | 
 | ||||||
|  |     variable_item_set_current_value_text(item, uart_ch[index]); | ||||||
|  | 
 | ||||||
|  |     if(index == 0) | ||||||
|  |         cfg_set->uart_ch = FuriHalUartIdUSART1; | ||||||
|  |     else if(index == 1) | ||||||
|  |         cfg_set->uart_ch = FuriHalUartIdLPUART1; | ||||||
|  |     usb_uart_set_config(app->usb_uart_bridge, cfg_set); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void line_flow_cb(VariableItem* item) { | ||||||
|  |     GpioApp* app = variable_item_get_context(item); | ||||||
|  |     uint8_t index = variable_item_get_current_value_index(item); | ||||||
|  | 
 | ||||||
|  |     variable_item_set_current_value_text(item, flow_pins[index]); | ||||||
|  | 
 | ||||||
|  |     cfg_set->flow_pins = index; | ||||||
|  |     usb_uart_set_config(app->usb_uart_bridge, cfg_set); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void line_baudrate_cb(VariableItem* item) { | ||||||
|  |     GpioApp* app = variable_item_get_context(item); | ||||||
|  |     uint8_t index = variable_item_get_current_value_index(item); | ||||||
|  | 
 | ||||||
|  |     char br_text[8]; | ||||||
|  | 
 | ||||||
|  |     if(index > 0) { | ||||||
|  |         snprintf(br_text, 7, "%lu", baudrate_list[index - 1]); | ||||||
|  |         variable_item_set_current_value_text(item, br_text); | ||||||
|  |         cfg_set->baudrate = baudrate_list[index - 1]; | ||||||
|  |     } else { | ||||||
|  |         variable_item_set_current_value_text(item, baudrate_mode[index]); | ||||||
|  |         cfg_set->baudrate = 0; | ||||||
|  |     } | ||||||
|  |     cfg_set->baudrate_mode = index; | ||||||
|  |     usb_uart_set_config(app->usb_uart_bridge, cfg_set); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_scene_usb_uart_cfg_on_enter(void* context) { | ||||||
|  |     GpioApp* app = context; | ||||||
|  |     VariableItemList* var_item_list = app->var_item_list; | ||||||
|  | 
 | ||||||
|  |     cfg_set = furi_alloc(sizeof(UsbUartConfig)); | ||||||
|  |     usb_uart_get_config(app->usb_uart_bridge, cfg_set); | ||||||
|  | 
 | ||||||
|  |     VariableItem* item; | ||||||
|  |     char br_text[8]; | ||||||
|  | 
 | ||||||
|  |     item = variable_item_list_add(var_item_list, "USB Channel", 2, line_vcp_cb, app); | ||||||
|  |     variable_item_set_current_value_index(item, cfg_set->vcp_ch); | ||||||
|  |     variable_item_set_current_value_text(item, vcp_ch[cfg_set->vcp_ch]); | ||||||
|  | 
 | ||||||
|  |     item = variable_item_list_add( | ||||||
|  |         var_item_list, | ||||||
|  |         "Baudrate", | ||||||
|  |         sizeof(baudrate_list) / sizeof(baudrate_list[0]) + 1, | ||||||
|  |         line_baudrate_cb, | ||||||
|  |         app); | ||||||
|  |     variable_item_set_current_value_index(item, cfg_set->baudrate_mode); | ||||||
|  |     if(cfg_set->baudrate_mode > 0) { | ||||||
|  |         snprintf(br_text, 7, "%lu", baudrate_list[cfg_set->baudrate_mode - 1]); | ||||||
|  |         variable_item_set_current_value_text(item, br_text); | ||||||
|  |     } else { | ||||||
|  |         variable_item_set_current_value_text(item, baudrate_mode[cfg_set->baudrate_mode]); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     item = variable_item_list_add(var_item_list, "UART Pins", 2, line_port_cb, app); | ||||||
|  |     variable_item_set_current_value_index(item, cfg_set->uart_ch); | ||||||
|  |     variable_item_set_current_value_text(item, uart_ch[cfg_set->uart_ch]); | ||||||
|  | 
 | ||||||
|  |     item = variable_item_list_add(var_item_list, "RTS/DTR Pins", 3, line_flow_cb, app); | ||||||
|  |     variable_item_set_current_value_index(item, cfg_set->flow_pins); | ||||||
|  |     variable_item_set_current_value_text(item, flow_pins[cfg_set->flow_pins]); | ||||||
|  | 
 | ||||||
|  |     variable_item_list_set_selected_item( | ||||||
|  |         var_item_list, scene_manager_get_scene_state(app->scene_manager, GpioAppViewUsbUartCfg)); | ||||||
|  | 
 | ||||||
|  |     view_dispatcher_switch_to_view(app->view_dispatcher, GpioAppViewUsbUartCfg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_scene_usb_uart_cfg_on_exit(void* context) { | ||||||
|  |     GpioApp* app = context; | ||||||
|  |     scene_manager_set_scene_state( | ||||||
|  |         app->scene_manager, | ||||||
|  |         GpioAppViewUsbUartCfg, | ||||||
|  |         variable_item_list_get_selected_item_index(app->var_item_list)); | ||||||
|  |     variable_item_list_clean(app->var_item_list); | ||||||
|  |     free(cfg_set); | ||||||
|  | } | ||||||
| @ -7,6 +7,14 @@ | |||||||
| #define USB_CDC_PKT_LEN CDC_DATA_SZ | #define USB_CDC_PKT_LEN CDC_DATA_SZ | ||||||
| #define USB_UART_RX_BUF_SIZE (USB_CDC_PKT_LEN * 5) | #define USB_UART_RX_BUF_SIZE (USB_CDC_PKT_LEN * 5) | ||||||
| 
 | 
 | ||||||
|  | #define USB_CDC_BIT_DTR (1 << 0) | ||||||
|  | #define USB_CDC_BIT_RTS (1 << 1) | ||||||
|  | 
 | ||||||
|  | static const GpioPin* flow_pins[][2] = { | ||||||
|  |     {&gpio_ext_pa7, &gpio_ext_pa6}, // 2, 3
 | ||||||
|  |     {&gpio_ext_pb2, &gpio_ext_pc3}, // 6, 7
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     WorkerEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
 |     WorkerEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
 | ||||||
|     WorkerEvtStop = (1 << 1), |     WorkerEvtStop = (1 << 1), | ||||||
| @ -14,13 +22,22 @@ typedef enum { | |||||||
| 
 | 
 | ||||||
|     WorkerEvtTxStop = (1 << 3), |     WorkerEvtTxStop = (1 << 3), | ||||||
|     WorkerEvtCdcRx = (1 << 4), |     WorkerEvtCdcRx = (1 << 4), | ||||||
|  | 
 | ||||||
|  |     WorkerEvtCfgChange = (1 << 5), | ||||||
|  | 
 | ||||||
|  |     WorkerEvtLineCfgSet = (1 << 6), | ||||||
|  |     WorkerEvtCtrlLineSet = (1 << 7), | ||||||
|  | 
 | ||||||
| } WorkerEvtFlags; | } WorkerEvtFlags; | ||||||
| 
 | 
 | ||||||
| #define WORKER_ALL_RX_EVENTS (WorkerEvtStop | WorkerEvtRxDone) | #define WORKER_ALL_RX_EVENTS                                                      \ | ||||||
|  |     (WorkerEvtStop | WorkerEvtRxDone | WorkerEvtCfgChange | WorkerEvtLineCfgSet | \ | ||||||
|  |      WorkerEvtCtrlLineSet) | ||||||
| #define WORKER_ALL_TX_EVENTS (WorkerEvtTxStop | WorkerEvtCdcRx) | #define WORKER_ALL_TX_EVENTS (WorkerEvtTxStop | WorkerEvtCdcRx) | ||||||
| 
 | 
 | ||||||
| typedef struct { | struct UsbUartBridge { | ||||||
|     UsbUartConfig cfg; |     UsbUartConfig cfg; | ||||||
|  |     UsbUartConfig cfg_new; | ||||||
| 
 | 
 | ||||||
|     FuriThread* thread; |     FuriThread* thread; | ||||||
|     FuriThread* tx_thread; |     FuriThread* tx_thread; | ||||||
| @ -31,21 +48,18 @@ typedef struct { | |||||||
| 
 | 
 | ||||||
|     osSemaphoreId_t tx_sem; |     osSemaphoreId_t tx_sem; | ||||||
| 
 | 
 | ||||||
|  |     UsbUartState st; | ||||||
|  | 
 | ||||||
|     uint8_t rx_buf[USB_CDC_PKT_LEN]; |     uint8_t rx_buf[USB_CDC_PKT_LEN]; | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
|     bool buf_full; | static void vcp_on_cdc_tx_complete(void* context); | ||||||
| } UsbUartParams; | static void vcp_on_cdc_rx(void* context); | ||||||
|  | static void vcp_state_callback(void* context, uint8_t state); | ||||||
|  | static void vcp_on_cdc_control_line(void* context, uint8_t state); | ||||||
|  | static void vcp_on_line_config(void* context, struct usb_cdc_line_coding* config); | ||||||
| 
 | 
 | ||||||
| static UsbUartParams* usb_uart; | static const CdcCallbacks cdc_cb = { | ||||||
| static bool running = false; |  | ||||||
| 
 |  | ||||||
| static void vcp_on_cdc_tx_complete(); |  | ||||||
| static void vcp_on_cdc_rx(); |  | ||||||
| static void vcp_state_callback(uint8_t state); |  | ||||||
| static void vcp_on_cdc_control_line(uint8_t state); |  | ||||||
| static void vcp_on_line_config(struct usb_cdc_line_coding* config); |  | ||||||
| 
 |  | ||||||
| static CdcCallbacks cdc_cb = { |  | ||||||
|     vcp_on_cdc_tx_complete, |     vcp_on_cdc_tx_complete, | ||||||
|     vcp_on_cdc_rx, |     vcp_on_cdc_rx, | ||||||
|     vcp_state_callback, |     vcp_state_callback, | ||||||
| @ -58,17 +72,76 @@ static CdcCallbacks cdc_cb = { | |||||||
| static int32_t usb_uart_tx_thread(void* context); | static int32_t usb_uart_tx_thread(void* context); | ||||||
| 
 | 
 | ||||||
| static void usb_uart_on_irq_cb(UartIrqEvent ev, uint8_t data, void* context) { | static void usb_uart_on_irq_cb(UartIrqEvent ev, uint8_t data, void* context) { | ||||||
|  |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|     BaseType_t xHigherPriorityTaskWoken = pdFALSE; |     BaseType_t xHigherPriorityTaskWoken = pdFALSE; | ||||||
| 
 | 
 | ||||||
|     if(ev == UartIrqEventRXNE) { |     if(ev == UartIrqEventRXNE) { | ||||||
|         xStreamBufferSendFromISR(usb_uart->rx_stream, &data, 1, &xHigherPriorityTaskWoken); |         xStreamBufferSendFromISR(usb_uart->rx_stream, &data, 1, &xHigherPriorityTaskWoken); | ||||||
|         portYIELD_FROM_ISR(xHigherPriorityTaskWoken); |  | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtRxDone); |         osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtRxDone); | ||||||
|  |         portYIELD_FROM_ISR(xHigherPriorityTaskWoken); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void usb_uart_vcp_init(UsbUartBridge* usb_uart, uint8_t vcp_ch) { | ||||||
|  |     if(vcp_ch == 0) { | ||||||
|  |         furi_hal_usb_set_config(&usb_cdc_single); | ||||||
|  |         furi_hal_vcp_disable(); | ||||||
|  |     } else { | ||||||
|  |         furi_hal_usb_set_config(&usb_cdc_dual); | ||||||
|  |     } | ||||||
|  |     furi_hal_cdc_set_callbacks(vcp_ch, (CdcCallbacks*)&cdc_cb, usb_uart); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void usb_uart_vcp_deinit(UsbUartBridge* usb_uart, uint8_t vcp_ch) { | ||||||
|  |     furi_hal_cdc_set_callbacks(vcp_ch, NULL, NULL); | ||||||
|  |     if(vcp_ch == 0) furi_hal_vcp_enable(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void usb_uart_serial_init(UsbUartBridge* usb_uart, uint8_t uart_ch) { | ||||||
|  |     if(uart_ch == FuriHalUartIdUSART1) { | ||||||
|  |         furi_hal_console_disable(); | ||||||
|  |     } else if(uart_ch == FuriHalUartIdLPUART1) { | ||||||
|  |         furi_hal_uart_init(uart_ch, 115200); | ||||||
|  |     } | ||||||
|  |     furi_hal_uart_set_irq_cb(uart_ch, usb_uart_on_irq_cb, usb_uart); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void usb_uart_serial_deinit(UsbUartBridge* usb_uart, uint8_t uart_ch) { | ||||||
|  |     furi_hal_uart_set_irq_cb(uart_ch, NULL, NULL); | ||||||
|  |     if(uart_ch == FuriHalUartIdUSART1) | ||||||
|  |         furi_hal_console_enable(); | ||||||
|  |     else if(uart_ch == FuriHalUartIdLPUART1) | ||||||
|  |         furi_hal_uart_deinit(uart_ch); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void usb_uart_set_baudrate(UsbUartBridge* usb_uart, uint32_t baudrate) { | ||||||
|  |     if(baudrate != 0) { | ||||||
|  |         furi_hal_uart_set_br(usb_uart->cfg.uart_ch, baudrate); | ||||||
|  |         usb_uart->st.baudrate_cur = baudrate; | ||||||
|  |     } else { | ||||||
|  |         struct usb_cdc_line_coding* line_cfg = | ||||||
|  |             furi_hal_cdc_get_port_settings(usb_uart->cfg.vcp_ch); | ||||||
|  |         if(line_cfg->dwDTERate > 0) { | ||||||
|  |             furi_hal_uart_set_br(usb_uart->cfg.uart_ch, line_cfg->dwDTERate); | ||||||
|  |             usb_uart->st.baudrate_cur = line_cfg->dwDTERate; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void usb_uart_update_ctrl_lines(UsbUartBridge* usb_uart) { | ||||||
|  |     if(usb_uart->cfg.flow_pins != 0) { | ||||||
|  |         furi_assert((usb_uart->cfg.flow_pins - 1) < (sizeof(flow_pins) / sizeof(flow_pins[0]))); | ||||||
|  |         uint8_t state = furi_hal_cdc_get_ctrl_line_state(usb_uart->cfg.vcp_ch); | ||||||
|  | 
 | ||||||
|  |         hal_gpio_write(flow_pins[usb_uart->cfg.flow_pins - 1][0], !(state & USB_CDC_BIT_RTS)); | ||||||
|  |         hal_gpio_write(flow_pins[usb_uart->cfg.flow_pins - 1][1], !(state & USB_CDC_BIT_DTR)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int32_t usb_uart_worker(void* context) { | static int32_t usb_uart_worker(void* context) { | ||||||
|     memcpy(&usb_uart->cfg, context, sizeof(UsbUartConfig)); |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|  | 
 | ||||||
|  |     memcpy(&usb_uart->cfg, &usb_uart->cfg_new, sizeof(UsbUartConfig)); | ||||||
| 
 | 
 | ||||||
|     usb_uart->rx_stream = xStreamBufferCreate(USB_UART_RX_BUF_SIZE, 1); |     usb_uart->rx_stream = xStreamBufferCreate(USB_UART_RX_BUF_SIZE, 1); | ||||||
| 
 | 
 | ||||||
| @ -78,33 +151,22 @@ static int32_t usb_uart_worker(void* context) { | |||||||
|     usb_uart->tx_thread = furi_thread_alloc(); |     usb_uart->tx_thread = furi_thread_alloc(); | ||||||
|     furi_thread_set_name(usb_uart->tx_thread, "UsbUartTxWorker"); |     furi_thread_set_name(usb_uart->tx_thread, "UsbUartTxWorker"); | ||||||
|     furi_thread_set_stack_size(usb_uart->tx_thread, 512); |     furi_thread_set_stack_size(usb_uart->tx_thread, 512); | ||||||
|     furi_thread_set_context(usb_uart->tx_thread, NULL); |     furi_thread_set_context(usb_uart->tx_thread, usb_uart); | ||||||
|     furi_thread_set_callback(usb_uart->tx_thread, usb_uart_tx_thread); |     furi_thread_set_callback(usb_uart->tx_thread, usb_uart_tx_thread); | ||||||
| 
 | 
 | ||||||
|     UsbMode usb_mode_prev = furi_hal_usb_get_config(); |     UsbInterface* usb_mode_prev = furi_hal_usb_get_config(); | ||||||
|     if(usb_uart->cfg.vcp_ch == 0) { |     usb_uart_vcp_init(usb_uart, usb_uart->cfg.vcp_ch); | ||||||
|         furi_hal_usb_set_config(UsbModeVcpSingle); |     usb_uart_serial_init(usb_uart, usb_uart->cfg.uart_ch); | ||||||
|         furi_hal_vcp_disable(); |     usb_uart_set_baudrate(usb_uart, usb_uart->cfg.baudrate); | ||||||
|     } else { |     if(usb_uart->cfg.flow_pins != 0) { | ||||||
|         furi_hal_usb_set_config(UsbModeVcpDual); |         furi_assert((usb_uart->cfg.flow_pins - 1) < (sizeof(flow_pins) / sizeof(flow_pins[0]))); | ||||||
|  |         hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][0], GpioModeOutputPushPull); | ||||||
|  |         hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][1], GpioModeOutputPushPull); | ||||||
|  |         usb_uart_update_ctrl_lines(usb_uart); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtCdcRx); |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtCdcRx); | ||||||
| 
 | 
 | ||||||
|     if(usb_uart->cfg.uart_ch == FuriHalUartIdUSART1) { |  | ||||||
|         furi_hal_console_disable(); |  | ||||||
|     } else if(usb_uart->cfg.uart_ch == FuriHalUartIdLPUART1) { |  | ||||||
|         furi_hal_uart_init(usb_uart->cfg.uart_ch, 115200); |  | ||||||
|         furi_hal_uart_set_irq_cb(usb_uart->cfg.uart_ch, usb_uart_on_irq_cb, NULL); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     furi_hal_uart_set_irq_cb(usb_uart->cfg.uart_ch, usb_uart_on_irq_cb, NULL); |  | ||||||
|     if(usb_uart->cfg.baudrate != 0) |  | ||||||
|         furi_hal_uart_set_br(usb_uart->cfg.uart_ch, usb_uart->cfg.baudrate); |  | ||||||
|     else |  | ||||||
|         vcp_on_line_config(furi_hal_cdc_get_port_settings(usb_uart->cfg.vcp_ch)); |  | ||||||
| 
 |  | ||||||
|     furi_hal_cdc_set_callbacks(usb_uart->cfg.vcp_ch, &cdc_cb); |  | ||||||
| 
 |  | ||||||
|     furi_thread_start(usb_uart->tx_thread); |     furi_thread_start(usb_uart->tx_thread); | ||||||
| 
 | 
 | ||||||
|     while(1) { |     while(1) { | ||||||
| @ -116,6 +178,7 @@ static int32_t usb_uart_worker(void* context) { | |||||||
|                 xStreamBufferReceive(usb_uart->rx_stream, usb_uart->rx_buf, USB_CDC_PKT_LEN, 0); |                 xStreamBufferReceive(usb_uart->rx_stream, usb_uart->rx_buf, USB_CDC_PKT_LEN, 0); | ||||||
|             if(len > 0) { |             if(len > 0) { | ||||||
|                 if(osSemaphoreAcquire(usb_uart->tx_sem, 100) == osOK) { |                 if(osSemaphoreAcquire(usb_uart->tx_sem, 100) == osOK) { | ||||||
|  |                     usb_uart->st.rx_cnt += len; | ||||||
|                     furi_check(osMutexAcquire(usb_uart->usb_mutex, osWaitForever) == osOK); |                     furi_check(osMutexAcquire(usb_uart->usb_mutex, osWaitForever) == osOK); | ||||||
|                     furi_hal_cdc_send(usb_uart->cfg.vcp_ch, usb_uart->rx_buf, len); |                     furi_hal_cdc_send(usb_uart->cfg.vcp_ch, usb_uart->rx_buf, len); | ||||||
|                     furi_check(osMutexRelease(usb_uart->usb_mutex) == osOK); |                     furi_check(osMutexRelease(usb_uart->usb_mutex) == osOK); | ||||||
| @ -124,21 +187,76 @@ static int32_t usb_uart_worker(void* context) { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         if(events & WorkerEvtCfgChange) { | ||||||
|  |             if(usb_uart->cfg.vcp_ch != usb_uart->cfg_new.vcp_ch) { | ||||||
|  |                 osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtTxStop); | ||||||
|  |                 furi_thread_join(usb_uart->tx_thread); | ||||||
|  | 
 | ||||||
|  |                 usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch); | ||||||
|  |                 usb_uart_vcp_init(usb_uart, usb_uart->cfg_new.vcp_ch); | ||||||
|  | 
 | ||||||
|  |                 usb_uart->cfg.vcp_ch = usb_uart->cfg_new.vcp_ch; | ||||||
|  |                 furi_thread_start(usb_uart->tx_thread); | ||||||
|  |                 events |= WorkerEvtCtrlLineSet; | ||||||
|  |                 events |= WorkerEvtLineCfgSet; | ||||||
|  |             } | ||||||
|  |             if(usb_uart->cfg.uart_ch != usb_uart->cfg_new.uart_ch) { | ||||||
|  |                 osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtTxStop); | ||||||
|  |                 furi_thread_join(usb_uart->tx_thread); | ||||||
|  | 
 | ||||||
|  |                 usb_uart_serial_deinit(usb_uart, usb_uart->cfg.uart_ch); | ||||||
|  |                 usb_uart_serial_init(usb_uart, usb_uart->cfg_new.uart_ch); | ||||||
|  | 
 | ||||||
|  |                 usb_uart->cfg.uart_ch = usb_uart->cfg_new.uart_ch; | ||||||
|  |                 usb_uart_set_baudrate(usb_uart, usb_uart->cfg.baudrate); | ||||||
|  | 
 | ||||||
|  |                 furi_thread_start(usb_uart->tx_thread); | ||||||
|  |             } | ||||||
|  |             if(usb_uart->cfg.baudrate != usb_uart->cfg_new.baudrate) { | ||||||
|  |                 usb_uart_set_baudrate(usb_uart, usb_uart->cfg_new.baudrate); | ||||||
|  |                 usb_uart->cfg.baudrate = usb_uart->cfg_new.baudrate; | ||||||
|  |             } | ||||||
|  |             if(usb_uart->cfg.flow_pins != usb_uart->cfg_new.flow_pins) { | ||||||
|  |                 if(usb_uart->cfg.flow_pins != 0) { | ||||||
|  |                     hal_gpio_init_simple( | ||||||
|  |                         flow_pins[usb_uart->cfg.flow_pins - 1][0], GpioModeAnalog); | ||||||
|  |                     hal_gpio_init_simple( | ||||||
|  |                         flow_pins[usb_uart->cfg.flow_pins - 1][1], GpioModeAnalog); | ||||||
|  |                 } | ||||||
|  |                 if(usb_uart->cfg_new.flow_pins != 0) { | ||||||
|  |                     furi_assert( | ||||||
|  |                         (usb_uart->cfg_new.flow_pins - 1) < | ||||||
|  |                         (sizeof(flow_pins) / sizeof(flow_pins[0]))); | ||||||
|  |                     hal_gpio_init_simple( | ||||||
|  |                         flow_pins[usb_uart->cfg_new.flow_pins - 1][0], GpioModeOutputPushPull); | ||||||
|  |                     hal_gpio_init_simple( | ||||||
|  |                         flow_pins[usb_uart->cfg_new.flow_pins - 1][1], GpioModeOutputPushPull); | ||||||
|  |                 } | ||||||
|  |                 usb_uart->cfg.flow_pins = usb_uart->cfg_new.flow_pins; | ||||||
|  |                 events |= WorkerEvtCtrlLineSet; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if(events & WorkerEvtLineCfgSet) { | ||||||
|  |             if(usb_uart->cfg.baudrate == 0) | ||||||
|  |                 usb_uart_set_baudrate(usb_uart, usb_uart->cfg.baudrate); | ||||||
|  |         } | ||||||
|  |         if(events & WorkerEvtCtrlLineSet) { | ||||||
|  |             usb_uart_update_ctrl_lines(usb_uart); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch); | ||||||
|  |     usb_uart_serial_deinit(usb_uart, usb_uart->cfg.uart_ch); | ||||||
|  |     furi_hal_usb_set_config(usb_mode_prev); | ||||||
|  |     if(usb_uart->cfg.flow_pins != 0) { | ||||||
|  |         hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][0], GpioModeAnalog); | ||||||
|  |         hal_gpio_init_simple(flow_pins[usb_uart->cfg.flow_pins - 1][1], GpioModeAnalog); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtTxStop); |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtTxStop); | ||||||
|     furi_thread_join(usb_uart->tx_thread); |     furi_thread_join(usb_uart->tx_thread); | ||||||
|     furi_thread_free(usb_uart->tx_thread); |     furi_thread_free(usb_uart->tx_thread); | ||||||
| 
 | 
 | ||||||
|     if(usb_uart->cfg.uart_ch == FuriHalUartIdUSART1) |  | ||||||
|         furi_hal_console_enable(); |  | ||||||
|     else if(usb_uart->cfg.uart_ch == FuriHalUartIdLPUART1) |  | ||||||
|         furi_hal_uart_deinit(usb_uart->cfg.uart_ch); |  | ||||||
| 
 |  | ||||||
|     furi_hal_cdc_set_callbacks(usb_uart->cfg.vcp_ch, NULL); |  | ||||||
|     furi_hal_usb_set_config(usb_mode_prev); |  | ||||||
|     if(usb_uart->cfg.vcp_ch == 0) furi_hal_vcp_enable(); |  | ||||||
| 
 |  | ||||||
|     vStreamBufferDelete(usb_uart->rx_stream); |     vStreamBufferDelete(usb_uart->rx_stream); | ||||||
|     osMutexDelete(usb_uart->usb_mutex); |     osMutexDelete(usb_uart->usb_mutex); | ||||||
|     osSemaphoreDelete(usb_uart->tx_sem); |     osSemaphoreDelete(usb_uart->tx_sem); | ||||||
| @ -147,6 +265,8 @@ static int32_t usb_uart_worker(void* context) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int32_t usb_uart_tx_thread(void* context) { | static int32_t usb_uart_tx_thread(void* context) { | ||||||
|  |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|  | 
 | ||||||
|     uint8_t data[USB_CDC_PKT_LEN]; |     uint8_t data[USB_CDC_PKT_LEN]; | ||||||
|     while(1) { |     while(1) { | ||||||
|         uint32_t events = osThreadFlagsWait(WORKER_ALL_TX_EVENTS, osFlagsWaitAny, osWaitForever); |         uint32_t events = osThreadFlagsWait(WORKER_ALL_TX_EVENTS, osFlagsWaitAny, osWaitForever); | ||||||
| @ -154,11 +274,12 @@ static int32_t usb_uart_tx_thread(void* context) { | |||||||
|         if(events & WorkerEvtTxStop) break; |         if(events & WorkerEvtTxStop) break; | ||||||
|         if(events & WorkerEvtCdcRx) { |         if(events & WorkerEvtCdcRx) { | ||||||
|             furi_check(osMutexAcquire(usb_uart->usb_mutex, osWaitForever) == osOK); |             furi_check(osMutexAcquire(usb_uart->usb_mutex, osWaitForever) == osOK); | ||||||
|             int32_t size = furi_hal_cdc_receive(usb_uart->cfg.vcp_ch, data, USB_CDC_PKT_LEN); |             size_t len = furi_hal_cdc_receive(usb_uart->cfg.vcp_ch, data, USB_CDC_PKT_LEN); | ||||||
|             furi_check(osMutexRelease(usb_uart->usb_mutex) == osOK); |             furi_check(osMutexRelease(usb_uart->usb_mutex) == osOK); | ||||||
| 
 | 
 | ||||||
|             if(size > 0) { |             if(len > 0) { | ||||||
|                 furi_hal_uart_tx(usb_uart->cfg.uart_ch, data, size); |                 usb_uart->st.tx_cnt += len; | ||||||
|  |                 furi_hal_uart_tx(usb_uart->cfg.uart_ch, data, len); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -167,46 +288,66 @@ static int32_t usb_uart_tx_thread(void* context) { | |||||||
| 
 | 
 | ||||||
| /* VCP callbacks */ | /* VCP callbacks */ | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_tx_complete() { | static void vcp_on_cdc_tx_complete(void* context) { | ||||||
|  |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|     osSemaphoreRelease(usb_uart->tx_sem); |     osSemaphoreRelease(usb_uart->tx_sem); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_rx() { | static void vcp_on_cdc_rx(void* context) { | ||||||
|  |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtCdcRx); |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->tx_thread), WorkerEvtCdcRx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_state_callback(uint8_t state) { | static void vcp_state_callback(void* context, uint8_t state) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_control_line(uint8_t state) { | static void vcp_on_cdc_control_line(void* context, uint8_t state) { | ||||||
|  |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|  |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtCtrlLineSet); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_line_config(struct usb_cdc_line_coding* config) { | static void vcp_on_line_config(void* context, struct usb_cdc_line_coding* config) { | ||||||
|     if((usb_uart->cfg.baudrate == 0) && (config->dwDTERate != 0)) |     UsbUartBridge* usb_uart = (UsbUartBridge*)context; | ||||||
|         furi_hal_uart_set_br(usb_uart->cfg.uart_ch, config->dwDTERate); |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtLineCfgSet); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void usb_uart_enable(UsbUartConfig* cfg) { | UsbUartBridge* usb_uart_enable(UsbUartConfig* cfg) { | ||||||
|     if(running == false) { |     UsbUartBridge* usb_uart = furi_alloc(sizeof(UsbUartBridge)); | ||||||
|         running = true; | 
 | ||||||
|         usb_uart = furi_alloc(sizeof(UsbUartParams)); |     memcpy(&(usb_uart->cfg_new), cfg, sizeof(UsbUartConfig)); | ||||||
| 
 | 
 | ||||||
|     usb_uart->thread = furi_thread_alloc(); |     usb_uart->thread = furi_thread_alloc(); | ||||||
|     furi_thread_set_name(usb_uart->thread, "UsbUartWorker"); |     furi_thread_set_name(usb_uart->thread, "UsbUartWorker"); | ||||||
|     furi_thread_set_stack_size(usb_uart->thread, 1024); |     furi_thread_set_stack_size(usb_uart->thread, 1024); | ||||||
|         furi_thread_set_context(usb_uart->thread, cfg); |     furi_thread_set_context(usb_uart->thread, usb_uart); | ||||||
|     furi_thread_set_callback(usb_uart->thread, usb_uart_worker); |     furi_thread_set_callback(usb_uart->thread, usb_uart_worker); | ||||||
| 
 | 
 | ||||||
|     furi_thread_start(usb_uart->thread); |     furi_thread_start(usb_uart->thread); | ||||||
|     } |     return usb_uart; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void usb_uart_disable() { | void usb_uart_disable(UsbUartBridge* usb_uart) { | ||||||
|     if(running == true) { |  | ||||||
|     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtStop); |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtStop); | ||||||
|     furi_thread_join(usb_uart->thread); |     furi_thread_join(usb_uart->thread); | ||||||
|     furi_thread_free(usb_uart->thread); |     furi_thread_free(usb_uart->thread); | ||||||
|     free(usb_uart); |     free(usb_uart); | ||||||
|         running = false; |  | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void usb_uart_set_config(UsbUartBridge* usb_uart, UsbUartConfig* cfg) { | ||||||
|  |     furi_assert(usb_uart); | ||||||
|  |     furi_assert(cfg); | ||||||
|  |     memcpy(&(usb_uart->cfg_new), cfg, sizeof(UsbUartConfig)); | ||||||
|  |     osThreadFlagsSet(furi_thread_get_thread_id(usb_uart->thread), WorkerEvtCfgChange); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void usb_uart_get_config(UsbUartBridge* usb_uart, UsbUartConfig* cfg) { | ||||||
|  |     furi_assert(usb_uart); | ||||||
|  |     furi_assert(cfg); | ||||||
|  |     memcpy(cfg, &(usb_uart->cfg_new), sizeof(UsbUartConfig)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void usb_uart_get_state(UsbUartBridge* usb_uart, UsbUartState* st) { | ||||||
|  |     furi_assert(usb_uart); | ||||||
|  |     furi_assert(st); | ||||||
|  |     memcpy(st, &(usb_uart->st), sizeof(UsbUartState)); | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,12 +2,28 @@ | |||||||
| 
 | 
 | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| 
 | 
 | ||||||
|  | typedef struct UsbUartBridge UsbUartBridge; | ||||||
|  | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     uint8_t vcp_ch; |     uint8_t vcp_ch; | ||||||
|     uint8_t uart_ch; |     uint8_t uart_ch; | ||||||
|  |     uint8_t flow_pins; | ||||||
|  |     uint8_t baudrate_mode; | ||||||
|     uint32_t baudrate; |     uint32_t baudrate; | ||||||
| } UsbUartConfig; | } UsbUartConfig; | ||||||
| 
 | 
 | ||||||
| void usb_uart_enable(UsbUartConfig* cfg); | typedef struct { | ||||||
|  |     uint32_t rx_cnt; | ||||||
|  |     uint32_t tx_cnt; | ||||||
|  |     uint32_t baudrate_cur; | ||||||
|  | } UsbUartState; | ||||||
| 
 | 
 | ||||||
| void usb_uart_disable(); | UsbUartBridge* usb_uart_enable(UsbUartConfig* cfg); | ||||||
|  | 
 | ||||||
|  | void usb_uart_disable(UsbUartBridge* usb_uart); | ||||||
|  | 
 | ||||||
|  | void usb_uart_set_config(UsbUartBridge* usb_uart, UsbUartConfig* cfg); | ||||||
|  | 
 | ||||||
|  | void usb_uart_get_config(UsbUartBridge* usb_uart, UsbUartConfig* cfg); | ||||||
|  | 
 | ||||||
|  | void usb_uart_get_state(UsbUartBridge* usb_uart, UsbUartState* st); | ||||||
|  | |||||||
							
								
								
									
										154
									
								
								applications/gpio/views/gpio_usb_uart.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								applications/gpio/views/gpio_usb_uart.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,154 @@ | |||||||
|  | #include "../usb_uart_bridge.h" | ||||||
|  | #include "../gpio_app_i.h" | ||||||
|  | #include "furi-hal.h" | ||||||
|  | #include <gui/elements.h> | ||||||
|  | 
 | ||||||
|  | struct GpioUsbUart { | ||||||
|  |     View* view; | ||||||
|  |     GpioUsbUartCallback callback; | ||||||
|  |     void* context; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  |     uint32_t baudrate; | ||||||
|  |     uint32_t tx_cnt; | ||||||
|  |     uint32_t rx_cnt; | ||||||
|  |     uint8_t vcp_port; | ||||||
|  |     uint8_t tx_pin; | ||||||
|  |     uint8_t rx_pin; | ||||||
|  |     bool tx_active; | ||||||
|  |     bool rx_active; | ||||||
|  | } GpioUsbUartModel; | ||||||
|  | 
 | ||||||
|  | static void gpio_usb_uart_draw_callback(Canvas* canvas, void* _model) { | ||||||
|  |     GpioUsbUartModel* model = _model; | ||||||
|  |     char temp_str[18]; | ||||||
|  |     elements_button_left(canvas, "Config"); | ||||||
|  |     canvas_draw_line(canvas, 2, 10, 125, 10); | ||||||
|  |     canvas_draw_line(canvas, 44, 52, 123, 52); | ||||||
|  | 
 | ||||||
|  |     canvas_set_font(canvas, FontPrimary); | ||||||
|  |     canvas_draw_str(canvas, 2, 9, "USB Serial"); | ||||||
|  |     canvas_draw_str(canvas, 3, 25, "TX:"); | ||||||
|  |     canvas_draw_str(canvas, 3, 42, "RX:"); | ||||||
|  | 
 | ||||||
|  |     canvas_set_font(canvas, FontSecondary); | ||||||
|  |     snprintf(temp_str, 18, "COM PORT:%u", model->vcp_port); | ||||||
|  |     canvas_draw_str_aligned(canvas, 126, 8, AlignRight, AlignBottom, temp_str); | ||||||
|  |     snprintf(temp_str, 18, "Pin %u", model->tx_pin); | ||||||
|  |     canvas_draw_str(canvas, 22, 25, temp_str); | ||||||
|  |     snprintf(temp_str, 18, "Pin %u", model->rx_pin); | ||||||
|  |     canvas_draw_str(canvas, 22, 42, temp_str); | ||||||
|  | 
 | ||||||
|  |     canvas_draw_str_aligned(canvas, 127, 24, AlignRight, AlignBottom, "B."); | ||||||
|  |     canvas_draw_str_aligned(canvas, 127, 41, AlignRight, AlignBottom, "B."); | ||||||
|  | 
 | ||||||
|  |     if(model->baudrate == 0) | ||||||
|  |         snprintf(temp_str, 18, "Baud: ????"); | ||||||
|  |     else | ||||||
|  |         snprintf(temp_str, 18, "Baud: %lu", model->baudrate); | ||||||
|  |     canvas_draw_str(canvas, 45, 62, temp_str); | ||||||
|  | 
 | ||||||
|  |     if(model->tx_cnt < 100000000) { | ||||||
|  |         canvas_set_font(canvas, FontSecondary); | ||||||
|  |         canvas_draw_str_aligned(canvas, 127, 24, AlignRight, AlignBottom, "B."); | ||||||
|  |         canvas_set_font(canvas, FontKeyboard); | ||||||
|  |         snprintf(temp_str, 18, "%lu", model->tx_cnt); | ||||||
|  |         canvas_draw_str_aligned(canvas, 116, 24, AlignRight, AlignBottom, temp_str); | ||||||
|  |     } else { | ||||||
|  |         canvas_set_font(canvas, FontSecondary); | ||||||
|  |         canvas_draw_str_aligned(canvas, 127, 24, AlignRight, AlignBottom, "KB."); | ||||||
|  |         canvas_set_font(canvas, FontKeyboard); | ||||||
|  |         snprintf(temp_str, 18, "%lu", model->tx_cnt); | ||||||
|  |         canvas_draw_str_aligned(canvas, 110, 24, AlignRight, AlignBottom, temp_str); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if(model->rx_cnt < 100000000) { | ||||||
|  |         canvas_set_font(canvas, FontSecondary); | ||||||
|  |         canvas_draw_str_aligned(canvas, 127, 41, AlignRight, AlignBottom, "B."); | ||||||
|  |         canvas_set_font(canvas, FontKeyboard); | ||||||
|  |         snprintf(temp_str, 18, "%lu", model->rx_cnt); | ||||||
|  |         canvas_draw_str_aligned(canvas, 116, 41, AlignRight, AlignBottom, temp_str); | ||||||
|  |     } else { | ||||||
|  |         canvas_set_font(canvas, FontSecondary); | ||||||
|  |         canvas_draw_str_aligned(canvas, 127, 41, AlignRight, AlignBottom, "KB."); | ||||||
|  |         canvas_set_font(canvas, FontKeyboard); | ||||||
|  |         snprintf(temp_str, 18, "%lu", model->rx_cnt); | ||||||
|  |         canvas_draw_str_aligned(canvas, 110, 41, AlignRight, AlignBottom, temp_str); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if(model->tx_active) | ||||||
|  |         canvas_draw_icon(canvas, 48, 14, &I_ArrowUpFilled_14x15); | ||||||
|  |     else | ||||||
|  |         canvas_draw_icon(canvas, 48, 14, &I_ArrowUpEmpty_14x15); | ||||||
|  | 
 | ||||||
|  |     if(model->rx_active) | ||||||
|  |         canvas_draw_icon(canvas, 48, 34, &I_ArrowDownFilled_14x15); | ||||||
|  |     else | ||||||
|  |         canvas_draw_icon(canvas, 48, 34, &I_ArrowDownEmpty_14x15); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static bool gpio_usb_uart_input_callback(InputEvent* event, void* context) { | ||||||
|  |     furi_assert(context); | ||||||
|  |     GpioUsbUart* usb_uart = context; | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(event->type == InputTypeShort) { | ||||||
|  |         if(event->key == InputKeyLeft) { | ||||||
|  |             consumed = true; | ||||||
|  |             furi_assert(usb_uart->callback); | ||||||
|  |             usb_uart->callback(GpioUsbUartEventConfig, usb_uart->context); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GpioUsbUart* gpio_usb_uart_alloc() { | ||||||
|  |     GpioUsbUart* usb_uart = furi_alloc(sizeof(GpioUsbUart)); | ||||||
|  | 
 | ||||||
|  |     usb_uart->view = view_alloc(); | ||||||
|  |     view_allocate_model(usb_uart->view, ViewModelTypeLocking, sizeof(GpioUsbUartModel)); | ||||||
|  |     view_set_context(usb_uart->view, usb_uart); | ||||||
|  |     view_set_draw_callback(usb_uart->view, gpio_usb_uart_draw_callback); | ||||||
|  |     view_set_input_callback(usb_uart->view, gpio_usb_uart_input_callback); | ||||||
|  | 
 | ||||||
|  |     return usb_uart; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_usb_uart_free(GpioUsbUart* usb_uart) { | ||||||
|  |     furi_assert(usb_uart); | ||||||
|  |     view_free(usb_uart->view); | ||||||
|  |     free(usb_uart); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | View* gpio_usb_uart_get_view(GpioUsbUart* usb_uart) { | ||||||
|  |     furi_assert(usb_uart); | ||||||
|  |     return usb_uart->view; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_usb_uart_set_callback(GpioUsbUart* usb_uart, GpioUsbUartCallback callback, void* context) { | ||||||
|  |     furi_assert(usb_uart); | ||||||
|  |     furi_assert(callback); | ||||||
|  |     usb_uart->callback = callback; | ||||||
|  |     usb_uart->context = context; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_usb_uart_update_state(GpioUsbUart* instance, UsbUartConfig* cfg, UsbUartState* st) { | ||||||
|  |     furi_assert(instance); | ||||||
|  |     furi_assert(cfg); | ||||||
|  |     furi_assert(st); | ||||||
|  | 
 | ||||||
|  |     with_view_model( | ||||||
|  |         instance->view, (GpioUsbUartModel * model) { | ||||||
|  |             model->baudrate = st->baudrate_cur; | ||||||
|  |             model->vcp_port = cfg->vcp_ch; | ||||||
|  |             model->tx_pin = (cfg->uart_ch == 0) ? (13) : (15); | ||||||
|  |             model->rx_pin = (cfg->uart_ch == 0) ? (14) : (16); | ||||||
|  |             model->tx_active = (model->tx_cnt != st->tx_cnt); | ||||||
|  |             model->rx_active = (model->rx_cnt != st->rx_cnt); | ||||||
|  |             model->tx_cnt = st->tx_cnt; | ||||||
|  |             model->rx_cnt = st->rx_cnt; | ||||||
|  |             return false; | ||||||
|  |         }); | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								applications/gpio/views/gpio_usb_uart.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								applications/gpio/views/gpio_usb_uart.h
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <gui/view.h> | ||||||
|  | #include "../gpio_custom_event.h" | ||||||
|  | #include "../usb_uart_bridge.h" | ||||||
|  | 
 | ||||||
|  | typedef struct GpioUsbUart GpioUsbUart; | ||||||
|  | typedef void (*GpioUsbUartCallback)(GpioCustomEvent event, void* context); | ||||||
|  | 
 | ||||||
|  | GpioUsbUart* gpio_usb_uart_alloc(); | ||||||
|  | 
 | ||||||
|  | void gpio_usb_uart_free(GpioUsbUart* usb_uart); | ||||||
|  | 
 | ||||||
|  | View* gpio_usb_uart_get_view(GpioUsbUart* usb_uart); | ||||||
|  | 
 | ||||||
|  | void gpio_usb_uart_set_callback(GpioUsbUart* usb_uart, GpioUsbUartCallback callback, void* context); | ||||||
|  | 
 | ||||||
|  | void gpio_usb_uart_update_state(GpioUsbUart* instance, UsbUartConfig* cfg, UsbUartState* st); | ||||||
| @ -25,185 +25,197 @@ const uint8_t _A_Wink_128x64_7[] = {0x01,0x00,0x9a,0x01,0x00,0x78,0x03,0xc0,0x1e | |||||||
| const uint8_t _A_Wink_128x64_8[] = {0x01,0x00,0x95,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x00,0xf8,0x3f,0xf1,0xf0,0x7e,0x4e,0x02,0x23,0x01,0x07,0xdc,0x1e,0x01,0xf0,0x87,0x03,0xab,0x81,0xff,0xdf,0xc7,0xae,0x00,0xfa,0x98,0x40,0x2a,0x90,0x7e,0xc0,0xc2,0xa3,0x10,0x0d,0x54,0x0f,0x1d,0x03,0x07,0xcc,0x12,0x01,0x55,0x81,0xc4,0xc8,0x16,0x1f,0x1e,0x0d,0x86,0x10,0x0f,0xbe,0xad,0xc3,0x08,0x34,0x10,0x03,0xe0,0x00,0x43,0xea,0x8c,0x42,0x22,0x3e,0x08,0x78,0x3d,0xa8,0x00,0x21,0xaa,0xe3,0x22,0x13,0x88,0xe5,0xe0,0x1e,0xd2,0x00,0x10,0xda,0xa0,0x92,0x19,0x64,0x1f,0x80,0x7e,0x7c,0x07,0xfe,0x7f,0x0c,0x81,0x79,0xa0,0x38,0x04,0x13,0x44,0x03,0x03,0x18,0x8c,0x61,0x24,0x6b,0x31,0x07,0xb4,0x22,0xc1,0xfe,0x99,0xcc,0x3c,0x11,0x08,0x07,0xe0,0x1e,0xd0,0x49,0x84,0x06,0xc9,0x20,0x9c,0x43,0x20,0x1f,0xe1,0xfb,0x40,0xb2,0x10,0x0e,0x41,0xb0,0x60,0x58,0x0b,0xf8,0x3d,0xa0,0x34,0x8f,0xe6,0x44,0x0a,0x5e,0x09,0xfa,0x41,0xe5,0x1f,0xed,0x1c,0x04,0xa6,0x3f,0x08,0xf8,0x3d,0xe4,0x9f,0xf9,0x3c,0x05,0xe6,0x3f,0xc4,0xfb,0xc0,0x22,0x9f,0xfa,0x3c,0x05,0x9c,0x3f,0xe8,0x38,0x3d,0xf2,0x9e,0x7a,0x7c,0x06,0x0c,0x94,0x18,0x18,0x3e,0xb0,0x24,0x01,0xff,0x9f,0x98,0x1e,0x5f,0xfa,0x7d,0xc6,0x01,0xe0,0xff,0xbc,0x20,0x1e,0x51,0xd2,0xf0,0x9f,0x9c,0x1e,0x84,0xb1,0xfc,0x1f,0xa3,0x01,0x96,0xff,0x86,0xcb,0xf8,0x7e,0x8a,0x04,0x97,0xff,0x41,0x02,0x8f,0xf8,0xfd,0x1a,0x09,0x55,0xf8,0x0a,0x5f,0xf3,0xf4,0x54,0x29,0xb1,0xe1,0xa1,0x1f,0xa7,0x51,0x9a,0x81,0x01,0x04,0xfc,0x58,0x01,0x0b,0x54,0x32,0xa8,0x92,0xf8,0x7f,0xca,0x83,0x0e,0x0f,0xb7,0xa8,0x08,0x5f,0x88,0x09,0x7c,0x61,0x21,0xf6,0xaa,0x81,0x0b,0xf9,0x00,0xb8,0x70,0x1a,0x62,0x1f,0x59,0x50,0x10,0xa7,0xcb,0x01,0x9c,0x83,0xda,0xa1,0x15,0x80,0x58,0x30,0x02,0xd1,0xc0,0x43,0xe0,0x81,0xf6,0x85,0x17,0x47,0xe0,0xad,0x1f,0x84,0x00,0x1e,0xd5,0x08,0x2a,0x34,0x80,0x02,0x21,0x13,0xb1,0x07,0xd8,0x00,0xa7,0x62,0x0f,0xbb,0x5d,0x17,0xee,0x1f,0x6a,0x02,0xc1,0xc0,0x0d,0x3c,0x07,0x6f,0x01,0xa1,0x00,0x05,0x98,0x03,0xb5,0x1c,0x20,0xfd,0xb8,0x13,0x79,0xd8,0xc0,0xff,0x1f,0x78,0x01,0xfe,0x10,0x70,0x7e,0xff,0x0f,0xbd,0xfe,0x07,0xc8,}; | const uint8_t _A_Wink_128x64_8[] = {0x01,0x00,0x95,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x00,0xf8,0x3f,0xf1,0xf0,0x7e,0x4e,0x02,0x23,0x01,0x07,0xdc,0x1e,0x01,0xf0,0x87,0x03,0xab,0x81,0xff,0xdf,0xc7,0xae,0x00,0xfa,0x98,0x40,0x2a,0x90,0x7e,0xc0,0xc2,0xa3,0x10,0x0d,0x54,0x0f,0x1d,0x03,0x07,0xcc,0x12,0x01,0x55,0x81,0xc4,0xc8,0x16,0x1f,0x1e,0x0d,0x86,0x10,0x0f,0xbe,0xad,0xc3,0x08,0x34,0x10,0x03,0xe0,0x00,0x43,0xea,0x8c,0x42,0x22,0x3e,0x08,0x78,0x3d,0xa8,0x00,0x21,0xaa,0xe3,0x22,0x13,0x88,0xe5,0xe0,0x1e,0xd2,0x00,0x10,0xda,0xa0,0x92,0x19,0x64,0x1f,0x80,0x7e,0x7c,0x07,0xfe,0x7f,0x0c,0x81,0x79,0xa0,0x38,0x04,0x13,0x44,0x03,0x03,0x18,0x8c,0x61,0x24,0x6b,0x31,0x07,0xb4,0x22,0xc1,0xfe,0x99,0xcc,0x3c,0x11,0x08,0x07,0xe0,0x1e,0xd0,0x49,0x84,0x06,0xc9,0x20,0x9c,0x43,0x20,0x1f,0xe1,0xfb,0x40,0xb2,0x10,0x0e,0x41,0xb0,0x60,0x58,0x0b,0xf8,0x3d,0xa0,0x34,0x8f,0xe6,0x44,0x0a,0x5e,0x09,0xfa,0x41,0xe5,0x1f,0xed,0x1c,0x04,0xa6,0x3f,0x08,0xf8,0x3d,0xe4,0x9f,0xf9,0x3c,0x05,0xe6,0x3f,0xc4,0xfb,0xc0,0x22,0x9f,0xfa,0x3c,0x05,0x9c,0x3f,0xe8,0x38,0x3d,0xf2,0x9e,0x7a,0x7c,0x06,0x0c,0x94,0x18,0x18,0x3e,0xb0,0x24,0x01,0xff,0x9f,0x98,0x1e,0x5f,0xfa,0x7d,0xc6,0x01,0xe0,0xff,0xbc,0x20,0x1e,0x51,0xd2,0xf0,0x9f,0x9c,0x1e,0x84,0xb1,0xfc,0x1f,0xa3,0x01,0x96,0xff,0x86,0xcb,0xf8,0x7e,0x8a,0x04,0x97,0xff,0x41,0x02,0x8f,0xf8,0xfd,0x1a,0x09,0x55,0xf8,0x0a,0x5f,0xf3,0xf4,0x54,0x29,0xb1,0xe1,0xa1,0x1f,0xa7,0x51,0x9a,0x81,0x01,0x04,0xfc,0x58,0x01,0x0b,0x54,0x32,0xa8,0x92,0xf8,0x7f,0xca,0x83,0x0e,0x0f,0xb7,0xa8,0x08,0x5f,0x88,0x09,0x7c,0x61,0x21,0xf6,0xaa,0x81,0x0b,0xf9,0x00,0xb8,0x70,0x1a,0x62,0x1f,0x59,0x50,0x10,0xa7,0xcb,0x01,0x9c,0x83,0xda,0xa1,0x15,0x80,0x58,0x30,0x02,0xd1,0xc0,0x43,0xe0,0x81,0xf6,0x85,0x17,0x47,0xe0,0xad,0x1f,0x84,0x00,0x1e,0xd5,0x08,0x2a,0x34,0x80,0x02,0x21,0x13,0xb1,0x07,0xd8,0x00,0xa7,0x62,0x0f,0xbb,0x5d,0x17,0xee,0x1f,0x6a,0x02,0xc1,0xc0,0x0d,0x3c,0x07,0x6f,0x01,0xa1,0x00,0x05,0x98,0x03,0xb5,0x1c,0x20,0xfd,0xb8,0x13,0x79,0xd8,0xc0,0xff,0x1f,0x78,0x01,0xfe,0x10,0x70,0x7e,0xff,0x0f,0xbd,0xfe,0x07,0xc8,}; | ||||||
| const uint8_t *_A_Wink_128x64[] = {_A_Wink_128x64_0,_A_Wink_128x64_1,_A_Wink_128x64_2,_A_Wink_128x64_3,_A_Wink_128x64_4,_A_Wink_128x64_5,_A_Wink_128x64_6,_A_Wink_128x64_7,_A_Wink_128x64_8}; | const uint8_t *_A_Wink_128x64[] = {_A_Wink_128x64_0,_A_Wink_128x64_1,_A_Wink_128x64_2,_A_Wink_128x64_3,_A_Wink_128x64_4,_A_Wink_128x64_5,_A_Wink_128x64_6,_A_Wink_128x64_7,_A_Wink_128x64_8}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_sub1_10px_0[] = {0x01,0x00,0x12,0x00,0x81,0x40,0x69,0x30,0x2c,0x2c,0x0b,0x6a,0x01,0x28,0x0c,0x0a,0x65,0x01,0x98,0x40,0x00,0x26,}; | const uint8_t _I_ble_10px_0[] = {0x00,0x04,0x00,0x8C,0x00,0x15,0x01,0x56,0x02,0x8C,0x02,0x8C,0x02,0x56,0x02,0x15,0x01,0x8C,0x00,0x04,0x00,}; | ||||||
| const uint8_t *_I_sub1_10px[] = {_I_sub1_10px_0}; | const uint8_t *_I_ble_10px[] = {_I_ble_10px_0}; | ||||||
| 
 |  | ||||||
| const uint8_t _I_ir_10px_0[] = {0x00,0xFC,0x00,0x02,0x01,0x79,0x02,0x84,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x58,0x00,0x78,0x00,0xFF,0x03,}; |  | ||||||
| const uint8_t *_I_ir_10px[] = {_I_ir_10px_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_unknown_10px_0[] = {0x01,0x00,0x12,0x00,0xbc,0x40,0x39,0x90,0x0c,0x24,0x03,0x81,0x00,0xb0,0x40,0x26,0x00,0x12,0x00,0x08,0x14,0xc0,}; |  | ||||||
| const uint8_t *_I_unknown_10px[] = {_I_unknown_10px_0}; |  | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_ibutt_10px_0[] = {0x00,0x80,0x03,0x40,0x02,0x20,0x02,0x10,0x01,0x8E,0x00,0x41,0x00,0x2D,0x00,0x2D,0x00,0x21,0x00,0x1E,0x00,}; | const uint8_t _I_ibutt_10px_0[] = {0x00,0x80,0x03,0x40,0x02,0x20,0x02,0x10,0x01,0x8E,0x00,0x41,0x00,0x2D,0x00,0x2D,0x00,0x21,0x00,0x1E,0x00,}; | ||||||
| const uint8_t *_I_ibutt_10px[] = {_I_ibutt_10px_0}; | const uint8_t *_I_ibutt_10px[] = {_I_ibutt_10px_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Nfc_10px_0[] = {0x00,0x80,0x00,0x00,0x01,0x22,0x02,0x43,0x02,0x45,0x02,0x49,0x02,0x31,0x02,0x22,0x02,0x00,0x01,0x80,0x00,}; |  | ||||||
| const uint8_t *_I_Nfc_10px[] = {_I_Nfc_10px_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_ble_10px_0[] = {0x00,0x04,0x00,0x8C,0x00,0x15,0x01,0x56,0x02,0x8C,0x02,0x8C,0x02,0x56,0x02,0x15,0x01,0x8C,0x00,0x04,0x00,}; |  | ||||||
| const uint8_t *_I_ble_10px[] = {_I_ble_10px_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_125_10px_0[] = {0x00,0xE0,0x00,0x00,0x01,0x0E,0x02,0x31,0x02,0x45,0x02,0x91,0x00,0xAA,0x00,0x92,0x00,0x44,0x00,0x38,0x00,}; | const uint8_t _I_125_10px_0[] = {0x00,0xE0,0x00,0x00,0x01,0x0E,0x02,0x31,0x02,0x45,0x02,0x91,0x00,0xAA,0x00,0x92,0x00,0x44,0x00,0x38,0x00,}; | ||||||
| const uint8_t *_I_125_10px[] = {_I_125_10px_0}; | const uint8_t *_I_125_10px[] = {_I_125_10px_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_sub1_10px_0[] = {0x01,0x00,0x12,0x00,0x81,0x40,0x69,0x30,0x2c,0x2c,0x0b,0x6a,0x01,0x28,0x0c,0x0a,0x65,0x01,0x98,0x40,0x00,0x26,}; | ||||||
|  | const uint8_t *_I_sub1_10px[] = {_I_sub1_10px_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_dir_10px_0[] = {0x01,0x00,0x11,0x00,0x00,0x0c,0xfe,0x01,0x41,0x80,0x7f,0xe0,0x70,0x18,0x10,0x05,0x7f,0xd0,0x10,0x88,0x80,}; | const uint8_t _I_dir_10px_0[] = {0x01,0x00,0x11,0x00,0x00,0x0c,0xfe,0x01,0x41,0x80,0x7f,0xe0,0x70,0x18,0x10,0x05,0x7f,0xd0,0x10,0x88,0x80,}; | ||||||
| const uint8_t *_I_dir_10px[] = {_I_dir_10px_0}; | const uint8_t *_I_dir_10px[] = {_I_dir_10px_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_ir_10px_0[] = {0x00,0xFC,0x00,0x02,0x01,0x79,0x02,0x84,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x58,0x00,0x78,0x00,0xFF,0x03,}; | ||||||
|  | const uint8_t *_I_ir_10px[] = {_I_ir_10px_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Nfc_10px_0[] = {0x00,0x80,0x00,0x00,0x01,0x22,0x02,0x43,0x02,0x45,0x02,0x49,0x02,0x31,0x02,0x22,0x02,0x00,0x01,0x80,0x00,}; | ||||||
|  | const uint8_t *_I_Nfc_10px[] = {_I_Nfc_10px_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_unknown_10px_0[] = {0x01,0x00,0x12,0x00,0xbc,0x40,0x39,0x90,0x0c,0x24,0x03,0x81,0x00,0xb0,0x40,0x26,0x00,0x12,0x00,0x08,0x14,0xc0,}; | ||||||
|  | const uint8_t *_I_unknown_10px[] = {_I_unknown_10px_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_BLE_Pairing_128x64_0[] = {0x01,0x00,0xb7,0x01,0x00,0x6c,0x38,0x1f,0xd0,0x10,0x76,0xe0,0x03,0xdd,0x40,0x07,0xf4,0x82,0x01,0x08,0x07,0xf4,0xc0,0x1f,0x91,0x08,0x07,0x00,0x1f,0xc0,0x0d,0x1e,0xe8,0x3f,0xc0,0x03,0x58,0x80,0xcf,0x11,0xd9,0xaf,0x85,0x77,0x01,0xf7,0x60,0xf8,0x45,0xff,0x05,0xed,0x9e,0x7c,0x09,0xdb,0xe0,0x2f,0x78,0x03,0x3c,0x8e,0xee,0x8a,0x43,0x81,0xfb,0x0c,0x66,0xe8,0xfc,0x59,0xba,0x6f,0x28,0x1b,0xfb,0xa3,0x80,0xfc,0xa0,0x1f,0xc6,0x86,0xbf,0xc3,0x78,0xce,0x04,0x19,0x26,0x77,0xfa,0x43,0xbe,0x12,0xa0,0x7e,0xf8,0x2a,0xa2,0x02,0xff,0x89,0x27,0x01,0xbf,0x99,0x38,0x8a,0xfc,0x0f,0x8e,0x07,0xfe,0x0e,0x94,0x2c,0x07,0xfc,0x7f,0x1f,0xf5,0x00,0xc3,0x00,0xe4,0x31,0x13,0xd1,0x00,0x0a,0xb8,0x19,0x25,0x91,0xc0,0x81,0xe2,0xb9,0x4d,0x5d,0x78,0x64,0x2e,0x84,0x80,0x61,0x07,0x02,0x3e,0x2a,0xa4,0xa2,0x00,0xf2,0x40,0x20,0xe3,0x21,0xa0,0x62,0x9f,0x60,0x05,0x02,0x3e,0x36,0x41,0x66,0x23,0x20,0x51,0xfc,0x40,0x68,0x0f,0x15,0x90,0x60,0x20,0x1b,0x09,0x89,0x70,0x46,0x42,0x07,0x14,0x99,0x41,0xe8,0x1f,0x18,0x0c,0x07,0xc1,0x19,0xff,0xc3,0xce,0x6b,0x54,0x8f,0xe0,0x3f,0x90,0x78,0x17,0x02,0x1a,0x70,0x39,0x01,0xa0,0xb1,0x53,0xb5,0x88,0xc7,0xe0,0x98,0x08,0x3a,0xd5,0xe8,0x97,0xd0,0x78,0xcf,0xe1,0x07,0xf1,0x0d,0x08,0x00,0x74,0x10,0x80,0x18,0xe8,0x97,0xc3,0xf2,0xff,0xc4,0x03,0xe3,0x04,0x8c,0x19,0xcc,0x00,0x35,0x0c,0x3c,0x03,0xf9,0x3f,0xb0,0x8f,0xc6,0x31,0x0e,0x0f,0x90,0x90,0xb5,0x45,0xc1,0xf8,0x4f,0xf0,0xde,0x18,0xcc,0x82,0x08,0x1f,0x22,0x20,0xd0,0x3a,0xab,0xd1,0xe0,0x5f,0xa1,0x1b,0x19,0x8d,0x02,0x04,0x9a,0x1d,0x04,0x28,0x26,0x36,0xa8,0x05,0xf0,0xe0,0x3f,0x04,0xf8,0xd0,0x30,0x55,0xfa,0xad,0x54,0x3e,0x35,0x09,0xab,0xac,0xbf,0x2b,0xf2,0x0a,0x0e,0xfb,0x55,0xaa,0x0f,0x94,0x68,0x04,0x30,0x6f,0xd3,0x7c,0xb0,0x15,0x0f,0xfd,0x7f,0xeb,0x05,0x4f,0x0b,0x60,0xa3,0x1f,0x28,0x0b,0xfc,0xbc,0x30,0x1f,0xf7,0xfe,0x54,0x2c,0x18,0x30,0x3c,0x6f,0x00,0xf2,0x1c,0x8c,0xf8,0x10,0x3c,0x00,0xf8,0xd5,0x5c,0x05,0xb8,0xb0,0xaa,0xdb,0x01,0x2b,0x31,0x0a,0xdc,0xa7,0x00,0xe6,0x00,0x0c,0x56,0x00,0x7e,0x10,0x00,0xcc,0x01,0xf0,0x1f,0x1b,0x40,0x2e,0x00,0x07,0x16,0x10,0x90,0x02,0xe5,0x90,0x06,0x29,0x00,0x2a,0xa9,0x00,0x2f,0x10,0x02,0xa5,0x10,0x02,0xf1,0x00,0x2a,0xa0,0x0d,0xc0,0x00,0xec,0x01,0xfd,0x60,0x17,0x6a,0xc0,0x60,0x40,0xfd,0xc0,0x30,0x04,0x01,0xb0,0xb0,0x7f,0x45,0x80,}; | const uint8_t _I_BLE_Pairing_128x64_0[] = {0x01,0x00,0xb7,0x01,0x00,0x6c,0x38,0x1f,0xd0,0x10,0x76,0xe0,0x03,0xdd,0x40,0x07,0xf4,0x82,0x01,0x08,0x07,0xf4,0xc0,0x1f,0x91,0x08,0x07,0x00,0x1f,0xc0,0x0d,0x1e,0xe8,0x3f,0xc0,0x03,0x58,0x80,0xcf,0x11,0xd9,0xaf,0x85,0x77,0x01,0xf7,0x60,0xf8,0x45,0xff,0x05,0xed,0x9e,0x7c,0x09,0xdb,0xe0,0x2f,0x78,0x03,0x3c,0x8e,0xee,0x8a,0x43,0x81,0xfb,0x0c,0x66,0xe8,0xfc,0x59,0xba,0x6f,0x28,0x1b,0xfb,0xa3,0x80,0xfc,0xa0,0x1f,0xc6,0x86,0xbf,0xc3,0x78,0xce,0x04,0x19,0x26,0x77,0xfa,0x43,0xbe,0x12,0xa0,0x7e,0xf8,0x2a,0xa2,0x02,0xff,0x89,0x27,0x01,0xbf,0x99,0x38,0x8a,0xfc,0x0f,0x8e,0x07,0xfe,0x0e,0x94,0x2c,0x07,0xfc,0x7f,0x1f,0xf5,0x00,0xc3,0x00,0xe4,0x31,0x13,0xd1,0x00,0x0a,0xb8,0x19,0x25,0x91,0xc0,0x81,0xe2,0xb9,0x4d,0x5d,0x78,0x64,0x2e,0x84,0x80,0x61,0x07,0x02,0x3e,0x2a,0xa4,0xa2,0x00,0xf2,0x40,0x20,0xe3,0x21,0xa0,0x62,0x9f,0x60,0x05,0x02,0x3e,0x36,0x41,0x66,0x23,0x20,0x51,0xfc,0x40,0x68,0x0f,0x15,0x90,0x60,0x20,0x1b,0x09,0x89,0x70,0x46,0x42,0x07,0x14,0x99,0x41,0xe8,0x1f,0x18,0x0c,0x07,0xc1,0x19,0xff,0xc3,0xce,0x6b,0x54,0x8f,0xe0,0x3f,0x90,0x78,0x17,0x02,0x1a,0x70,0x39,0x01,0xa0,0xb1,0x53,0xb5,0x88,0xc7,0xe0,0x98,0x08,0x3a,0xd5,0xe8,0x97,0xd0,0x78,0xcf,0xe1,0x07,0xf1,0x0d,0x08,0x00,0x74,0x10,0x80,0x18,0xe8,0x97,0xc3,0xf2,0xff,0xc4,0x03,0xe3,0x04,0x8c,0x19,0xcc,0x00,0x35,0x0c,0x3c,0x03,0xf9,0x3f,0xb0,0x8f,0xc6,0x31,0x0e,0x0f,0x90,0x90,0xb5,0x45,0xc1,0xf8,0x4f,0xf0,0xde,0x18,0xcc,0x82,0x08,0x1f,0x22,0x20,0xd0,0x3a,0xab,0xd1,0xe0,0x5f,0xa1,0x1b,0x19,0x8d,0x02,0x04,0x9a,0x1d,0x04,0x28,0x26,0x36,0xa8,0x05,0xf0,0xe0,0x3f,0x04,0xf8,0xd0,0x30,0x55,0xfa,0xad,0x54,0x3e,0x35,0x09,0xab,0xac,0xbf,0x2b,0xf2,0x0a,0x0e,0xfb,0x55,0xaa,0x0f,0x94,0x68,0x04,0x30,0x6f,0xd3,0x7c,0xb0,0x15,0x0f,0xfd,0x7f,0xeb,0x05,0x4f,0x0b,0x60,0xa3,0x1f,0x28,0x0b,0xfc,0xbc,0x30,0x1f,0xf7,0xfe,0x54,0x2c,0x18,0x30,0x3c,0x6f,0x00,0xf2,0x1c,0x8c,0xf8,0x10,0x3c,0x00,0xf8,0xd5,0x5c,0x05,0xb8,0xb0,0xaa,0xdb,0x01,0x2b,0x31,0x0a,0xdc,0xa7,0x00,0xe6,0x00,0x0c,0x56,0x00,0x7e,0x10,0x00,0xcc,0x01,0xf0,0x1f,0x1b,0x40,0x2e,0x00,0x07,0x16,0x10,0x90,0x02,0xe5,0x90,0x06,0x29,0x00,0x2a,0xa9,0x00,0x2f,0x10,0x02,0xa5,0x10,0x02,0xf1,0x00,0x2a,0xa0,0x0d,0xc0,0x00,0xec,0x01,0xfd,0x60,0x17,0x6a,0xc0,0x60,0x40,0xfd,0xc0,0x30,0x04,0x01,0xb0,0xb0,0x7f,0x45,0x80,}; | ||||||
| const uint8_t *_I_BLE_Pairing_128x64[] = {_I_BLE_Pairing_128x64_0}; | const uint8_t *_I_BLE_Pairing_128x64[] = {_I_BLE_Pairing_128x64_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_ButtonDown_7x4_0[] = {0x00,0x7F,0x3E,0x1C,0x08,}; |  | ||||||
| const uint8_t *_I_ButtonDown_7x4[] = {_I_ButtonDown_7x4_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_ButtonCenter_7x7_0[] = {0x00,0x1C,0x22,0x5D,0x5D,0x5D,0x22,0x1C,}; |  | ||||||
| const uint8_t *_I_ButtonCenter_7x7[] = {_I_ButtonCenter_7x7_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_ButtonLeft_4x7_0[] = {0x00,0x08,0x0C,0x0E,0x0F,0x0E,0x0C,0x08,}; |  | ||||||
| const uint8_t *_I_ButtonLeft_4x7[] = {_I_ButtonLeft_4x7_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_ButtonUp_7x4_0[] = {0x00,0x08,0x1C,0x3E,0x7F,}; |  | ||||||
| const uint8_t *_I_ButtonUp_7x4[] = {_I_ButtonUp_7x4_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DFU_128x50_0[] = {0x01,0x00,0x2e,0x02,0x00,0x57,0xfe,0x0e,0x0e,0xcf,0x84,0x02,0x70,0x0f,0xc8,0x74,0x03,0x80,0x0e,0xbc,0x7c,0x04,0x06,0x30,0x30,0x74,0xe0,0x2f,0xe0,0x42,0x82,0x03,0xe7,0x81,0xff,0x02,0x14,0x20,0x1f,0x3e,0x00,0x79,0xc4,0x01,0xfd,0x20,0x07,0xd5,0xd4,0xe2,0x53,0xf2,0x74,0xff,0xe1,0x40,0x41,0x87,0xd8,0x01,0xf1,0x60,0xf0,0x43,0xca,0x43,0xe0,0xa7,0x83,0xe2,0x30,0x01,0x29,0x84,0x7b,0x20,0x0f,0x88,0x30,0x3c,0xb1,0x90,0x1d,0x00,0xfa,0x30,0x3f,0xf8,0xcc,0x02,0xc6,0x31,0x1f,0x83,0x49,0xa8,0x16,0x0a,0xf4,0x7f,0x00,0x21,0x1f,0x04,0x38,0x06,0x20,0x04,0x90,0x46,0x35,0xf0,0xfa,0x00,0xcc,0x7f,0x10,0x14,0x0b,0x46,0x20,0xd5,0x70,0x50,0xb4,0x06,0xf1,0x00,0x9f,0x03,0xd7,0x09,0x81,0xd7,0xc0,0x8b,0x85,0x38,0xc0,0x50,0x41,0xeb,0x63,0xc0,0x07,0xc6,0x90,0xbf,0x2b,0x05,0x01,0xb8,0xb1,0x0c,0x06,0xae,0x01,0x24,0x6f,0x94,0x42,0x80,0xb2,0x49,0xc4,0x33,0x80,0x1f,0x18,0x93,0xfc,0xa1,0x14,0x0e,0x02,0x9c,0x43,0xc3,0x07,0x81,0xfc,0x03,0xe2,0xc0,0x28,0x14,0x10,0x5e,0x3f,0x03,0xc0,0xcf,0xf8,0x10,0x0f,0xe5,0x56,0x03,0x05,0xf0,0x40,0x20,0x20,0xf2,0x42,0x0d,0xfd,0x72,0x30,0x0f,0xf8,0x7c,0x41,0xe3,0x80,0x10,0x0d,0x00,0x5c,0x4a,0xd1,0x87,0xf8,0x39,0xf5,0x5c,0x0c,0x0b,0xe0,0x1c,0x10,0x78,0xfc,0x02,0x04,0x20,0x1f,0xf7,0x0f,0x57,0x80,0x81,0x5e,0x13,0x83,0x01,0x1f,0x97,0xff,0xfe,0x03,0x2e,0x07,0x57,0x03,0x01,0xbf,0x1d,0x45,0x70,0x27,0xe4,0xff,0x8c,0x07,0xf5,0x83,0xe0,0xcf,0xe1,0x00,0xf6,0x10,0x8c,0x07,0xb1,0x07,0xc1,0xfc,0x63,0xe5,0xd2,0x07,0x8f,0x80,0x1a,0x21,0xe1,0xc0,0x71,0xe0,0x20,0xf1,0x24,0x88,0x34,0x62,0x00,0xe3,0x3f,0x8d,0xfe,0x81,0x80,0xc1,0xf8,0x5b,0xe2,0x0f,0x18,0xc7,0xf0,0x1e,0x50,0x35,0xa0,0xc8,0x3f,0x98,0x30,0x70,0x87,0x44,0x1e,0x21,0xe3,0xf8,0x02,0x4b,0xaf,0x01,0x81,0xb3,0xca,0x01,0x1c,0x25,0x94,0x01,0x04,0x58,0x8d,0x5c,0x0b,0xc6,0x08,0x10,0x78,0xc3,0x3f,0xf0,0x72,0x88,0x98,0x8b,0x89,0x55,0x82,0xc7,0x9b,0xe5,0x00,0x87,0x26,0xc4,0x46,0x20,0xf2,0xd1,0x87,0xc6,0x0c,0xdf,0x21,0x50,0x8a,0xc7,0x00,0x38,0x2e,0x04,0x42,0xaf,0x05,0x06,0x0a,0xb8,0x70,0x0f,0x91,0x80,0x5c,0x03,0xc5,0x30,0x84,0x6a,0xe1,0x40,0xf1,0x7b,0x0f,0x00,0x7a,0x24,0x21,0x07,0x94,0x33,0x09,0x57,0x8a,0x93,0x85,0xec,0x3e,0x00,0x79,0x0b,0x88,0x06,0x3c,0x3f,0xfc,0xa8,0x1e,0x21,0x91,0x76,0x90,0x90,0x40,0x03,0xe0,0xe0,0x78,0x3f,0xd5,0x58,0x0e,0x08,0x32,0x3f,0x88,0xa8,0x90,0x8c,0x25,0x30,0xbc,0x7f,0xb5,0x50,0x1b,0xe0,0x20,0x7f,0x92,0x33,0x88,0x97,0x4a,0x07,0x0c,0x9e,0x5f,0xeb,0xaa,0xf2,0x74,0x8d,0x17,0x80,0x06,0x29,0xf1,0xe0,0x71,0xfb,0xfd,0x71,0xd8,0xff,0xf8,0x21,0x71,0x04,0x87,0x01,0xc1,0xa1,0xff,0x83,0xe7,0xf0,0xff,0xc1,0x51,0xe4,0xdd,0x1b,0x07,0xc2,0x63,0xf6,0x0f,0x9f,0xeb,0x5f,0x02,0x77,0x8a,0xc4,0xa3,0x17,0xc8,0x44,0x8c,0x34,0x20,0x71,0xfe,0x99,0x04,0x88,0x40,0x01,0xc3,0x47,0xf0,0x93,0x0f,0xf4,0x28,0x0e,0x3a,0xad,0x50,0x39,0x30,0x1f,0x18,0x3d,0x0e,0x31,0xff,0x3d,0x0c,0x02,0xa8,0x03,0x20,0x01,0x7e,0x3f,0xf8,0x09,0x06,0x33,0xfe,0x1b,0x50,}; |  | ||||||
| const uint8_t *_I_DFU_128x50[] = {_I_DFU_128x50_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_ButtonLeftSmall_3x5_0[] = {0x00,0x04,0x06,0x07,0x06,0x04,}; |  | ||||||
| const uint8_t *_I_ButtonLeftSmall_3x5[] = {_I_ButtonLeftSmall_3x5_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_ButtonRightSmall_3x5_0[] = {0x00,0x01,0x03,0x07,0x03,0x01,}; | const uint8_t _I_ButtonRightSmall_3x5_0[] = {0x00,0x01,0x03,0x07,0x03,0x01,}; | ||||||
| const uint8_t *_I_ButtonRightSmall_3x5[] = {_I_ButtonRightSmall_3x5_0}; | const uint8_t *_I_ButtonRightSmall_3x5[] = {_I_ButtonRightSmall_3x5_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_ButtonLeftSmall_3x5_0[] = {0x00,0x04,0x06,0x07,0x06,0x04,}; | ||||||
|  | const uint8_t *_I_ButtonLeftSmall_3x5[] = {_I_ButtonLeftSmall_3x5_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_ButtonCenter_7x7_0[] = {0x00,0x1C,0x22,0x5D,0x5D,0x5D,0x22,0x1C,}; | ||||||
|  | const uint8_t *_I_ButtonCenter_7x7[] = {_I_ButtonCenter_7x7_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_ButtonDown_7x4_0[] = {0x00,0x7F,0x3E,0x1C,0x08,}; | ||||||
|  | const uint8_t *_I_ButtonDown_7x4[] = {_I_ButtonDown_7x4_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_ButtonRight_4x7_0[] = {0x00,0x01,0x03,0x07,0x0F,0x07,0x03,0x01,}; | const uint8_t _I_ButtonRight_4x7_0[] = {0x00,0x01,0x03,0x07,0x0F,0x07,0x03,0x01,}; | ||||||
| const uint8_t *_I_ButtonRight_4x7[] = {_I_ButtonRight_4x7_0}; | const uint8_t *_I_ButtonRight_4x7[] = {_I_ButtonRight_4x7_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_DFU_128x50_0[] = {0x01,0x00,0x2e,0x02,0x00,0x57,0xfe,0x0e,0x0e,0xcf,0x84,0x02,0x70,0x0f,0xc8,0x74,0x03,0x80,0x0e,0xbc,0x7c,0x04,0x06,0x30,0x30,0x74,0xe0,0x2f,0xe0,0x42,0x82,0x03,0xe7,0x81,0xff,0x02,0x14,0x20,0x1f,0x3e,0x00,0x79,0xc4,0x01,0xfd,0x20,0x07,0xd5,0xd4,0xe2,0x53,0xf2,0x74,0xff,0xe1,0x40,0x41,0x87,0xd8,0x01,0xf1,0x60,0xf0,0x43,0xca,0x43,0xe0,0xa7,0x83,0xe2,0x30,0x01,0x29,0x84,0x7b,0x20,0x0f,0x88,0x30,0x3c,0xb1,0x90,0x1d,0x00,0xfa,0x30,0x3f,0xf8,0xcc,0x02,0xc6,0x31,0x1f,0x83,0x49,0xa8,0x16,0x0a,0xf4,0x7f,0x00,0x21,0x1f,0x04,0x38,0x06,0x20,0x04,0x90,0x46,0x35,0xf0,0xfa,0x00,0xcc,0x7f,0x10,0x14,0x0b,0x46,0x20,0xd5,0x70,0x50,0xb4,0x06,0xf1,0x00,0x9f,0x03,0xd7,0x09,0x81,0xd7,0xc0,0x8b,0x85,0x38,0xc0,0x50,0x41,0xeb,0x63,0xc0,0x07,0xc6,0x90,0xbf,0x2b,0x05,0x01,0xb8,0xb1,0x0c,0x06,0xae,0x01,0x24,0x6f,0x94,0x42,0x80,0xb2,0x49,0xc4,0x33,0x80,0x1f,0x18,0x93,0xfc,0xa1,0x14,0x0e,0x02,0x9c,0x43,0xc3,0x07,0x81,0xfc,0x03,0xe2,0xc0,0x28,0x14,0x10,0x5e,0x3f,0x03,0xc0,0xcf,0xf8,0x10,0x0f,0xe5,0x56,0x03,0x05,0xf0,0x40,0x20,0x20,0xf2,0x42,0x0d,0xfd,0x72,0x30,0x0f,0xf8,0x7c,0x41,0xe3,0x80,0x10,0x0d,0x00,0x5c,0x4a,0xd1,0x87,0xf8,0x39,0xf5,0x5c,0x0c,0x0b,0xe0,0x1c,0x10,0x78,0xfc,0x02,0x04,0x20,0x1f,0xf7,0x0f,0x57,0x80,0x81,0x5e,0x13,0x83,0x01,0x1f,0x97,0xff,0xfe,0x03,0x2e,0x07,0x57,0x03,0x01,0xbf,0x1d,0x45,0x70,0x27,0xe4,0xff,0x8c,0x07,0xf5,0x83,0xe0,0xcf,0xe1,0x00,0xf6,0x10,0x8c,0x07,0xb1,0x07,0xc1,0xfc,0x63,0xe5,0xd2,0x07,0x8f,0x80,0x1a,0x21,0xe1,0xc0,0x71,0xe0,0x20,0xf1,0x24,0x88,0x34,0x62,0x00,0xe3,0x3f,0x8d,0xfe,0x81,0x80,0xc1,0xf8,0x5b,0xe2,0x0f,0x18,0xc7,0xf0,0x1e,0x50,0x35,0xa0,0xc8,0x3f,0x98,0x30,0x70,0x87,0x44,0x1e,0x21,0xe3,0xf8,0x02,0x4b,0xaf,0x01,0x81,0xb3,0xca,0x01,0x1c,0x25,0x94,0x01,0x04,0x58,0x8d,0x5c,0x0b,0xc6,0x08,0x10,0x78,0xc3,0x3f,0xf0,0x72,0x88,0x98,0x8b,0x89,0x55,0x82,0xc7,0x9b,0xe5,0x00,0x87,0x26,0xc4,0x46,0x20,0xf2,0xd1,0x87,0xc6,0x0c,0xdf,0x21,0x50,0x8a,0xc7,0x00,0x38,0x2e,0x04,0x42,0xaf,0x05,0x06,0x0a,0xb8,0x70,0x0f,0x91,0x80,0x5c,0x03,0xc5,0x30,0x84,0x6a,0xe1,0x40,0xf1,0x7b,0x0f,0x00,0x7a,0x24,0x21,0x07,0x94,0x33,0x09,0x57,0x8a,0x93,0x85,0xec,0x3e,0x00,0x79,0x0b,0x88,0x06,0x3c,0x3f,0xfc,0xa8,0x1e,0x21,0x91,0x76,0x90,0x90,0x40,0x03,0xe0,0xe0,0x78,0x3f,0xd5,0x58,0x0e,0x08,0x32,0x3f,0x88,0xa8,0x90,0x8c,0x25,0x30,0xbc,0x7f,0xb5,0x50,0x1b,0xe0,0x20,0x7f,0x92,0x33,0x88,0x97,0x4a,0x07,0x0c,0x9e,0x5f,0xeb,0xaa,0xf2,0x74,0x8d,0x17,0x80,0x06,0x29,0xf1,0xe0,0x71,0xfb,0xfd,0x71,0xd8,0xff,0xf8,0x21,0x71,0x04,0x87,0x01,0xc1,0xa1,0xff,0x83,0xe7,0xf0,0xff,0xc1,0x51,0xe4,0xdd,0x1b,0x07,0xc2,0x63,0xf6,0x0f,0x9f,0xeb,0x5f,0x02,0x77,0x8a,0xc4,0xa3,0x17,0xc8,0x44,0x8c,0x34,0x20,0x71,0xfe,0x99,0x04,0x88,0x40,0x01,0xc3,0x47,0xf0,0x93,0x0f,0xf4,0x28,0x0e,0x3a,0xad,0x50,0x39,0x30,0x1f,0x18,0x3d,0x0e,0x31,0xff,0x3d,0x0c,0x02,0xa8,0x03,0x20,0x01,0x7e,0x3f,0xf8,0x09,0x06,0x33,0xfe,0x1b,0x50,}; | ||||||
|  | const uint8_t *_I_DFU_128x50[] = {_I_DFU_128x50_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_ButtonUp_7x4_0[] = {0x00,0x08,0x1C,0x3E,0x7F,}; | ||||||
|  | const uint8_t *_I_ButtonUp_7x4[] = {_I_ButtonUp_7x4_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_Warning_30x23_0[] = {0x01,0x00,0x47,0x00,0x80,0x70,0x00,0x65,0xe0,0x80,0x80,0xc7,0xe1,0x03,0x01,0xaf,0xe2,0x0e,0x03,0x19,0xe4,0x3c,0x06,0xb3,0xe8,0xf8,0x0c,0x67,0xf3,0xf0,0x1a,0x60,0x27,0xf7,0xf1,0x50,0xcf,0xff,0xe0,0x34,0xf0,0x00,0xc6,0x03,0xf0,0x01,0x8c,0x0c,0x06,0x7f,0x80,0x18,0xc1,0xff,0x9f,0xff,0xfc,0x3c,0x06,0x7f,0xe0,0x58,0xc7,0xff,0xe0,0x31,0x00,0x88,0x00,0x67,0xff,0xe0,0x18,0xc7,0xc0,}; | const uint8_t _I_Warning_30x23_0[] = {0x01,0x00,0x47,0x00,0x80,0x70,0x00,0x65,0xe0,0x80,0x80,0xc7,0xe1,0x03,0x01,0xaf,0xe2,0x0e,0x03,0x19,0xe4,0x3c,0x06,0xb3,0xe8,0xf8,0x0c,0x67,0xf3,0xf0,0x1a,0x60,0x27,0xf7,0xf1,0x50,0xcf,0xff,0xe0,0x34,0xf0,0x00,0xc6,0x03,0xf0,0x01,0x8c,0x0c,0x06,0x7f,0x80,0x18,0xc1,0xff,0x9f,0xff,0xfc,0x3c,0x06,0x7f,0xe0,0x58,0xc7,0xff,0xe0,0x31,0x00,0x88,0x00,0x67,0xff,0xe0,0x18,0xc7,0xc0,}; | ||||||
| const uint8_t *_I_Warning_30x23[] = {_I_Warning_30x23_0}; | const uint8_t *_I_Warning_30x23[] = {_I_Warning_30x23_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DolphinFirstStart2_59x51_0[] = {0x01,0x00,0x2e,0x01,0x00,0x1f,0xfe,0x06,0x05,0x3f,0xc7,0xfe,0x01,0x1c,0x03,0x16,0x02,0xaf,0x0f,0x80,0x58,0x01,0xc7,0xaa,0x80,0x82,0xc4,0x0e,0x55,0x6b,0x28,0x10,0x81,0x45,0xab,0x8d,0x01,0xca,0x04,0x1a,0x1a,0xac,0x1c,0x0e,0x50,0x48,0x06,0xc0,0x3c,0x40,0x01,0x84,0x40,0x2b,0x15,0x51,0xd9,0xc4,0x20,0x1a,0xc9,0x50,0x1c,0xe4,0x02,0xe1,0x8a,0x81,0xd7,0x55,0x0a,0x03,0x9d,0x02,0x01,0x5c,0x82,0x81,0xd7,0xc0,0x3a,0x10,0x3a,0x12,0x88,0xc8,0x60,0x11,0x07,0xa0,0x1c,0x68,0x00,0xf6,0xe0,0x22,0x50,0x0e,0x36,0x00,0x7b,0x68,0x00,0x83,0xa0,0x11,0x08,0x1c,0x6a,0x03,0x42,0x44,0x1e,0xc0,0x28,0x50,0x61,0xf9,0x56,0x00,0xe3,0x60,0x40,0x88,0x1c,0x75,0x01,0x42,0x07,0x9d,0x50,0x5e,0x4b,0x01,0x37,0x8e,0xb0,0x0e,0x51,0xd8,0x04,0xc2,0x01,0xd4,0x5d,0x1c,0x02,0x30,0x7f,0x14,0x99,0x5c,0x20,0x11,0x48,0x07,0x58,0x0e,0x20,0x81,0xd0,0x23,0x04,0x1e,0x30,0x80,0x38,0xd4,0x11,0x82,0x0f,0x18,0x40,0xb0,0xb0,0x50,0x3d,0x58,0x1c,0x52,0x85,0xf1,0x83,0x75,0x58,0x64,0x49,0x1a,0xfc,0x17,0x57,0x01,0x88,0x25,0x0b,0x55,0x02,0xaa,0xc0,0x64,0x14,0x08,0x1e,0x02,0xaa,0x1f,0x18,0x0f,0x00,0xbe,0x20,0xf1,0x80,0x82,0x46,0x01,0x03,0x82,0xe0,0x04,0xa3,0xab,0x46,0x0e,0x32,0x15,0x80,0xb5,0x40,0x2a,0xa4,0x21,0x98,0x43,0x70,0x13,0x58,0x04,0xac,0xa4,0x3c,0x08,0xd6,0x02,0x35,0x00,0x8a,0xcd,0x06,0xa3,0x1d,0xa0,0x24,0x46,0x57,0xe8,0x26,0x8c,0xdb,0x80,0x84,0x18,0xad,0x42,0x07,0x5f,0xbf,0xb9,0x8a,0x17,0x80,0xff,0x6a,0xb0,0x46,0x91,0x07,0x88,0xc4,0x4a,0x43,0x1f,0x07,0x92,0xc4,0x49,0x82,0x9b,0x25,0x98,0xc0,0x28,0xa0,0x73,0x1f,0x0b,0x50,0x81,0xea,0x07,0x40,0x7b,0xac,0x44,0x0e,0xa0,}; | const uint8_t _I_ButtonLeft_4x7_0[] = {0x00,0x08,0x0C,0x0E,0x0F,0x0E,0x0C,0x08,}; | ||||||
| const uint8_t *_I_DolphinFirstStart2_59x51[] = {_I_DolphinFirstStart2_59x51_0}; | const uint8_t *_I_ButtonLeft_4x7[] = {_I_ButtonLeft_4x7_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DolphinFirstStart5_54x49_0[] = {0x01,0x00,0x0b,0x01,0x00,0x0f,0xf2,0xfe,0x06,0x48,0x1e,0x02,0x06,0x05,0x2e,0x00,0x08,0x61,0x80,0x62,0x98,0x00,0x86,0x20,0x06,0x28,0x40,0x08,0x64,0x00,0x62,0x82,0x00,0x86,0x80,0x06,0x28,0x14,0x72,0x01,0x80,0x03,0x14,0x06,0x44,0x03,0x20,0x49,0x00,0xc4,0x0c,0x61,0x13,0x81,0x07,0x90,0x0c,0xff,0xa8,0x18,0xcc,0xe0,0x10,0x78,0x60,0x18,0xc9,0xe3,0x10,0x03,0x0e,0x02,0x02,0x4f,0x19,0x00,0x18,0x78,0x10,0x12,0x78,0xc8,0x0a,0xc3,0xf8,0x80,0xc1,0x80,0xc5,0xe0,0xff,0x8f,0x47,0xe1,0x27,0x03,0x0d,0xfc,0x80,0x3b,0xc9,0x74,0x43,0x81,0x0f,0xb0,0x40,0x2b,0xd2,0xd3,0x71,0x07,0x87,0x5f,0x16,0x84,0x54,0x23,0xe3,0x21,0xab,0xc5,0x61,0x1a,0x82,0xf0,0xf0,0x35,0x70,0xa8,0x45,0x50,0x2a,0x3e,0x0a,0xac,0x1e,0x11,0x28,0x03,0x0f,0xc3,0xfe,0x06,0x19,0xa0,0x18,0x6f,0x9f,0x08,0x7c,0x22,0x30,0x06,0x1d,0xfc,0x3e,0x21,0x08,0x00,0x8f,0x01,0x7a,0x31,0x08,0x24,0x42,0x21,0xf0,0x5e,0x08,0x18,0x44,0xe3,0x0f,0x59,0x92,0xb4,0x96,0x66,0x06,0x58,0x10,0x19,0x60,0x20,0x64,0x46,0x08,0x19,0x27,0x00,0x65,0x9f,0x81,0x93,0xd1,0x2b,0x03,0x17,0x82,0x3f,0x50,0x9a,0x81,0x87,0x51,0x1e,0xf0,0x68,0x69,0x40,0x61,0xea,0x9d,0x86,0x1d,0x45,0x80,0x61,0x2d,0x48,0xc2,0x67,0x8d,0x12,0x3a,0x06,0x19,0x02,0x88,0x74,0x4b,0x21,0x03,0x1d,0x08,0xca,0x21,0x41,0x06,0x93,0xe8,0xa1,0x85,0x31,0xe9,0x24,0x48,0x20,0x30,0x1b,0x10,0x18,0x77,0x8f,0xa1,0x80,0xcc,0x40,0xc3,0x56,0x0b,0x8c,0x0a,0x22,0xba,0x12,0x88,0x81,0x84,}; | const uint8_t _I_DolphinFirstStart7_61x51_0[] = {0x01,0x00,0x13,0x01,0x00,0x17,0x03,0xff,0x01,0x03,0xa4,0xe2,0x01,0x0e,0x03,0xa4,0x1a,0x01,0x30,0x03,0x1e,0x00,0x2a,0x3c,0x00,0x39,0xd0,0x00,0x65,0x03,0x01,0x94,0x80,0x06,0x50,0x40,0x19,0x44,0x00,0x65,0x08,0x01,0xb0,0x2c,0xe2,0x81,0xb6,0x86,0x0a,0xd8,0x7c,0x20,0x75,0x85,0x10,0xcc,0x06,0x50,0x50,0x3b,0x10,0xce,0x00,0x69,0x20,0x79,0x7c,0x20,0x20,0x71,0xc0,0x07,0xca,0xf1,0x02,0x81,0x01,0xc6,0x3a,0x07,0x1f,0xe4,0x10,0x0e,0x53,0xe0,0x38,0xe7,0xa0,0xa0,0x72,0xbb,0x81,0xca,0x12,0x68,0x1c,0x05,0x5c,0x0e,0x3f,0xe8,0xc8,0x1c,0xab,0xe0,0x72,0x94,0x81,0xda,0xb2,0x07,0x5f,0xe0,0x3d,0xbf,0x95,0x44,0x20,0x81,0xce,0xf1,0x2f,0x03,0x94,0xb8,0xae,0x51,0x00,0x39,0x47,0x60,0xd0,0x84,0x70,0x81,0xcb,0x44,0x9d,0x10,0x3a,0x58,0xce,0xe6,0x07,0x29,0x10,0x18,0xa0,0x50,0x88,0x76,0x02,0x22,0x07,0x49,0x8e,0x02,0x24,0x07,0x4e,0x0e,0x02,0x12,0x96,0x38,0x44,0x07,0x02,0x8f,0x1c,0x07,0x1c,0x4e,0x30,0x1c,0x10,0x3c,0x6c,0x13,0x80,0x38,0xc0,0xb0,0x80,0xf1,0x6e,0x90,0x1c,0x71,0x10,0xd7,0x49,0x81,0xc7,0x20,0x0f,0x17,0xe9,0x42,0x20,0x91,0x09,0xeb,0x24,0xe2,0x10,0x49,0x07,0x6f,0xff,0x80,0x56,0x88,0x1c,0xa2,0xae,0xd1,0x66,0x89,0xe0,0x68,0x11,0xb8,0x06,0xc0,0x2e,0x40,0x71,0x9a,0xc0,0x2b,0x00,0x73,0xc0,0x7a,0xe0,0x09,0x12,0x03,0x95,0x57,0xff,0x17,0x03,0x9c,0x03,0x57,0xaa,0x78,0x94,0x40,0xa6,0x35,0x5a,0xac,0x14,0x0e,0x9a,0xad,0x50,0xf8,0x41,0x05,0x00,0x83,0x55,0x14,0x06,0x07,0x18,0x54,0xa0,0x0e,0xb0,0x60,0x31,0xc0,0x00,}; | ||||||
| const uint8_t *_I_DolphinFirstStart5_54x49[] = {_I_DolphinFirstStart5_54x49_0}; | const uint8_t *_I_DolphinFirstStart7_61x51[] = {_I_DolphinFirstStart7_61x51_0}; | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinFirstStart6_58x54_0[] = {0x01,0x00,0x21,0x01,0x00,0x0f,0xf2,0x7e,0x06,0x4c,0x04,0x0f,0x81,0x03,0x03,0x9d,0x80,0x04,0x30,0xc0,0x39,0xc6,0x00,0x43,0x30,0x03,0x9c,0x10,0x04,0x34,0x00,0x39,0xc0,0x84,0x44,0x07,0x38,0x08,0x0d,0x41,0x68,0x13,0x70,0x39,0x08,0xd0,0x56,0xa1,0xd1,0x03,0x94,0x80,0x04,0x30,0x68,0x04,0x20,0x0e,0x84,0x91,0x03,0xa9,0x64,0x62,0x80,0x41,0x88,0x40,0x3f,0xc6,0xf1,0xfe,0x43,0xc0,0xe3,0x80,0xff,0xff,0xe0,0x3f,0xf8,0xf8,0x1c,0x78,0x18,0x1f,0xfe,0x0f,0x02,0x12,0x18,0x47,0x03,0x82,0x10,0x1e,0x08,0x1c,0xf5,0x60,0x71,0xd4,0x81,0xcf,0xab,0xff,0xd5,0xf5,0xc0,0xe3,0x04,0xe0,0x03,0x86,0xae,0x27,0x28,0x27,0x40,0x0e,0x21,0x91,0x03,0x96,0x80,0x0e,0x34,0x18,0x79,0x28,0x60,0x95,0x00,0x38,0xf8,0x20,0x27,0xd1,0x82,0x6a,0x03,0xc3,0x1c,0x39,0x94,0x0a,0xa1,0xc0,0xc5,0x2f,0xca,0x05,0x02,0x90,0x24,0x56,0x04,0x68,0x10,0x01,0x4f,0x80,0xea,0x5b,0x10,0x38,0x83,0x8d,0xa0,0x30,0x30,0x38,0xa3,0x09,0xc0,0x20,0xf2,0x03,0x90,0xc0,0x46,0xe2,0x91,0x2f,0x80,0xfc,0xe0,0x1e,0x08,0x02,0x54,0x47,0x62,0x27,0x2f,0xfb,0x14,0xdc,0xc6,0xb5,0x30,0x38,0x8b,0x05,0x6a,0x60,0x01,0x89,0x00,0xc8,0x16,0x50,0x29,0x10,0x1c,0x8d,0x25,0x05,0xa1,0x15,0xc9,0xfe,0x50,0xaa,0x08,0x10,0x67,0x01,0x22,0x8a,0xe0,0x60,0xe5,0xf2,0x07,0x8e,0xa8,0xb0,0x49,0xe1,0x00,0x0d,0xd4,0x68,0x5a,0x00,0x39,0x46,0x88,0x84,0x07,0x30,0xe8,0x81,0xc6,0x40,0x4d,0x11,0x91,0x17,0x06,0x40,0x65,0x11,0x51,0x01,0xc6,0x81,0x04,0x32,0x18,0x1e,0x92,0x64,0x00,0x11,0x68,0x81,0xd6,0xa0,0x07,0x16,0x22,0x6b,0x0a,0x82,0x07,0x3f,0x05,0x4d,0xdc,0x24,0x21,}; |  | ||||||
| const uint8_t *_I_DolphinFirstStart6_58x54[] = {_I_DolphinFirstStart6_58x54_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Flipper_young_80x60_0[] = {0x01,0x00,0xa3,0x01,0x00,0x1e,0x03,0xff,0xff,0x87,0x82,0x57,0xf1,0x83,0x90,0xde,0x01,0x2b,0x0e,0x83,0x70,0xfb,0x10,0x10,0x41,0xf8,0x27,0x70,0xcc,0x34,0xc6,0x0e,0x09,0x3e,0x04,0x86,0x21,0x0c,0x90,0xc3,0x03,0xa9,0xe7,0xb0,0x46,0x2c,0x51,0x40,0x4a,0x63,0x38,0x31,0x0a,0x34,0x90,0x12,0x91,0x8e,0x3c,0xff,0x89,0x4c,0x04,0xa4,0x43,0xfd,0xf3,0xc3,0xf2,0x01,0x29,0xe0,0x2b,0x8e,0x72,0xa0,0x46,0x4b,0xe0,0x30,0xba,0x10,0x22,0xca,0x1c,0x0b,0x26,0x09,0x3c,0x04,0x0c,0x08,0x59,0xc8,0x21,0x64,0xc4,0x47,0x98,0x82,0x81,0x0a,0xe0,0x21,0x39,0x04,0x34,0x88,0x60,0x93,0xa0,0x45,0x4b,0x06,0xa3,0x40,0x48,0xfc,0x20,0xf0,0x82,0xa2,0x4d,0x60,0x11,0xe9,0xc2,0x19,0x64,0xd0,0x08,0x1f,0x80,0x7e,0x60,0x01,0x92,0x60,0x20,0x38,0x05,0x21,0x7c,0x3f,0xf0,0x1a,0xe6,0x00,0xe6,0x21,0x32,0x1a,0x0c,0x0e,0x91,0x80,0x8f,0xc0,0x06,0x25,0xcc,0xbf,0xc1,0xaa,0x10,0x0b,0xfc,0x02,0x60,0x2e,0x2c,0x04,0x32,0xc1,0x00,0xff,0x40,0x68,0x00,0x91,0x89,0xc0,0x21,0x20,0x51,0xfe,0x41,0xf0,0x00,0x91,0xc4,0xcf,0xe2,0x40,0x51,0xfc,0x0c,0x86,0x07,0x80,0xe2,0xdf,0xda,0x25,0xf0,0x9f,0xc0,0x21,0x98,0x0f,0x27,0xfd,0xa2,0x5e,0x01,0x90,0xc4,0x30,0x1e,0x2f,0xfc,0xa1,0x3a,0x45,0x41,0xb0,0x60,0x3e,0x5e,0x79,0x4a,0x10,0xbf,0xe2,0x61,0xc0,0x82,0x52,0x01,0xff,0x36,0x8e,0x3b,0xe5,0xff,0x04,0x9f,0xf8,0x78,0x3b,0x8f,0x97,0xf8,0x12,0x7f,0xc3,0x78,0xf8,0x3e,0x5f,0xc0,0x49,0xfe,0x08,0xc2,0x17,0x1f,0xcd,0xa5,0xac,0x5f,0x02,0x30,0xc0,0x30,0x5f,0xfd,0x23,0xbc,0xbc,0x1f,0xf0,0xc1,0x5f,0xaa,0x8e,0x52,0x28,0x10,0x10,0x6f,0x1b,0x28,0x57,0x81,0x66,0x25,0x01,0x80,0x4e,0x28,0x15,0x98,0xad,0xc3,0xfd,0xff,0xff,0x91,0x87,0xc1,0x80,0xd4,0xc2,0xb2,0x03,0xb1,0x5b,0x13,0x34,0x6a,0xf1,0x58,0x84,0x0e,0x1d,0x00,0x23,0x14,0x0f,0x55,0x0a,0x88,0x67,0x0d,0x83,0x7c,0x04,0x8c,0x0a,0xa9,0x15,0x90,0x7c,0x07,0x23,0xf8,0x80,0xc1,0xa0,0xda,0x88,0x54,0x82,0x00,0x2f,0x1f,0xe4,0x3c,0x7a,0x35,0x08,0xab,0x20,0x7f,0x03,0xc1,0x2d,0x96,0x82,0x14,0xce,0x20,0x02,0x04,0xc6,0x00,0x60,0x20,0x01,0x84,0xc4,0x6a,0x21,0x36,0x3b,0x8c,0xf0,0x3c,0xc8,0x02,0x1b,0x88,0x01,0xe1,0x80,0x98,0x2d,0x10,0x01,0xb0,0x05,0xa1,0x00,0x3d,0xf8,0x13,0x17,0x81,0x47,0x80,0x0b,0xc0,0x28,0x8e,0x02,0xa4,0x81,0x2c,0xf0,0x20,0x01,0x00,}; |  | ||||||
| const uint8_t *_I_Flipper_young_80x60[] = {_I_Flipper_young_80x60_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinFirstStart8_56x51_0[] = {0x01,0x00,0xfd,0x00,0x00,0x17,0x83,0xff,0x01,0x03,0x1c,0x72,0x01,0x06,0x03,0x1c,0x0e,0x01,0x18,0x02,0x96,0x00,0x04,0x36,0x00,0x31,0x50,0x01,0x24,0x1c,0x29,0x00,0x28,0xa0,0x40,0x21,0x88,0x01,0x8a,0x08,0x02,0x18,0x40,0x18,0x80,0x64,0x09,0x20,0x89,0x81,0x98,0x3c,0x42,0x63,0x03,0x30,0xcc,0x70,0x10,0x71,0xd9,0x01,0x86,0xc1,0x1c,0x03,0x24,0x42,0x7e,0x50,0x12,0x91,0x62,0x2f,0xf8,0x0e,0x00,0x18,0xb9,0x17,0x1c,0x04,0x83,0x02,0x06,0x1e,0x27,0xc4,0x54,0x20,0x62,0xf2,0x7c,0xe0,0x52,0x0c,0x10,0x88,0x7c,0x9f,0xf8,0x28,0x18,0x41,0xa5,0xff,0x85,0x48,0x30,0x80,0xd1,0xe4,0x5f,0xc1,0xa3,0x84,0x26,0x0f,0x23,0xfe,0x1b,0x18,0x44,0x16,0x01,0x90,0x81,0xc1,0x62,0x10,0x84,0xc0,0xf8,0x20,0x30,0x28,0x84,0x40,0x1a,0x25,0x11,0x82,0x42,0x22,0x11,0xf4,0xd9,0xc1,0x02,0x22,0xb2,0x38,0x14,0xc1,0x8e,0x90,0x14,0xc1,0xa2,0x86,0x02,0xc6,0x30,0x31,0x06,0x8c,0x0c,0x26,0x02,0x56,0x9d,0x04,0x0c,0x6a,0xa1,0x03,0x21,0x20,0x68,0x5f,0xe7,0xa9,0x00,0x86,0x85,0x01,0x8f,0xe0,0x08,0xe3,0x00,0xe1,0x02,0xc6,0xfe,0x16,0x23,0xe1,0x13,0x10,0xa4,0x82,0xb1,0x12,0x88,0x00,0xf0,0x91,0xe0,0x6a,0xfd,0x63,0xfc,0x08,0x78,0x18,0xb5,0x5e,0xad,0xfb,0x84,0xa0,0x95,0x48,0xad,0x54,0x4a,0x50,0x4d,0x44,0x6b,0x56,0x0d,0x28,0x45,0x42,0x6a,0x0d,0x38,0x46,0x02,0x55,0xaa,0x35,0x25,0x52,0xac,0x06,0x4b,0x04,0xa8,0x0c,0x94,0x03,0xa0,0x80,0x04,}; |  | ||||||
| const uint8_t *_I_DolphinFirstStart8_56x51[] = {_I_DolphinFirstStart8_56x51_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinFirstStart1_59x53_0[] = {0x01,0x00,0x1e,0x01,0x00,0x0e,0x03,0xfe,0x07,0x5b,0x84,0x02,0x06,0x07,0x48,0x64,0x02,0x08,0x07,0x48,0x14,0x02,0x10,0x07,0x48,0x0c,0x03,0x21,0x3f,0x13,0x18,0x84,0xa8,0x00,0x75,0x8c,0x00,0xca,0x00,0x0b,0x28,0x20,0x1d,0xa0,0x59,0xe0,0x39,0x48,0x07,0x03,0x81,0xd5,0x81,0xd6,0x81,0x55,0x8c,0x01,0xc6,0x21,0x00,0x87,0x68,0x25,0x52,0x40,0x39,0x7c,0x21,0xf5,0x08,0xa8,0x1d,0x20,0xfa,0x88,0x70,0x1c,0xfd,0x10,0x3a,0xa4,0x1f,0x88,0x54,0x18,0x85,0x52,0x09,0xbe,0x81,0xc1,0x0c,0x83,0x10,0x94,0x40,0x39,0xf0,0x19,0x21,0xc8,0x62,0x12,0x0c,0x04,0x0e,0x0c,0x07,0x38,0x07,0x86,0x07,0x18,0x03,0x94,0xc2,0x01,0x9e,0x81,0xca,0x38,0x89,0x21,0x0f,0x0c,0x03,0xf9,0x27,0x13,0x94,0xd0,0xb6,0x70,0x20,0x38,0xda,0x80,0xe5,0x10,0x03,0x95,0x59,0x54,0x70,0x10,0x38,0xda,0xc0,0xc3,0xfe,0xc1,0xab,0x0b,0xaa,0x2a,0x1c,0x05,0x81,0x58,0x38,0x09,0xd0,0x5c,0xa3,0xe0,0x72,0x86,0xae,0x8d,0x40,0x34,0x06,0xa1,0xc0,0xc0,0xe3,0xc0,0x65,0x1c,0x19,0x58,0x29,0xe1,0x00,0x14,0x28,0x0a,0x26,0x61,0x00,0x15,0x58,0x0a,0x2e,0x34,0xd6,0x42,0x9e,0x6b,0x54,0x82,0x92,0x08,0x1e,0x63,0x41,0x1d,0x0a,0x88,0x60,0x1d,0x42,0x11,0x5c,0x01,0xe5,0x3c,0x03,0x97,0x30,0x0e,0x42,0x42,0x80,0xd0,0x82,0xe4,0x07,0x28,0x17,0x10,0x1e,0xb0,0x4a,0x20,0x3d,0x61,0x1a,0x80,0x79,0x0f,0x0a,0x21,0x70,0x07,0x90,0x1c,0xa4,0x1a,0x00,0x7a,0xd0,0x0e,0x42,0x34,0x20,0x10,0xe0,0x00,0xed,0x00,0xa1,0x82,0xc8,0xc6,0x74,0x40,0xd9,0x01,0xce,0x84,0x07,0x69,0x10,0xcc,0x80,0xe7,0x5c,0x03,0xb4,0xa8,0x96,0x40,0x73,0x8a,0x96,0xc8,0x0c,0x40,}; |  | ||||||
| const uint8_t *_I_DolphinFirstStart1_59x53[] = {_I_DolphinFirstStart1_59x53_0}; |  | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DolphinOkay_41x43_0[] = {0x01,0x00,0xa0,0x00,0x00,0x0f,0x82,0x3e,0x05,0x38,0xf7,0x80,0x08,0x58,0x08,0x0c,0x02,0x0e,0x05,0x1b,0x00,0x08,0x63,0x00,0x21,0x88,0x00,0x86,0x40,0x02,0x18,0x40,0x08,0x68,0x00,0x21,0x82,0x06,0x88,0x0a,0xf0,0x21,0x39,0x09,0x84,0x02,0x20,0x57,0x09,0x98,0x15,0x67,0xc0,0x54,0xbe,0x81,0x4f,0x01,0xfe,0x02,0x9d,0x03,0xc4,0x20,0x10,0x29,0x7c,0x80,0xa9,0xfe,0x02,0xac,0x14,0x0a,0x77,0xc8,0x58,0x8c,0xf0,0x11,0x51,0x79,0xff,0x61,0x44,0x93,0x81,0x02,0xc4,0x9e,0x60,0xb2,0xf0,0xa0,0x46,0x0c,0x17,0x14,0x99,0x1a,0x07,0x80,0x59,0x49,0x82,0x21,0xc0,0xa4,0x82,0x24,0xb9,0x20,0x88,0x1c,0x47,0xc2,0x07,0x11,0x54,0xa0,0x60,0x53,0xb8,0x0a,0x4b,0xf3,0x03,0x87,0x81,0x4a,0x0d,0xfc,0x1a,0x98,0x68,0xb8,0x01,0x51,0x13,0x15,0xe0,0x82,0x7f,0x8d,0x78,0x38,0xbf,0xff,0xfa,0xb8,0x60,0xbf,0x1b,0xf9,0x50,0x14,0xea,0xe7,0x02,0x02,0x8e,0xac,0x94,0x40,}; | const uint8_t _I_DolphinOkay_41x43_0[] = {0x01,0x00,0xa0,0x00,0x00,0x0f,0x82,0x3e,0x05,0x38,0xf7,0x80,0x08,0x58,0x08,0x0c,0x02,0x0e,0x05,0x1b,0x00,0x08,0x63,0x00,0x21,0x88,0x00,0x86,0x40,0x02,0x18,0x40,0x08,0x68,0x00,0x21,0x82,0x06,0x88,0x0a,0xf0,0x21,0x39,0x09,0x84,0x02,0x20,0x57,0x09,0x98,0x15,0x67,0xc0,0x54,0xbe,0x81,0x4f,0x01,0xfe,0x02,0x9d,0x03,0xc4,0x20,0x10,0x29,0x7c,0x80,0xa9,0xfe,0x02,0xac,0x14,0x0a,0x77,0xc8,0x58,0x8c,0xf0,0x11,0x51,0x79,0xff,0x61,0x44,0x93,0x81,0x02,0xc4,0x9e,0x60,0xb2,0xf0,0xa0,0x46,0x0c,0x17,0x14,0x99,0x1a,0x07,0x80,0x59,0x49,0x82,0x21,0xc0,0xa4,0x82,0x24,0xb9,0x20,0x88,0x1c,0x47,0xc2,0x07,0x11,0x54,0xa0,0x60,0x53,0xb8,0x0a,0x4b,0xf3,0x03,0x87,0x81,0x4a,0x0d,0xfc,0x1a,0x98,0x68,0xb8,0x01,0x51,0x13,0x15,0xe0,0x82,0x7f,0x8d,0x78,0x38,0xbf,0xff,0xfa,0xb8,0x60,0xbf,0x1b,0xf9,0x50,0x14,0xea,0xe7,0x02,0x02,0x8e,0xac,0x94,0x40,}; | ||||||
| const uint8_t *_I_DolphinOkay_41x43[] = {_I_DolphinOkay_41x43_0}; | const uint8_t *_I_DolphinOkay_41x43[] = {_I_DolphinOkay_41x43_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_DolphinFirstStart5_54x49_0[] = {0x01,0x00,0x0b,0x01,0x00,0x0f,0xf2,0xfe,0x06,0x48,0x1e,0x02,0x06,0x05,0x2e,0x00,0x08,0x61,0x80,0x62,0x98,0x00,0x86,0x20,0x06,0x28,0x40,0x08,0x64,0x00,0x62,0x82,0x00,0x86,0x80,0x06,0x28,0x14,0x72,0x01,0x80,0x03,0x14,0x06,0x44,0x03,0x20,0x49,0x00,0xc4,0x0c,0x61,0x13,0x81,0x07,0x90,0x0c,0xff,0xa8,0x18,0xcc,0xe0,0x10,0x78,0x60,0x18,0xc9,0xe3,0x10,0x03,0x0e,0x02,0x02,0x4f,0x19,0x00,0x18,0x78,0x10,0x12,0x78,0xc8,0x0a,0xc3,0xf8,0x80,0xc1,0x80,0xc5,0xe0,0xff,0x8f,0x47,0xe1,0x27,0x03,0x0d,0xfc,0x80,0x3b,0xc9,0x74,0x43,0x81,0x0f,0xb0,0x40,0x2b,0xd2,0xd3,0x71,0x07,0x87,0x5f,0x16,0x84,0x54,0x23,0xe3,0x21,0xab,0xc5,0x61,0x1a,0x82,0xf0,0xf0,0x35,0x70,0xa8,0x45,0x50,0x2a,0x3e,0x0a,0xac,0x1e,0x11,0x28,0x03,0x0f,0xc3,0xfe,0x06,0x19,0xa0,0x18,0x6f,0x9f,0x08,0x7c,0x22,0x30,0x06,0x1d,0xfc,0x3e,0x21,0x08,0x00,0x8f,0x01,0x7a,0x31,0x08,0x24,0x42,0x21,0xf0,0x5e,0x08,0x18,0x44,0xe3,0x0f,0x59,0x92,0xb4,0x96,0x66,0x06,0x58,0x10,0x19,0x60,0x20,0x64,0x46,0x08,0x19,0x27,0x00,0x65,0x9f,0x81,0x93,0xd1,0x2b,0x03,0x17,0x82,0x3f,0x50,0x9a,0x81,0x87,0x51,0x1e,0xf0,0x68,0x69,0x40,0x61,0xea,0x9d,0x86,0x1d,0x45,0x80,0x61,0x2d,0x48,0xc2,0x67,0x8d,0x12,0x3a,0x06,0x19,0x02,0x88,0x74,0x4b,0x21,0x03,0x1d,0x08,0xca,0x21,0x41,0x06,0x93,0xe8,0xa1,0x85,0x31,0xe9,0x24,0x48,0x20,0x30,0x1b,0x10,0x18,0x77,0x8f,0xa1,0x80,0xcc,0x40,0xc3,0x56,0x0b,0x8c,0x0a,0x22,0xba,0x12,0x88,0x81,0x84,}; | ||||||
|  | const uint8_t *_I_DolphinFirstStart5_54x49[] = {_I_DolphinFirstStart5_54x49_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Flipper_young_80x60_0[] = {0x01,0x00,0xa3,0x01,0x00,0x1e,0x03,0xff,0xff,0x87,0x82,0x57,0xf1,0x83,0x90,0xde,0x01,0x2b,0x0e,0x83,0x70,0xfb,0x10,0x10,0x41,0xf8,0x27,0x70,0xcc,0x34,0xc6,0x0e,0x09,0x3e,0x04,0x86,0x21,0x0c,0x90,0xc3,0x03,0xa9,0xe7,0xb0,0x46,0x2c,0x51,0x40,0x4a,0x63,0x38,0x31,0x0a,0x34,0x90,0x12,0x91,0x8e,0x3c,0xff,0x89,0x4c,0x04,0xa4,0x43,0xfd,0xf3,0xc3,0xf2,0x01,0x29,0xe0,0x2b,0x8e,0x72,0xa0,0x46,0x4b,0xe0,0x30,0xba,0x10,0x22,0xca,0x1c,0x0b,0x26,0x09,0x3c,0x04,0x0c,0x08,0x59,0xc8,0x21,0x64,0xc4,0x47,0x98,0x82,0x81,0x0a,0xe0,0x21,0x39,0x04,0x34,0x88,0x60,0x93,0xa0,0x45,0x4b,0x06,0xa3,0x40,0x48,0xfc,0x20,0xf0,0x82,0xa2,0x4d,0x60,0x11,0xe9,0xc2,0x19,0x64,0xd0,0x08,0x1f,0x80,0x7e,0x60,0x01,0x92,0x60,0x20,0x38,0x05,0x21,0x7c,0x3f,0xf0,0x1a,0xe6,0x00,0xe6,0x21,0x32,0x1a,0x0c,0x0e,0x91,0x80,0x8f,0xc0,0x06,0x25,0xcc,0xbf,0xc1,0xaa,0x10,0x0b,0xfc,0x02,0x60,0x2e,0x2c,0x04,0x32,0xc1,0x00,0xff,0x40,0x68,0x00,0x91,0x89,0xc0,0x21,0x20,0x51,0xfe,0x41,0xf0,0x00,0x91,0xc4,0xcf,0xe2,0x40,0x51,0xfc,0x0c,0x86,0x07,0x80,0xe2,0xdf,0xda,0x25,0xf0,0x9f,0xc0,0x21,0x98,0x0f,0x27,0xfd,0xa2,0x5e,0x01,0x90,0xc4,0x30,0x1e,0x2f,0xfc,0xa1,0x3a,0x45,0x41,0xb0,0x60,0x3e,0x5e,0x79,0x4a,0x10,0xbf,0xe2,0x61,0xc0,0x82,0x52,0x01,0xff,0x36,0x8e,0x3b,0xe5,0xff,0x04,0x9f,0xf8,0x78,0x3b,0x8f,0x97,0xf8,0x12,0x7f,0xc3,0x78,0xf8,0x3e,0x5f,0xc0,0x49,0xfe,0x08,0xc2,0x17,0x1f,0xcd,0xa5,0xac,0x5f,0x02,0x30,0xc0,0x30,0x5f,0xfd,0x23,0xbc,0xbc,0x1f,0xf0,0xc1,0x5f,0xaa,0x8e,0x52,0x28,0x10,0x10,0x6f,0x1b,0x28,0x57,0x81,0x66,0x25,0x01,0x80,0x4e,0x28,0x15,0x98,0xad,0xc3,0xfd,0xff,0xff,0x91,0x87,0xc1,0x80,0xd4,0xc2,0xb2,0x03,0xb1,0x5b,0x13,0x34,0x6a,0xf1,0x58,0x84,0x0e,0x1d,0x00,0x23,0x14,0x0f,0x55,0x0a,0x88,0x67,0x0d,0x83,0x7c,0x04,0x8c,0x0a,0xa9,0x15,0x90,0x7c,0x07,0x23,0xf8,0x80,0xc1,0xa0,0xda,0x88,0x54,0x82,0x00,0x2f,0x1f,0xe4,0x3c,0x7a,0x35,0x08,0xab,0x20,0x7f,0x03,0xc1,0x2d,0x96,0x82,0x14,0xce,0x20,0x02,0x04,0xc6,0x00,0x60,0x20,0x01,0x84,0xc4,0x6a,0x21,0x36,0x3b,0x8c,0xf0,0x3c,0xc8,0x02,0x1b,0x88,0x01,0xe1,0x80,0x98,0x2d,0x10,0x01,0xb0,0x05,0xa1,0x00,0x3d,0xf8,0x13,0x17,0x81,0x47,0x80,0x0b,0xc0,0x28,0x8e,0x02,0xa4,0x81,0x2c,0xf0,0x20,0x01,0x00,}; | ||||||
|  | const uint8_t *_I_Flipper_young_80x60[] = {_I_Flipper_young_80x60_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DolphinFirstStart2_59x51_0[] = {0x01,0x00,0x2e,0x01,0x00,0x1f,0xfe,0x06,0x05,0x3f,0xc7,0xfe,0x01,0x1c,0x03,0x16,0x02,0xaf,0x0f,0x80,0x58,0x01,0xc7,0xaa,0x80,0x82,0xc4,0x0e,0x55,0x6b,0x28,0x10,0x81,0x45,0xab,0x8d,0x01,0xca,0x04,0x1a,0x1a,0xac,0x1c,0x0e,0x50,0x48,0x06,0xc0,0x3c,0x40,0x01,0x84,0x40,0x2b,0x15,0x51,0xd9,0xc4,0x20,0x1a,0xc9,0x50,0x1c,0xe4,0x02,0xe1,0x8a,0x81,0xd7,0x55,0x0a,0x03,0x9d,0x02,0x01,0x5c,0x82,0x81,0xd7,0xc0,0x3a,0x10,0x3a,0x12,0x88,0xc8,0x60,0x11,0x07,0xa0,0x1c,0x68,0x00,0xf6,0xe0,0x22,0x50,0x0e,0x36,0x00,0x7b,0x68,0x00,0x83,0xa0,0x11,0x08,0x1c,0x6a,0x03,0x42,0x44,0x1e,0xc0,0x28,0x50,0x61,0xf9,0x56,0x00,0xe3,0x60,0x40,0x88,0x1c,0x75,0x01,0x42,0x07,0x9d,0x50,0x5e,0x4b,0x01,0x37,0x8e,0xb0,0x0e,0x51,0xd8,0x04,0xc2,0x01,0xd4,0x5d,0x1c,0x02,0x30,0x7f,0x14,0x99,0x5c,0x20,0x11,0x48,0x07,0x58,0x0e,0x20,0x81,0xd0,0x23,0x04,0x1e,0x30,0x80,0x38,0xd4,0x11,0x82,0x0f,0x18,0x40,0xb0,0xb0,0x50,0x3d,0x58,0x1c,0x52,0x85,0xf1,0x83,0x75,0x58,0x64,0x49,0x1a,0xfc,0x17,0x57,0x01,0x88,0x25,0x0b,0x55,0x02,0xaa,0xc0,0x64,0x14,0x08,0x1e,0x02,0xaa,0x1f,0x18,0x0f,0x00,0xbe,0x20,0xf1,0x80,0x82,0x46,0x01,0x03,0x82,0xe0,0x04,0xa3,0xab,0x46,0x0e,0x32,0x15,0x80,0xb5,0x40,0x2a,0xa4,0x21,0x98,0x43,0x70,0x13,0x58,0x04,0xac,0xa4,0x3c,0x08,0xd6,0x02,0x35,0x00,0x8a,0xcd,0x06,0xa3,0x1d,0xa0,0x24,0x46,0x57,0xe8,0x26,0x8c,0xdb,0x80,0x84,0x18,0xad,0x42,0x07,0x5f,0xbf,0xb9,0x8a,0x17,0x80,0xff,0x6a,0xb0,0x46,0x91,0x07,0x88,0xc4,0x4a,0x43,0x1f,0x07,0x92,0xc4,0x49,0x82,0x9b,0x25,0x98,0xc0,0x28,0xa0,0x73,0x1f,0x0b,0x50,0x81,0xea,0x07,0x40,0x7b,0xac,0x44,0x0e,0xa0,}; | ||||||
|  | const uint8_t *_I_DolphinFirstStart2_59x51[] = {_I_DolphinFirstStart2_59x51_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DolphinFirstStart8_56x51_0[] = {0x01,0x00,0xfd,0x00,0x00,0x17,0x83,0xff,0x01,0x03,0x1c,0x72,0x01,0x06,0x03,0x1c,0x0e,0x01,0x18,0x02,0x96,0x00,0x04,0x36,0x00,0x31,0x50,0x01,0x24,0x1c,0x29,0x00,0x28,0xa0,0x40,0x21,0x88,0x01,0x8a,0x08,0x02,0x18,0x40,0x18,0x80,0x64,0x09,0x20,0x89,0x81,0x98,0x3c,0x42,0x63,0x03,0x30,0xcc,0x70,0x10,0x71,0xd9,0x01,0x86,0xc1,0x1c,0x03,0x24,0x42,0x7e,0x50,0x12,0x91,0x62,0x2f,0xf8,0x0e,0x00,0x18,0xb9,0x17,0x1c,0x04,0x83,0x02,0x06,0x1e,0x27,0xc4,0x54,0x20,0x62,0xf2,0x7c,0xe0,0x52,0x0c,0x10,0x88,0x7c,0x9f,0xf8,0x28,0x18,0x41,0xa5,0xff,0x85,0x48,0x30,0x80,0xd1,0xe4,0x5f,0xc1,0xa3,0x84,0x26,0x0f,0x23,0xfe,0x1b,0x18,0x44,0x16,0x01,0x90,0x81,0xc1,0x62,0x10,0x84,0xc0,0xf8,0x20,0x30,0x28,0x84,0x40,0x1a,0x25,0x11,0x82,0x42,0x22,0x11,0xf4,0xd9,0xc1,0x02,0x22,0xb2,0x38,0x14,0xc1,0x8e,0x90,0x14,0xc1,0xa2,0x86,0x02,0xc6,0x30,0x31,0x06,0x8c,0x0c,0x26,0x02,0x56,0x9d,0x04,0x0c,0x6a,0xa1,0x03,0x21,0x20,0x68,0x5f,0xe7,0xa9,0x00,0x86,0x85,0x01,0x8f,0xe0,0x08,0xe3,0x00,0xe1,0x02,0xc6,0xfe,0x16,0x23,0xe1,0x13,0x10,0xa4,0x82,0xb1,0x12,0x88,0x00,0xf0,0x91,0xe0,0x6a,0xfd,0x63,0xfc,0x08,0x78,0x18,0xb5,0x5e,0xad,0xfb,0x84,0xa0,0x95,0x48,0xad,0x54,0x4a,0x50,0x4d,0x44,0x6b,0x56,0x0d,0x28,0x45,0x42,0x6a,0x0d,0x38,0x46,0x02,0x55,0xaa,0x35,0x25,0x52,0xac,0x06,0x4b,0x04,0xa8,0x0c,0x94,0x03,0xa0,0x80,0x04,}; | ||||||
|  | const uint8_t *_I_DolphinFirstStart8_56x51[] = {_I_DolphinFirstStart8_56x51_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_DolphinFirstStart3_57x48_0[] = {0x01,0x00,0x12,0x01,0x00,0x16,0x03,0xff,0x07,0x03,0xa5,0x82,0x01,0x38,0x03,0xa4,0x62,0x01,0xc0,0x03,0xa4,0x10,0x04,0x30,0x10,0x39,0xc0,0x80,0x48,0x0c,0x40,0x91,0x7e,0x20,0x60,0x72,0x84,0x02,0x8b,0x78,0x12,0x28,0x80,0x68,0x85,0x87,0x20,0x11,0x18,0x5c,0x80,0xe8,0x01,0x19,0xc5,0x00,0x0e,0x62,0xc1,0x9f,0x01,0xcb,0xe9,0x03,0x84,0x60,0x20,0xf8,0x00,0x38,0xd7,0x21,0xb1,0x0f,0x04,0x04,0x0e,0x5a,0x89,0xd4,0x83,0xc0,0x4b,0x3a,0xc5,0x54,0xcc,0x20,0x51,0x00,0x8e,0xc3,0x54,0x80,0x13,0xf8,0x81,0xc6,0xc1,0x55,0x01,0x8c,0x78,0x0e,0x30,0xee,0x06,0xaa,0x05,0xe0,0xae,0x01,0xc6,0x23,0x80,0xaa,0xc1,0x60,0x1a,0x90,0x38,0xc8,0x60,0x1a,0xb8,0x54,0x02,0xad,0x07,0x80,0xd0,0x40,0x83,0x15,0x80,0x7b,0x21,0x10,0x1c,0x0c,0x03,0x7f,0x2a,0x80,0x4d,0x00,0xe3,0x01,0xf8,0xf0,0x2a,0xf0,0x08,0x60,0x1c,0x60,0x41,0xd1,0xdf,0x1a,0x44,0x0e,0x50,0x68,0x05,0xe3,0x07,0x02,0x82,0x01,0xc6,0x19,0x00,0xf8,0x5f,0xe0,0x20,0x72,0xfa,0x40,0x7f,0xc2,0xb1,0x03,0x88,0x68,0x7f,0xf6,0xb4,0x28,0xc0,0x80,0xe3,0x88,0xaa,0xc7,0x40,0xe9,0x50,0xd5,0x41,0x94,0xa2,0x07,0x29,0x87,0x52,0x02,0x07,0x12,0x30,0xc1,0x22,0x16,0x86,0x29,0x01,0xca,0x30,0xf6,0x10,0x39,0xc2,0x23,0x10,0x6c,0x00,0x1d,0x3d,0x10,0x1b,0x02,0xe0,0x41,0x03,0x08,0x75,0x0c,0x60,0x0e,0x4f,0x11,0x0a,0x0c,0x18,0x0e,0x96,0x06,0x28,0x81,0xd3,0x01,0x1f,0x01,0x90,0x1c,0xdc,0xc2,0x01,0x15,0xd0,0x81,0xdc,0x4c,0x30,0x30,0x3f,0x00,0xc4,0x0e,0x30,0x20,0x3c,0x8c,0xc8,0x0f,0x2b,0x41,}; | const uint8_t _I_DolphinFirstStart3_57x48_0[] = {0x01,0x00,0x12,0x01,0x00,0x16,0x03,0xff,0x07,0x03,0xa5,0x82,0x01,0x38,0x03,0xa4,0x62,0x01,0xc0,0x03,0xa4,0x10,0x04,0x30,0x10,0x39,0xc0,0x80,0x48,0x0c,0x40,0x91,0x7e,0x20,0x60,0x72,0x84,0x02,0x8b,0x78,0x12,0x28,0x80,0x68,0x85,0x87,0x20,0x11,0x18,0x5c,0x80,0xe8,0x01,0x19,0xc5,0x00,0x0e,0x62,0xc1,0x9f,0x01,0xcb,0xe9,0x03,0x84,0x60,0x20,0xf8,0x00,0x38,0xd7,0x21,0xb1,0x0f,0x04,0x04,0x0e,0x5a,0x89,0xd4,0x83,0xc0,0x4b,0x3a,0xc5,0x54,0xcc,0x20,0x51,0x00,0x8e,0xc3,0x54,0x80,0x13,0xf8,0x81,0xc6,0xc1,0x55,0x01,0x8c,0x78,0x0e,0x30,0xee,0x06,0xaa,0x05,0xe0,0xae,0x01,0xc6,0x23,0x80,0xaa,0xc1,0x60,0x1a,0x90,0x38,0xc8,0x60,0x1a,0xb8,0x54,0x02,0xad,0x07,0x80,0xd0,0x40,0x83,0x15,0x80,0x7b,0x21,0x10,0x1c,0x0c,0x03,0x7f,0x2a,0x80,0x4d,0x00,0xe3,0x01,0xf8,0xf0,0x2a,0xf0,0x08,0x60,0x1c,0x60,0x41,0xd1,0xdf,0x1a,0x44,0x0e,0x50,0x68,0x05,0xe3,0x07,0x02,0x82,0x01,0xc6,0x19,0x00,0xf8,0x5f,0xe0,0x20,0x72,0xfa,0x40,0x7f,0xc2,0xb1,0x03,0x88,0x68,0x7f,0xf6,0xb4,0x28,0xc0,0x80,0xe3,0x88,0xaa,0xc7,0x40,0xe9,0x50,0xd5,0x41,0x94,0xa2,0x07,0x29,0x87,0x52,0x02,0x07,0x12,0x30,0xc1,0x22,0x16,0x86,0x29,0x01,0xca,0x30,0xf6,0x10,0x39,0xc2,0x23,0x10,0x6c,0x00,0x1d,0x3d,0x10,0x1b,0x02,0xe0,0x41,0x03,0x08,0x75,0x0c,0x60,0x0e,0x4f,0x11,0x0a,0x0c,0x18,0x0e,0x96,0x06,0x28,0x81,0xd3,0x01,0x1f,0x01,0x90,0x1c,0xdc,0xc2,0x01,0x15,0xd0,0x81,0xdc,0x4c,0x30,0x30,0x3f,0x00,0xc4,0x0e,0x30,0x20,0x3c,0x8c,0xc8,0x0f,0x2b,0x41,}; | ||||||
| const uint8_t *_I_DolphinFirstStart3_57x48[] = {_I_DolphinFirstStart3_57x48_0}; | const uint8_t *_I_DolphinFirstStart3_57x48[] = {_I_DolphinFirstStart3_57x48_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DolphinFirstStart7_61x51_0[] = {0x01,0x00,0x13,0x01,0x00,0x17,0x03,0xff,0x01,0x03,0xa4,0xe2,0x01,0x0e,0x03,0xa4,0x1a,0x01,0x30,0x03,0x1e,0x00,0x2a,0x3c,0x00,0x39,0xd0,0x00,0x65,0x03,0x01,0x94,0x80,0x06,0x50,0x40,0x19,0x44,0x00,0x65,0x08,0x01,0xb0,0x2c,0xe2,0x81,0xb6,0x86,0x0a,0xd8,0x7c,0x20,0x75,0x85,0x10,0xcc,0x06,0x50,0x50,0x3b,0x10,0xce,0x00,0x69,0x20,0x79,0x7c,0x20,0x20,0x71,0xc0,0x07,0xca,0xf1,0x02,0x81,0x01,0xc6,0x3a,0x07,0x1f,0xe4,0x10,0x0e,0x53,0xe0,0x38,0xe7,0xa0,0xa0,0x72,0xbb,0x81,0xca,0x12,0x68,0x1c,0x05,0x5c,0x0e,0x3f,0xe8,0xc8,0x1c,0xab,0xe0,0x72,0x94,0x81,0xda,0xb2,0x07,0x5f,0xe0,0x3d,0xbf,0x95,0x44,0x20,0x81,0xce,0xf1,0x2f,0x03,0x94,0xb8,0xae,0x51,0x00,0x39,0x47,0x60,0xd0,0x84,0x70,0x81,0xcb,0x44,0x9d,0x10,0x3a,0x58,0xce,0xe6,0x07,0x29,0x10,0x18,0xa0,0x50,0x88,0x76,0x02,0x22,0x07,0x49,0x8e,0x02,0x24,0x07,0x4e,0x0e,0x02,0x12,0x96,0x38,0x44,0x07,0x02,0x8f,0x1c,0x07,0x1c,0x4e,0x30,0x1c,0x10,0x3c,0x6c,0x13,0x80,0x38,0xc0,0xb0,0x80,0xf1,0x6e,0x90,0x1c,0x71,0x10,0xd7,0x49,0x81,0xc7,0x20,0x0f,0x17,0xe9,0x42,0x20,0x91,0x09,0xeb,0x24,0xe2,0x10,0x49,0x07,0x6f,0xff,0x80,0x56,0x88,0x1c,0xa2,0xae,0xd1,0x66,0x89,0xe0,0x68,0x11,0xb8,0x06,0xc0,0x2e,0x40,0x71,0x9a,0xc0,0x2b,0x00,0x73,0xc0,0x7a,0xe0,0x09,0x12,0x03,0x95,0x57,0xff,0x17,0x03,0x9c,0x03,0x57,0xaa,0x78,0x94,0x40,0xa6,0x35,0x5a,0xac,0x14,0x0e,0x9a,0xad,0x50,0xf8,0x41,0x05,0x00,0x83,0x55,0x14,0x06,0x07,0x18,0x54,0xa0,0x0e,0xb0,0x60,0x31,0xc0,0x00,}; |  | ||||||
| const uint8_t *_I_DolphinFirstStart7_61x51[] = {_I_DolphinFirstStart7_61x51_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinFirstStart0_70x53_0[] = {0x01,0x00,0x5a,0x01,0x80,0x60,0x3f,0xf7,0xf0,0x42,0xf8,0x01,0x43,0x07,0x04,0x24,0x72,0x01,0xc0,0x9d,0x82,0x13,0xff,0xff,0xbd,0x70,0x20,0x20,0x72,0xe0,0x40,0x2a,0x11,0xdb,0x00,0x6c,0xec,0x10,0x0d,0x44,0x3a,0x71,0x0e,0x04,0x14,0x42,0x01,0x54,0x86,0xd3,0x27,0x02,0x44,0xd4,0x41,0xb0,0xf2,0x10,0x42,0x55,0x38,0x71,0x1b,0x10,0x18,0xa0,0x41,0x11,0xb1,0xc8,0x28,0x98,0x09,0xfc,0x00,0x72,0x35,0x49,0x8d,0x0b,0xc1,0x70,0xf0,0x10,0x4b,0x51,0x11,0xc2,0x6c,0x0a,0xa3,0x03,0x80,0x7f,0xbf,0xf3,0x08,0x46,0x60,0x90,0x30,0x60,0x50,0xd8,0x2c,0x11,0x0c,0x71,0x5c,0x60,0xf8,0x0f,0xcf,0x3f,0x81,0x80,0xa1,0x9e,0x86,0x0f,0xc0,0x82,0x64,0x30,0x3e,0x09,0x84,0x03,0xf1,0x03,0xa0,0x40,0xa4,0x18,0x39,0xfc,0x20,0x52,0x30,0x19,0x07,0xc6,0x8e,0x4a,0x18,0x22,0x74,0x60,0x1a,0x0f,0xc6,0x3c,0x60,0x5c,0x05,0x28,0xe4,0x3f,0x99,0xf8,0x22,0x28,0x7e,0x05,0x91,0xa8,0x7f,0x23,0xf0,0x59,0x00,0xac,0x63,0xe0,0x81,0xcf,0x4f,0xe0,0xb1,0x81,0x58,0xc3,0xc1,0x08,0x24,0x1f,0xf9,0x68,0x6a,0x1f,0xe9,0xff,0x16,0x02,0x34,0x13,0x50,0x82,0x0a,0xea,0x60,0x1f,0xf9,0xf0,0x41,0x05,0x1d,0x30,0x09,0x18,0x60,0x15,0xa3,0xe8,0x83,0x47,0xe0,0xec,0x2c,0xaf,0xf2,0x0e,0x08,0x1f,0xc1,0x18,0x60,0x1a,0xaf,0xc2,0x6c,0x89,0x62,0x03,0x19,0xad,0xe5,0x70,0x44,0x62,0x80,0x5a,0xa1,0x4f,0x63,0x23,0x0c,0x7a,0xaa,0x4d,0x11,0xe9,0x00,0x06,0x73,0xaa,0x25,0x0a,0x78,0xaf,0x90,0x09,0x25,0x54,0x56,0x5f,0x04,0x30,0xc0,0x64,0x7a,0xa1,0x11,0x7e,0x20,0x18,0x0f,0x3c,0x82,0xaa,0x04,0x18,0x0d,0xf8,0x16,0x33,0xe8,0x84,0xa8,0x08,0x3c,0x33,0x00,0xf0,0x20,0x71,0x08,0xa9,0x38,0x86,0x62,0x62,0x18,0x40,0x44,0x80,0x09,0x04,0x08,0x90,0x01,0x20,0x41,0x17,0x22,0x90,0x01,0x3e,0x00,0x76,0x80,0x1d,0x48,0x00,0x8d,0x91,0x00,0x34,0xf8,0x20,0xe2,0xa7,0x9c,0x06,0x5c,0x11,0x02,0x28,0x5d,0x91,0x35,0x48,0xaf,0xf8,0x04,0x3f,0xf9,0x88,0x20,0x01,}; | const uint8_t _I_DolphinFirstStart0_70x53_0[] = {0x01,0x00,0x5a,0x01,0x80,0x60,0x3f,0xf7,0xf0,0x42,0xf8,0x01,0x43,0x07,0x04,0x24,0x72,0x01,0xc0,0x9d,0x82,0x13,0xff,0xff,0xbd,0x70,0x20,0x20,0x72,0xe0,0x40,0x2a,0x11,0xdb,0x00,0x6c,0xec,0x10,0x0d,0x44,0x3a,0x71,0x0e,0x04,0x14,0x42,0x01,0x54,0x86,0xd3,0x27,0x02,0x44,0xd4,0x41,0xb0,0xf2,0x10,0x42,0x55,0x38,0x71,0x1b,0x10,0x18,0xa0,0x41,0x11,0xb1,0xc8,0x28,0x98,0x09,0xfc,0x00,0x72,0x35,0x49,0x8d,0x0b,0xc1,0x70,0xf0,0x10,0x4b,0x51,0x11,0xc2,0x6c,0x0a,0xa3,0x03,0x80,0x7f,0xbf,0xf3,0x08,0x46,0x60,0x90,0x30,0x60,0x50,0xd8,0x2c,0x11,0x0c,0x71,0x5c,0x60,0xf8,0x0f,0xcf,0x3f,0x81,0x80,0xa1,0x9e,0x86,0x0f,0xc0,0x82,0x64,0x30,0x3e,0x09,0x84,0x03,0xf1,0x03,0xa0,0x40,0xa4,0x18,0x39,0xfc,0x20,0x52,0x30,0x19,0x07,0xc6,0x8e,0x4a,0x18,0x22,0x74,0x60,0x1a,0x0f,0xc6,0x3c,0x60,0x5c,0x05,0x28,0xe4,0x3f,0x99,0xf8,0x22,0x28,0x7e,0x05,0x91,0xa8,0x7f,0x23,0xf0,0x59,0x00,0xac,0x63,0xe0,0x81,0xcf,0x4f,0xe0,0xb1,0x81,0x58,0xc3,0xc1,0x08,0x24,0x1f,0xf9,0x68,0x6a,0x1f,0xe9,0xff,0x16,0x02,0x34,0x13,0x50,0x82,0x0a,0xea,0x60,0x1f,0xf9,0xf0,0x41,0x05,0x1d,0x30,0x09,0x18,0x60,0x15,0xa3,0xe8,0x83,0x47,0xe0,0xec,0x2c,0xaf,0xf2,0x0e,0x08,0x1f,0xc1,0x18,0x60,0x1a,0xaf,0xc2,0x6c,0x89,0x62,0x03,0x19,0xad,0xe5,0x70,0x44,0x62,0x80,0x5a,0xa1,0x4f,0x63,0x23,0x0c,0x7a,0xaa,0x4d,0x11,0xe9,0x00,0x06,0x73,0xaa,0x25,0x0a,0x78,0xaf,0x90,0x09,0x25,0x54,0x56,0x5f,0x04,0x30,0xc0,0x64,0x7a,0xa1,0x11,0x7e,0x20,0x18,0x0f,0x3c,0x82,0xaa,0x04,0x18,0x0d,0xf8,0x16,0x33,0xe8,0x84,0xa8,0x08,0x3c,0x33,0x00,0xf0,0x20,0x71,0x08,0xa9,0x38,0x86,0x62,0x62,0x18,0x40,0x44,0x80,0x09,0x04,0x08,0x90,0x01,0x20,0x41,0x17,0x22,0x90,0x01,0x3e,0x00,0x76,0x80,0x1d,0x48,0x00,0x8d,0x91,0x00,0x34,0xf8,0x20,0xe2,0xa7,0x9c,0x06,0x5c,0x11,0x02,0x28,0x5d,0x91,0x35,0x48,0xaf,0xf8,0x04,0x3f,0xf9,0x88,0x20,0x01,}; | ||||||
| const uint8_t *_I_DolphinFirstStart0_70x53[] = {_I_DolphinFirstStart0_70x53_0}; | const uint8_t *_I_DolphinFirstStart0_70x53[] = {_I_DolphinFirstStart0_70x53_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DolphinFirstStart4_67x53_0[] = {0x01,0x00,0x1f,0x01,0x00,0x17,0xc3,0xfe,0x08,0x68,0x74,0x02,0x0e,0x07,0x4c,0x04,0x06,0x01,0x18,0x04,0x25,0x00,0x04,0x36,0x00,0x42,0x48,0x02,0x88,0x00,0x28,0x80,0x0c,0xa0,0x40,0x83,0x84,0x00,0xca,0x08,0x08,0x30,0x21,0x83,0x0c,0x2c,0x81,0xe3,0x04,0x20,0xc0,0x80,0x02,0x31,0x32,0x11,0x02,0x27,0x00,0x5d,0x40,0x45,0x87,0x90,0x3e,0x7c,0x00,0x43,0x84,0x4e,0x60,0x43,0x30,0x89,0x82,0x12,0x80,0x15,0x20,0x40,0x99,0xc8,0x22,0x7b,0x88,0x10,0x20,0x82,0x27,0x7c,0x82,0x9d,0x48,0x22,0x5f,0x0d,0xfc,0x08,0x10,0x41,0x12,0xf8,0x57,0xc2,0x28,0x30,0x1e,0x07,0x9e,0x06,0x87,0x25,0x79,0xc4,0x20,0x40,0x83,0x21,0x14,0x22,0x08,0x08,0x38,0x2a,0xb8,0xd9,0x47,0x0a,0x14,0x09,0xf0,0x54,0x47,0x1f,0x81,0x82,0x1a,0xde,0x8e,0x33,0xd1,0xc7,0x81,0x0f,0x0e,0x45,0x18,0x20,0xa1,0xe6,0xf2,0x10,0x89,0xa0,0x70,0x11,0x00,0x41,0x46,0x03,0x86,0x55,0x10,0x40,0xc1,0x82,0x25,0x20,0x04,0x11,0x94,0x80,0x43,0x10,0x84,0x01,0x46,0xc0,0xbd,0x38,0x40,0x20,0x8f,0x49,0x08,0xc4,0x1c,0xc8,0x22,0x50,0x38,0x20,0x20,0x86,0xe4,0x83,0x10,0x41,0x8b,0x87,0xf9,0x03,0x81,0xc0,0x81,0x05,0x81,0xc0,0x40,0xf3,0x90,0x60,0x41,0x70,0x2c,0x17,0x01,0xc0,0xc1,0x41,0x05,0x30,0x98,0x43,0x04,0x65,0x01,0x04,0x0c,0x32,0x38,0x91,0x18,0x04,0x14,0x10,0x38,0x18,0x1e,0xac,0x7c,0x41,0x11,0x88,0x5f,0xfc,0x17,0x55,0xa9,0x82,0x06,0x05,0xbc,0x85,0x02,0x08,0xc6,0x32,0x0f,0xe5,0x5e,0x1a,0x08,0x5c,0x06,0xaa,0x34,0x08,0x4a,0x06,0x02,0xab,0x75,0xf0,0x4f,0xc1,0x05,0x80,0x08,0x8e,0xab,0x7f,0xea,0x04,0x11,0x80,0x6a,0xa0,0x02,0x03,0x08,}; | const uint8_t _I_DolphinFirstStart4_67x53_0[] = {0x01,0x00,0x1f,0x01,0x00,0x17,0xc3,0xfe,0x08,0x68,0x74,0x02,0x0e,0x07,0x4c,0x04,0x06,0x01,0x18,0x04,0x25,0x00,0x04,0x36,0x00,0x42,0x48,0x02,0x88,0x00,0x28,0x80,0x0c,0xa0,0x40,0x83,0x84,0x00,0xca,0x08,0x08,0x30,0x21,0x83,0x0c,0x2c,0x81,0xe3,0x04,0x20,0xc0,0x80,0x02,0x31,0x32,0x11,0x02,0x27,0x00,0x5d,0x40,0x45,0x87,0x90,0x3e,0x7c,0x00,0x43,0x84,0x4e,0x60,0x43,0x30,0x89,0x82,0x12,0x80,0x15,0x20,0x40,0x99,0xc8,0x22,0x7b,0x88,0x10,0x20,0x82,0x27,0x7c,0x82,0x9d,0x48,0x22,0x5f,0x0d,0xfc,0x08,0x10,0x41,0x12,0xf8,0x57,0xc2,0x28,0x30,0x1e,0x07,0x9e,0x06,0x87,0x25,0x79,0xc4,0x20,0x40,0x83,0x21,0x14,0x22,0x08,0x08,0x38,0x2a,0xb8,0xd9,0x47,0x0a,0x14,0x09,0xf0,0x54,0x47,0x1f,0x81,0x82,0x1a,0xde,0x8e,0x33,0xd1,0xc7,0x81,0x0f,0x0e,0x45,0x18,0x20,0xa1,0xe6,0xf2,0x10,0x89,0xa0,0x70,0x11,0x00,0x41,0x46,0x03,0x86,0x55,0x10,0x40,0xc1,0x82,0x25,0x20,0x04,0x11,0x94,0x80,0x43,0x10,0x84,0x01,0x46,0xc0,0xbd,0x38,0x40,0x20,0x8f,0x49,0x08,0xc4,0x1c,0xc8,0x22,0x50,0x38,0x20,0x20,0x86,0xe4,0x83,0x10,0x41,0x8b,0x87,0xf9,0x03,0x81,0xc0,0x81,0x05,0x81,0xc0,0x40,0xf3,0x90,0x60,0x41,0x70,0x2c,0x17,0x01,0xc0,0xc1,0x41,0x05,0x30,0x98,0x43,0x04,0x65,0x01,0x04,0x0c,0x32,0x38,0x91,0x18,0x04,0x14,0x10,0x38,0x18,0x1e,0xac,0x7c,0x41,0x11,0x88,0x5f,0xfc,0x17,0x55,0xa9,0x82,0x06,0x05,0xbc,0x85,0x02,0x08,0xc6,0x32,0x0f,0xe5,0x5e,0x1a,0x08,0x5c,0x06,0xaa,0x34,0x08,0x4a,0x06,0x02,0xab,0x75,0xf0,0x4f,0xc1,0x05,0x80,0x08,0x8e,0xab,0x7f,0xea,0x04,0x11,0x80,0x6a,0xa0,0x02,0x03,0x08,}; | ||||||
| const uint8_t *_I_DolphinFirstStart4_67x53[] = {_I_DolphinFirstStart4_67x53_0}; | const uint8_t *_I_DolphinFirstStart4_67x53[] = {_I_DolphinFirstStart4_67x53_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_PassportBottom_128x17_0[] = {0x01,0x00,0x5e,0x00,0x96,0x01,0x97,0xe1,0xff,0x00,0x2e,0x3e,0x68,0x0f,0x5a,0xc5,0x54,0x00,0xb9,0x50,0xfb,0x6a,0x35,0x40,0x05,0xcd,0x4e,0x03,0xfd,0x30,0x0f,0xf8,0x7f,0xa0,0x81,0xfe,0xf9,0x1b,0xfb,0xf3,0x01,0x47,0x66,0x02,0x1b,0x03,0x07,0xe7,0x02,0x0b,0x02,0x07,0xe5,0x82,0x0b,0xf2,0x1c,0xb0,0x01,0x67,0xf0,0x5f,0xd0,0x3f,0x23,0xf0,0x9b,0xc9,0xe5,0x80,0x03,0xd5,0xc0,0x00,0x86,0x01,0xf3,0xe6,0x1e,0x58,0x00,0x36,0xa8,0x06,0xac,0x04,0x30,0x6c,0x30,0xee,0x60,0x1f,0xe0,0x10,0xff,0x0d,0xfb,0x00,}; | const uint8_t _I_DolphinFirstStart6_58x54_0[] = {0x01,0x00,0x21,0x01,0x00,0x0f,0xf2,0x7e,0x06,0x4c,0x04,0x0f,0x81,0x03,0x03,0x9d,0x80,0x04,0x30,0xc0,0x39,0xc6,0x00,0x43,0x30,0x03,0x9c,0x10,0x04,0x34,0x00,0x39,0xc0,0x84,0x44,0x07,0x38,0x08,0x0d,0x41,0x68,0x13,0x70,0x39,0x08,0xd0,0x56,0xa1,0xd1,0x03,0x94,0x80,0x04,0x30,0x68,0x04,0x20,0x0e,0x84,0x91,0x03,0xa9,0x64,0x62,0x80,0x41,0x88,0x40,0x3f,0xc6,0xf1,0xfe,0x43,0xc0,0xe3,0x80,0xff,0xff,0xe0,0x3f,0xf8,0xf8,0x1c,0x78,0x18,0x1f,0xfe,0x0f,0x02,0x12,0x18,0x47,0x03,0x82,0x10,0x1e,0x08,0x1c,0xf5,0x60,0x71,0xd4,0x81,0xcf,0xab,0xff,0xd5,0xf5,0xc0,0xe3,0x04,0xe0,0x03,0x86,0xae,0x27,0x28,0x27,0x40,0x0e,0x21,0x91,0x03,0x96,0x80,0x0e,0x34,0x18,0x79,0x28,0x60,0x95,0x00,0x38,0xf8,0x20,0x27,0xd1,0x82,0x6a,0x03,0xc3,0x1c,0x39,0x94,0x0a,0xa1,0xc0,0xc5,0x2f,0xca,0x05,0x02,0x90,0x24,0x56,0x04,0x68,0x10,0x01,0x4f,0x80,0xea,0x5b,0x10,0x38,0x83,0x8d,0xa0,0x30,0x30,0x38,0xa3,0x09,0xc0,0x20,0xf2,0x03,0x90,0xc0,0x46,0xe2,0x91,0x2f,0x80,0xfc,0xe0,0x1e,0x08,0x02,0x54,0x47,0x62,0x27,0x2f,0xfb,0x14,0xdc,0xc6,0xb5,0x30,0x38,0x8b,0x05,0x6a,0x60,0x01,0x89,0x00,0xc8,0x16,0x50,0x29,0x10,0x1c,0x8d,0x25,0x05,0xa1,0x15,0xc9,0xfe,0x50,0xaa,0x08,0x10,0x67,0x01,0x22,0x8a,0xe0,0x60,0xe5,0xf2,0x07,0x8e,0xa8,0xb0,0x49,0xe1,0x00,0x0d,0xd4,0x68,0x5a,0x00,0x39,0x46,0x88,0x84,0x07,0x30,0xe8,0x81,0xc6,0x40,0x4d,0x11,0x91,0x17,0x06,0x40,0x65,0x11,0x51,0x01,0xc6,0x81,0x04,0x32,0x18,0x1e,0x92,0x64,0x00,0x11,0x68,0x81,0xd6,0xa0,0x07,0x16,0x22,0x6b,0x0a,0x82,0x07,0x3f,0x05,0x4d,0xdc,0x24,0x21,}; | ||||||
| const uint8_t *_I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0}; | const uint8_t *_I_DolphinFirstStart6_58x54[] = {_I_DolphinFirstStart6_58x54_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DoorLeft_70x55_0[] = {0x01,0x00,0x19,0x01,0x00,0x2c,0x32,0x01,0x03,0x04,0x2c,0x18,0x10,0xf0,0x40,0x47,0x82,0x06,0x81,0x03,0xff,0x80,0x08,0x1a,0x20,0x82,0x15,0x28,0x21,0x87,0x82,0x08,0x6f,0xc0,0xb1,0xe6,0x10,0x10,0x8b,0x46,0x20,0x43,0x55,0x8f,0x82,0x10,0x32,0x73,0x0a,0x09,0x89,0x6c,0x1e,0x09,0x00,0x18,0x60,0xf0,0x0c,0x84,0x93,0x82,0x03,0x18,0x0c,0x02,0x1d,0x00,0x90,0x52,0x70,0x50,0x1e,0x00,0x58,0x63,0x90,0x0a,0x06,0x4a,0x09,0x03,0xb0,0x02,0x06,0x70,0x62,0x49,0xf8,0x0c,0x66,0x3f,0xf0,0x41,0x63,0x04,0x43,0x00,0x99,0x60,0x00,0x85,0xc8,0x06,0x14,0xd0,0x80,0x3f,0xc8,0x0d,0xb8,0x10,0x70,0xf8,0x34,0x13,0x03,0x39,0x04,0x1c,0x42,0x19,0xf8,0xa0,0xc2,0x01,0x07,0xef,0x02,0x8c,0x80,0x10,0x9d,0x00,0x43,0xec,0x00,0xa3,0x10,0x04,0x25,0xce,0x19,0xfc,0x88,0x82,0x12,0x0c,0x35,0x10,0x42,0x4c,0xa1,0x90,0x3f,0xc0,0x21,0x22,0x39,0x82,0xc8,0x88,0xd2,0x11,0xf0,0x01,0x88,0xd5,0x18,0xe2,0x08,0x68,0x10,0x0c,0xa8,0x00,0x83,0x81,0xcc,0xd5,0xc3,0x80,0x84,0x82,0x0e,0xcc,0xc0,0x15,0x79,0x02,0x0b,0x98,0xf8,0x11,0x88,0x82,0x0f,0x31,0x19,0x02,0x08,0x2c,0x9f,0x6a,0x1d,0x20,0x41,0x31,0x4c,0x10,0x8d,0x73,0x04,0x23,0xa4,0xc4,0x6c,0xde,0x20,0x42,0xcc,0x01,0x07,0x07,0xff,0x80,0x06,0x3e,0x08,0x38,0x70,0x20,0xa1,0xe0,0x83,0x8e,0x01,0x0c,0xf0,0x73,0x80,0x43,0x70,0x05,0x08,0x00,0x2c,0x04,0xc4,0x46,0x53,0x09,0x98,0x24,0x80,0x65,0x80,0xb0,0xd9,0x84,0x65,0x32,0x06,0x17,0x0f,0x98,0x23,0x63,0xe1,0x88,0xc4,0x08,0x5f,0xc1,0x30,0x9d,0x84,0x4e,0x66,0x94,0x11,0x98,0x75,0x26,0x00,}; | const uint8_t _I_DolphinFirstStart1_59x53_0[] = {0x01,0x00,0x1e,0x01,0x00,0x0e,0x03,0xfe,0x07,0x5b,0x84,0x02,0x06,0x07,0x48,0x64,0x02,0x08,0x07,0x48,0x14,0x02,0x10,0x07,0x48,0x0c,0x03,0x21,0x3f,0x13,0x18,0x84,0xa8,0x00,0x75,0x8c,0x00,0xca,0x00,0x0b,0x28,0x20,0x1d,0xa0,0x59,0xe0,0x39,0x48,0x07,0x03,0x81,0xd5,0x81,0xd6,0x81,0x55,0x8c,0x01,0xc6,0x21,0x00,0x87,0x68,0x25,0x52,0x40,0x39,0x7c,0x21,0xf5,0x08,0xa8,0x1d,0x20,0xfa,0x88,0x70,0x1c,0xfd,0x10,0x3a,0xa4,0x1f,0x88,0x54,0x18,0x85,0x52,0x09,0xbe,0x81,0xc1,0x0c,0x83,0x10,0x94,0x40,0x39,0xf0,0x19,0x21,0xc8,0x62,0x12,0x0c,0x04,0x0e,0x0c,0x07,0x38,0x07,0x86,0x07,0x18,0x03,0x94,0xc2,0x01,0x9e,0x81,0xca,0x38,0x89,0x21,0x0f,0x0c,0x03,0xf9,0x27,0x13,0x94,0xd0,0xb6,0x70,0x20,0x38,0xda,0x80,0xe5,0x10,0x03,0x95,0x59,0x54,0x70,0x10,0x38,0xda,0xc0,0xc3,0xfe,0xc1,0xab,0x0b,0xaa,0x2a,0x1c,0x05,0x81,0x58,0x38,0x09,0xd0,0x5c,0xa3,0xe0,0x72,0x86,0xae,0x8d,0x40,0x34,0x06,0xa1,0xc0,0xc0,0xe3,0xc0,0x65,0x1c,0x19,0x58,0x29,0xe1,0x00,0x14,0x28,0x0a,0x26,0x61,0x00,0x15,0x58,0x0a,0x2e,0x34,0xd6,0x42,0x9e,0x6b,0x54,0x82,0x92,0x08,0x1e,0x63,0x41,0x1d,0x0a,0x88,0x60,0x1d,0x42,0x11,0x5c,0x01,0xe5,0x3c,0x03,0x97,0x30,0x0e,0x42,0x42,0x80,0xd0,0x82,0xe4,0x07,0x28,0x17,0x10,0x1e,0xb0,0x4a,0x20,0x3d,0x61,0x1a,0x80,0x79,0x0f,0x0a,0x21,0x70,0x07,0x90,0x1c,0xa4,0x1a,0x00,0x7a,0xd0,0x0e,0x42,0x34,0x20,0x10,0xe0,0x00,0xed,0x00,0xa1,0x82,0xc8,0xc6,0x74,0x40,0xd9,0x01,0xce,0x84,0x07,0x69,0x10,0xcc,0x80,0xe7,0x5c,0x03,0xb4,0xa8,0x96,0x40,0x73,0x8a,0x96,0xc8,0x0c,0x40,}; | ||||||
| const uint8_t *_I_DoorLeft_70x55[] = {_I_DoorLeft_70x55_0}; | const uint8_t *_I_DolphinFirstStart1_59x53[] = {_I_DolphinFirstStart1_59x53_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DoorRight_70x55_0[] = {0x01,0x00,0x16,0x01,0x81,0xcc,0x01,0x0f,0x60,0x04,0x3f,0x00,0x10,0xf8,0x08,0x0c,0x02,0x05,0x01,0x84,0x02,0x06,0x26,0x0a,0x10,0x8a,0xcc,0xe0,0x1d,0x68,0xe0,0x18,0xab,0xd0,0x0b,0x18,0x10,0x46,0xe6,0x16,0x1e,0x18,0x10,0x46,0xe4,0x28,0x2c,0x98,0x14,0x68,0x00,0x21,0x1d,0x10,0x8c,0x40,0x02,0x0e,0x10,0xa1,0x08,0xc8,0x40,0x42,0x62,0x11,0x94,0x03,0xfd,0xff,0x00,0x0c,0xff,0x0c,0x08,0x28,0x60,0xe4,0xc0,0x85,0x00,0x83,0x00,0x87,0xf1,0x00,0x8c,0x02,0x0b,0x07,0x24,0x84,0xff,0x04,0xc7,0x80,0xa0,0xe4,0xa0,0x81,0x41,0x04,0x17,0x02,0x41,0x49,0x81,0x0e,0x10,0xb2,0xa0,0x82,0x0e,0x9f,0xfc,0x0a,0x62,0xf2,0xc0,0x03,0x92,0xf0,0x08,0x2d,0x78,0x20,0xff,0x02,0x01,0x08,0xae,0x60,0x64,0x38,0x0d,0xb0,0x8d,0x08,0x82,0x11,0x58,0xc4,0x13,0xc0,0x35,0x68,0x62,0x68,0x81,0x09,0x08,0x84,0x40,0x81,0x0d,0x18,0x69,0x10,0x47,0x44,0x66,0x5f,0x21,0xa9,0x29,0x94,0x10,0x2f,0x23,0x53,0x14,0x60,0x42,0x3c,0x08,0xfc,0x02,0x2c,0x62,0x23,0x58,0xd0,0x22,0x00,0x83,0x3e,0x98,0x44,0x43,0x46,0x22,0x30,0x89,0xce,0x01,0x0f,0x70,0x04,0x3f,0x81,0x8a,0x3c,0x21,0xaa,0x70,0x1a,0xe3,0x44,0x1a,0xa6,0x01,0xd2,0x38,0x90,0x8a,0x40,0x20,0xe5,0x96,0x80,0x43,0x81,0x06,0x6b,0x28,0x07,0xf3,0xfe,0x00,0x19,0xf9,0x34,0xc1,0x08,0x8f,0x20,0xf1,0x3e,0x16,0x00,0xa8,0x19,0x00,0x10,0x76,0x03,0xe2,0x3e,0x90,0x45,0x38,0x01,0x42,0x05,0x88,0x44,0x67,0x15,0x70,0x41,0x38,0x04,0x10,0x24,0x03,0x00,0x10,0x20,0x4a,0x46,0xe9,0x46,0xe1,0x04,0x50,0x66,0x40,0x85,0x19,0x98,0x00,0xc0,}; | const uint8_t _I_ArrowDownFilled_14x15_0[] = {0x00,0xF8,0x07,0x08,0x04,0xE8,0x05,0x68,0x05,0xA8,0x05,0x68,0x05,0xA8,0x05,0x6F,0x3D,0xA1,0x21,0xFA,0x17,0xF4,0x0B,0xE8,0x05,0xD0,0x02,0x20,0x01,0xC0,0x00,}; | ||||||
| const uint8_t *_I_DoorRight_70x55[] = {_I_DoorRight_70x55_0}; | const uint8_t *_I_ArrowDownFilled_14x15[] = {_I_ArrowDownFilled_14x15_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_ArrowUpEmpty_14x15_0[] = {0x01,0x00,0x18,0x00,0xe0,0x40,0x24,0x10,0x18,0x84,0x0a,0x11,0x04,0x82,0x42,0x20,0x51,0x08,0x0c,0x82,0x1f,0x3c,0x04,0x88,0x06,0x7f,0x10,0x70,}; | ||||||
|  | const uint8_t *_I_ArrowUpEmpty_14x15[] = {_I_ArrowUpEmpty_14x15_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_ArrowUpFilled_14x15_0[] = {0x00,0xC0,0x00,0x20,0x01,0xD0,0x02,0xE8,0x05,0xF4,0x0B,0xFA,0x17,0x61,0x21,0xAF,0x3D,0x68,0x05,0xA8,0x05,0x68,0x05,0xA8,0x05,0xE8,0x05,0x08,0x04,0xF8,0x07,}; | ||||||
|  | const uint8_t *_I_ArrowUpFilled_14x15[] = {_I_ArrowUpFilled_14x15_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_ArrowDownEmpty_14x15_0[] = {0x01,0x00,0x17,0x00,0xfc,0x41,0xe1,0x10,0x40,0x0c,0xc3,0xe7,0x90,0x19,0x04,0x0a,0x20,0x08,0x10,0x48,0xc4,0x20,0x52,0x08,0x0f,0x02,0x00,}; | ||||||
|  | const uint8_t *_I_ArrowDownEmpty_14x15[] = {_I_ArrowDownEmpty_14x15_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DoorLocked_10x56_0[] = {0x01,0x00,0x4e,0x00,0x86,0x40,0x25,0xb0,0x0b,0x6c,0x03,0x9b,0x00,0xc6,0xc0,0x65,0x90,0x10,0x3a,0xc3,0x20,0x31,0xc8,0x04,0xe2,0x01,0x70,0x80,0x78,0x20,0x1c,0x48,0x07,0x22,0x01,0xd0,0x00,0xf0,0x44,0x68,0x90,0x09,0x04,0x02,0x21,0x00,0x84,0x40,0x25,0x80,0x12,0x1e,0x88,0x14,0xc0,0x2e,0x0d,0x11,0xca,0xf8,0x60,0x1c,0x38,0x07,0x1a,0x05,0xcc,0x80,0x72,0x60,0x5c,0x38,0x10,0x1c,0xf9,0x10,0x2e,0x00,0x05,0x60,0x00,0x11,}; | const uint8_t _I_DoorLocked_10x56_0[] = {0x01,0x00,0x4e,0x00,0x86,0x40,0x25,0xb0,0x0b,0x6c,0x03,0x9b,0x00,0xc6,0xc0,0x65,0x90,0x10,0x3a,0xc3,0x20,0x31,0xc8,0x04,0xe2,0x01,0x70,0x80,0x78,0x20,0x1c,0x48,0x07,0x22,0x01,0xd0,0x00,0xf0,0x44,0x68,0x90,0x09,0x04,0x02,0x21,0x00,0x84,0x40,0x25,0x80,0x12,0x1e,0x88,0x14,0xc0,0x2e,0x0d,0x11,0xca,0xf8,0x60,0x1c,0x38,0x07,0x1a,0x05,0xcc,0x80,0x72,0x60,0x5c,0x38,0x10,0x1c,0xf9,0x10,0x2e,0x00,0x05,0x60,0x00,0x11,}; | ||||||
| const uint8_t *_I_DoorLocked_10x56[] = {_I_DoorLocked_10x56_0}; | const uint8_t *_I_DoorLocked_10x56[] = {_I_DoorLocked_10x56_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_PassportBottom_128x17_0[] = {0x01,0x00,0x5e,0x00,0x96,0x01,0x97,0xe1,0xff,0x00,0x2e,0x3e,0x68,0x0f,0x5a,0xc5,0x54,0x00,0xb9,0x50,0xfb,0x6a,0x35,0x40,0x05,0xcd,0x4e,0x03,0xfd,0x30,0x0f,0xf8,0x7f,0xa0,0x81,0xfe,0xf9,0x1b,0xfb,0xf3,0x01,0x47,0x66,0x02,0x1b,0x03,0x07,0xe7,0x02,0x0b,0x02,0x07,0xe5,0x82,0x0b,0xf2,0x1c,0xb0,0x01,0x67,0xf0,0x5f,0xd0,0x3f,0x23,0xf0,0x9b,0xc9,0xe5,0x80,0x03,0xd5,0xc0,0x00,0x86,0x01,0xf3,0xe6,0x1e,0x58,0x00,0x36,0xa8,0x06,0xac,0x04,0x30,0x6c,0x30,0xee,0x60,0x1f,0xe0,0x10,0xff,0x0d,0xfb,0x00,}; | ||||||
|  | const uint8_t *_I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_PassportLeft_6x47_0[] = {0x01,0x00,0x1c,0x00,0x9e,0x40,0xa3,0x32,0x59,0x2c,0x66,0x03,0x01,0x82,0xc2,0x62,0x32,0x50,0x16,0xc8,0x60,0x30,0x28,0x24,0x32,0x39,0x3c,0x9e,0x4d,0x25,0x80,0x1a,}; | const uint8_t _I_PassportLeft_6x47_0[] = {0x01,0x00,0x1c,0x00,0x9e,0x40,0xa3,0x32,0x59,0x2c,0x66,0x03,0x01,0x82,0xc2,0x62,0x32,0x50,0x16,0xc8,0x60,0x30,0x28,0x24,0x32,0x39,0x3c,0x9e,0x4d,0x25,0x80,0x1a,}; | ||||||
| const uint8_t *_I_PassportLeft_6x47[] = {_I_PassportLeft_6x47_0}; | const uint8_t *_I_PassportLeft_6x47[] = {_I_PassportLeft_6x47_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_DoorLeft_70x55_0[] = {0x01,0x00,0x19,0x01,0x00,0x2c,0x32,0x01,0x03,0x04,0x2c,0x18,0x10,0xf0,0x40,0x47,0x82,0x06,0x81,0x03,0xff,0x80,0x08,0x1a,0x20,0x82,0x15,0x28,0x21,0x87,0x82,0x08,0x6f,0xc0,0xb1,0xe6,0x10,0x10,0x8b,0x46,0x20,0x43,0x55,0x8f,0x82,0x10,0x32,0x73,0x0a,0x09,0x89,0x6c,0x1e,0x09,0x00,0x18,0x60,0xf0,0x0c,0x84,0x93,0x82,0x03,0x18,0x0c,0x02,0x1d,0x00,0x90,0x52,0x70,0x50,0x1e,0x00,0x58,0x63,0x90,0x0a,0x06,0x4a,0x09,0x03,0xb0,0x02,0x06,0x70,0x62,0x49,0xf8,0x0c,0x66,0x3f,0xf0,0x41,0x63,0x04,0x43,0x00,0x99,0x60,0x00,0x85,0xc8,0x06,0x14,0xd0,0x80,0x3f,0xc8,0x0d,0xb8,0x10,0x70,0xf8,0x34,0x13,0x03,0x39,0x04,0x1c,0x42,0x19,0xf8,0xa0,0xc2,0x01,0x07,0xef,0x02,0x8c,0x80,0x10,0x9d,0x00,0x43,0xec,0x00,0xa3,0x10,0x04,0x25,0xce,0x19,0xfc,0x88,0x82,0x12,0x0c,0x35,0x10,0x42,0x4c,0xa1,0x90,0x3f,0xc0,0x21,0x22,0x39,0x82,0xc8,0x88,0xd2,0x11,0xf0,0x01,0x88,0xd5,0x18,0xe2,0x08,0x68,0x10,0x0c,0xa8,0x00,0x83,0x81,0xcc,0xd5,0xc3,0x80,0x84,0x82,0x0e,0xcc,0xc0,0x15,0x79,0x02,0x0b,0x98,0xf8,0x11,0x88,0x82,0x0f,0x31,0x19,0x02,0x08,0x2c,0x9f,0x6a,0x1d,0x20,0x41,0x31,0x4c,0x10,0x8d,0x73,0x04,0x23,0xa4,0xc4,0x6c,0xde,0x20,0x42,0xcc,0x01,0x07,0x07,0xff,0x80,0x06,0x3e,0x08,0x38,0x70,0x20,0xa1,0xe0,0x83,0x8e,0x01,0x0c,0xf0,0x73,0x80,0x43,0x70,0x05,0x08,0x00,0x2c,0x04,0xc4,0x46,0x53,0x09,0x98,0x24,0x80,0x65,0x80,0xb0,0xd9,0x84,0x65,0x32,0x06,0x17,0x0f,0x98,0x23,0x63,0xe1,0x88,0xc4,0x08,0x5f,0xc1,0x30,0x9d,0x84,0x4e,0x66,0x94,0x11,0x98,0x75,0x26,0x00,}; | ||||||
|  | const uint8_t *_I_DoorLeft_70x55[] = {_I_DoorLeft_70x55_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_LockPopup_100x49_0[] = {0x01,0x00,0x37,0x01,0xfc,0x7f,0xc0,0x13,0x01,0xfe,0x03,0x2a,0x07,0x06,0x12,0xd4,0x1a,0x06,0x0c,0xa8,0x60,0x33,0xe0,0x12,0x08,0x40,0x32,0x3f,0xd0,0x70,0x64,0xe0,0x20,0x31,0x8a,0x00,0x32,0x2c,0x10,0x0b,0x00,0x32,0x62,0x10,0x0c,0x06,0x00,0x19,0x00,0x82,0xc0,0x83,0x22,0x08,0x04,0x18,0x11,0x6a,0x01,0x25,0x02,0x84,0x83,0x1e,0x02,0x04,0x10,0xe1,0x03,0x1e,0x3c,0x0c,0x9c,0x1c,0x02,0x43,0x00,0x84,0x4f,0xc1,0x8f,0x80,0xaf,0x40,0x39,0x14,0x00,0x63,0xd0,0x36,0xf0,0x09,0xc6,0x00,0x18,0xd4,0x3a,0x06,0x9c,0x08,0x20,0xc9,0xdf,0xc0,0x20,0x7f,0x00,0x65,0x40,0x3f,0x80,0xc7,0xd0,0x10,0x06,0x01,0x7f,0x06,0x34,0x8e,0xa1,0x3d,0x80,0x70,0x0b,0x4f,0x23,0xd0,0x50,0xa0,0x1f,0x08,0x78,0x66,0x11,0xe3,0xfc,0x83,0x83,0x1e,0x40,0x0c,0x1f,0xfb,0xec,0x41,0x8c,0x03,0x1e,0x07,0x00,0x4d,0x10,0x0a,0x04,0xc0,0x9b,0x30,0x0c,0x1f,0xff,0xff,0x9f,0x06,0x3e,0x01,0x80,0x48,0xe7,0x99,0x83,0x0d,0x6a,0xe0,0xc4,0x90,0x03,0x1a,0x76,0x0c,0x38,0xe0,0x34,0x45,0x25,0x02,0x06,0x0d,0xe0,0x18,0x3c,0x08,0x19,0x40,0x78,0x00,0xc1,0x81,0xc3,0x27,0xf8,0x48,0x26,0x82,0x7d,0x00,0xfc,0x40,0xfc,0x10,0xfc,0x04,0xfc,0x18,0x30,0x28,0x7d,0x02,0x3f,0x00,0x98,0x41,0x38,0x31,0x08,0x25,0x0e,0x19,0x1f,0x81,0x42,0x70,0x11,0xa2,0x08,0xe2,0x30,0x72,0x08,0x76,0x0a,0x19,0x0f,0x85,0x42,0x60,0x11,0x51,0x78,0xc2,0x20,0x32,0x08,0x26,0x00,0x18,0x91,0x00,0x60,0x91,0x44,0x08,0x34,0x08,0x64,0x1f,0xe4,0x07,0x3f,0x84,0x0d,0x58,0x44,0x01,0x83,0xdc,0x60,0x43,0xe1,0x39,0xa9,0xd0,0x60,0x70,0x16,0x78,0xca,0x01,0x8f,0x83,0x3d,0x10,0x33,0x29,0x00,0xc7,0xa1,0x83,0x3f,0x10,0x0c,0x79,0x30,0x32,0xa0,0xdf,0xc7,0xa0,0x80,0x22,0x07,0xf8,0x06,0x54,0x04,}; | const uint8_t _I_LockPopup_100x49_0[] = {0x01,0x00,0x37,0x01,0xfc,0x7f,0xc0,0x13,0x01,0xfe,0x03,0x2a,0x07,0x06,0x12,0xd4,0x1a,0x06,0x0c,0xa8,0x60,0x33,0xe0,0x12,0x08,0x40,0x32,0x3f,0xd0,0x70,0x64,0xe0,0x20,0x31,0x8a,0x00,0x32,0x2c,0x10,0x0b,0x00,0x32,0x62,0x10,0x0c,0x06,0x00,0x19,0x00,0x82,0xc0,0x83,0x22,0x08,0x04,0x18,0x11,0x6a,0x01,0x25,0x02,0x84,0x83,0x1e,0x02,0x04,0x10,0xe1,0x03,0x1e,0x3c,0x0c,0x9c,0x1c,0x02,0x43,0x00,0x84,0x4f,0xc1,0x8f,0x80,0xaf,0x40,0x39,0x14,0x00,0x63,0xd0,0x36,0xf0,0x09,0xc6,0x00,0x18,0xd4,0x3a,0x06,0x9c,0x08,0x20,0xc9,0xdf,0xc0,0x20,0x7f,0x00,0x65,0x40,0x3f,0x80,0xc7,0xd0,0x10,0x06,0x01,0x7f,0x06,0x34,0x8e,0xa1,0x3d,0x80,0x70,0x0b,0x4f,0x23,0xd0,0x50,0xa0,0x1f,0x08,0x78,0x66,0x11,0xe3,0xfc,0x83,0x83,0x1e,0x40,0x0c,0x1f,0xfb,0xec,0x41,0x8c,0x03,0x1e,0x07,0x00,0x4d,0x10,0x0a,0x04,0xc0,0x9b,0x30,0x0c,0x1f,0xff,0xff,0x9f,0x06,0x3e,0x01,0x80,0x48,0xe7,0x99,0x83,0x0d,0x6a,0xe0,0xc4,0x90,0x03,0x1a,0x76,0x0c,0x38,0xe0,0x34,0x45,0x25,0x02,0x06,0x0d,0xe0,0x18,0x3c,0x08,0x19,0x40,0x78,0x00,0xc1,0x81,0xc3,0x27,0xf8,0x48,0x26,0x82,0x7d,0x00,0xfc,0x40,0xfc,0x10,0xfc,0x04,0xfc,0x18,0x30,0x28,0x7d,0x02,0x3f,0x00,0x98,0x41,0x38,0x31,0x08,0x25,0x0e,0x19,0x1f,0x81,0x42,0x70,0x11,0xa2,0x08,0xe2,0x30,0x72,0x08,0x76,0x0a,0x19,0x0f,0x85,0x42,0x60,0x11,0x51,0x78,0xc2,0x20,0x32,0x08,0x26,0x00,0x18,0x91,0x00,0x60,0x91,0x44,0x08,0x34,0x08,0x64,0x1f,0xe4,0x07,0x3f,0x84,0x0d,0x58,0x44,0x01,0x83,0xdc,0x60,0x43,0xe1,0x39,0xa9,0xd0,0x60,0x70,0x16,0x78,0xca,0x01,0x8f,0x83,0x3d,0x10,0x33,0x29,0x00,0xc7,0xa1,0x83,0x3f,0x10,0x0c,0x79,0x30,0x32,0xa0,0xdf,0xc7,0xa0,0x80,0x22,0x07,0xf8,0x06,0x54,0x04,}; | ||||||
| const uint8_t *_I_LockPopup_100x49[] = {_I_LockPopup_100x49_0}; | const uint8_t *_I_LockPopup_100x49[] = {_I_LockPopup_100x49_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Down_hvr_25x27_0[] = {0x01,0x00,0x3a,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3f,0x01,0x9c,0x3e,0x01,0xe0,0x01,0xa4,0x7e,0x01,0xf0,0x80,0x8b,0x47,0xf1,0x01,0x16,0x8f,0xf0,0x2e,0x23,0x11,0x01,0x88,0x04,0xf0,0x60,0x32,0xe3,0x80,0xcb,0xde,0x37,0xf0,0x1a,0x95,0xcc,0xbe,0x66,0x73,}; | const uint8_t _I_DoorRight_70x55_0[] = {0x01,0x00,0x16,0x01,0x81,0xcc,0x01,0x0f,0x60,0x04,0x3f,0x00,0x10,0xf8,0x08,0x0c,0x02,0x05,0x01,0x84,0x02,0x06,0x26,0x0a,0x10,0x8a,0xcc,0xe0,0x1d,0x68,0xe0,0x18,0xab,0xd0,0x0b,0x18,0x10,0x46,0xe6,0x16,0x1e,0x18,0x10,0x46,0xe4,0x28,0x2c,0x98,0x14,0x68,0x00,0x21,0x1d,0x10,0x8c,0x40,0x02,0x0e,0x10,0xa1,0x08,0xc8,0x40,0x42,0x62,0x11,0x94,0x03,0xfd,0xff,0x00,0x0c,0xff,0x0c,0x08,0x28,0x60,0xe4,0xc0,0x85,0x00,0x83,0x00,0x87,0xf1,0x00,0x8c,0x02,0x0b,0x07,0x24,0x84,0xff,0x04,0xc7,0x80,0xa0,0xe4,0xa0,0x81,0x41,0x04,0x17,0x02,0x41,0x49,0x81,0x0e,0x10,0xb2,0xa0,0x82,0x0e,0x9f,0xfc,0x0a,0x62,0xf2,0xc0,0x03,0x92,0xf0,0x08,0x2d,0x78,0x20,0xff,0x02,0x01,0x08,0xae,0x60,0x64,0x38,0x0d,0xb0,0x8d,0x08,0x82,0x11,0x58,0xc4,0x13,0xc0,0x35,0x68,0x62,0x68,0x81,0x09,0x08,0x84,0x40,0x81,0x0d,0x18,0x69,0x10,0x47,0x44,0x66,0x5f,0x21,0xa9,0x29,0x94,0x10,0x2f,0x23,0x53,0x14,0x60,0x42,0x3c,0x08,0xfc,0x02,0x2c,0x62,0x23,0x58,0xd0,0x22,0x00,0x83,0x3e,0x98,0x44,0x43,0x46,0x22,0x30,0x89,0xce,0x01,0x0f,0x70,0x04,0x3f,0x81,0x8a,0x3c,0x21,0xaa,0x70,0x1a,0xe3,0x44,0x1a,0xa6,0x01,0xd2,0x38,0x90,0x8a,0x40,0x20,0xe5,0x96,0x80,0x43,0x81,0x06,0x6b,0x28,0x07,0xf3,0xfe,0x00,0x19,0xf9,0x34,0xc1,0x08,0x8f,0x20,0xf1,0x3e,0x16,0x00,0xa8,0x19,0x00,0x10,0x76,0x03,0xe2,0x3e,0x90,0x45,0x38,0x01,0x42,0x05,0x88,0x44,0x67,0x15,0x70,0x41,0x38,0x04,0x10,0x24,0x03,0x00,0x10,0x20,0x4a,0x46,0xe9,0x46,0xe1,0x04,0x50,0x66,0x40,0x85,0x19,0x98,0x00,0xc0,}; | ||||||
| const uint8_t *_I_Down_hvr_25x27[] = {_I_Down_hvr_25x27_0}; | const uint8_t *_I_DoorRight_70x55[] = {_I_DoorRight_70x55_0}; | ||||||
| 
 |  | ||||||
| const uint8_t _I_Vol_down_hvr_25x27_0[] = {0x01,0x00,0x23,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3f,0x01,0xf8,0xb4,0x7f,0x00,0x34,0x0b,0xf8,0x0f,0xc0,0x6e,0x57,0x32,0xf9,0x99,0xcc,}; |  | ||||||
| const uint8_t *_I_Vol_down_hvr_25x27[] = {_I_Vol_down_hvr_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Down_25x27_0[] = {0x01,0x00,0x46,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3f,0x01,0x9f,0xc7,0xff,0x1f,0x01,0xa7,0x87,0xff,0x0f,0x80,0xf0,0x7f,0xf0,0x78,0x0e,0x07,0xff,0x03,0x0b,0x8f,0xfc,0x04,0x30,0x1f,0xf0,0x7c,0xaf,0x80,0x32,0x9c,0x00,0xca,0x20,0x37,0xf0,0x18,0xc0,0xca,0x63,0x01,0x83,0x40,0x38,0x10,0x0f,0xe7,0xfe,0xfe,0x67,0x40,}; |  | ||||||
| const uint8_t *_I_Down_25x27[] = {_I_Down_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Fill_marker_7x7_0[] = {0x00,0x1C,0x32,0x6F,0x5F,0x7F,0x3E,0x1C,}; |  | ||||||
| const uint8_t *_I_Fill_marker_7x7[] = {_I_Fill_marker_7x7_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Vol_down_25x27_0[] = {0x01,0x00,0x2c,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3f,0x01,0xff,0x07,0xff,0x07,0x01,0xa0,0x5f,0xc0,0x7e,0x03,0x38,0x19,0x4c,0x60,0x30,0x68,0x07,0x02,0x01,0xfc,0xff,0xdf,0xcc,0xe8,}; |  | ||||||
| const uint8_t *_I_Vol_down_25x27[] = {_I_Vol_down_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Vol_up_25x27_0[] = {0x01,0x00,0x2f,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x38,0x88,0x00,0xfc,0x06,0xbc,0x1f,0xfc,0x1c,0x06,0x81,0x7f,0x01,0xc1,0x0e,0xa0,0x65,0x31,0x80,0xc1,0xa0,0x1c,0x08,0x07,0xf3,0xff,0x7f,0x33,0xa0,}; |  | ||||||
| const uint8_t *_I_Vol_up_25x27[] = {_I_Vol_up_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Up_hvr_25x27_0[] = {0x01,0x00,0x39,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3c,0xf7,0x80,0xcb,0x8e,0x03,0x2c,0x18,0x0c,0x80,0x26,0x25,0x18,0x08,0xa4,0x7f,0x90,0x11,0x88,0xfe,0x20,0x31,0xf8,0x07,0xc2,0x03,0x0f,0x80,0x78,0x00,0x68,0x37,0xf0,0x1d,0x95,0xcc,0xbe,0x66,0x73,}; |  | ||||||
| const uint8_t *_I_Up_hvr_25x27[] = {_I_Up_hvr_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Vol_up_hvr_25x27_0[] = {0x01,0x00,0x28,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x38,0xf7,0x80,0xfc,0x06,0xa2,0xd1,0xfc,0x00,0xd0,0x2f,0xe0,0x38,0x21,0xd8,0x0c,0x8a,0xe6,0x5f,0x33,0x39,0x80,}; |  | ||||||
| const uint8_t *_I_Vol_up_hvr_25x27[] = {_I_Vol_up_hvr_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_IrdaLearnShort_128x31_0[] = {0x01,0x00,0x10,0x01,0x00,0x47,0xfb,0xfe,0x00,0x38,0x38,0x3e,0x20,0x20,0x54,0x84,0x03,0x9f,0xc0,0x06,0x58,0x80,0x3d,0xf2,0x00,0x65,0x90,0x03,0xde,0x90,0x06,0x5a,0x07,0xc0,0x8a,0x70,0x1a,0x04,0x02,0x51,0x80,0x03,0x94,0x02,0x3f,0x40,0x20,0x24,0x0b,0x01,0x00,0x92,0x70,0x35,0x40,0x01,0xe0,0xdf,0xf0,0x10,0x40,0x71,0x58,0x20,0x90,0x88,0x0c,0x4a,0x81,0x55,0x00,0x0f,0x87,0xf7,0x00,0x82,0x43,0x36,0x16,0xdc,0x9c,0x12,0x21,0x01,0x85,0x70,0x3f,0xc1,0xf1,0xf8,0xfc,0x60,0x20,0xf5,0x90,0x40,0xa1,0x34,0x08,0x18,0x7c,0x7e,0x24,0x91,0x07,0x8c,0xc0,0x5e,0x52,0x28,0x14,0x17,0x81,0x01,0x0f,0x8f,0xe7,0xe3,0x03,0x1f,0x8e,0x02,0xdb,0x03,0x8e,0x49,0x20,0x50,0x2e,0x04,0x72,0xbd,0x55,0xdc,0xeb,0xa0,0x7c,0x4f,0x68,0xbc,0x60,0x72,0x40,0x79,0x50,0x23,0x9a,0x6d,0x56,0x66,0x5c,0x0f,0x21,0x78,0x9b,0x04,0x1e,0x28,0x21,0x8e,0x5c,0x43,0xe6,0x2f,0x10,0xf9,0x0b,0xc7,0x04,0x99,0x18,0x06,0xe0,0x7e,0x56,0x32,0x78,0x8f,0xc4,0x08,0x32,0x20,0x79,0x48,0x2b,0x85,0xf2,0xf8,0x83,0xc4,0x5c,0x3f,0x03,0x78,0xd0,0x81,0xe3,0xc0,0xdf,0x9f,0xcb,0xf3,0x04,0xc6,0x7d,0xfb,0xdf,0x34,0x78,0xd0,0x45,0xe5,0x7e,0x4f,0x97,0xe2,0x09,0x80,0x07,0x88,0xbc,0x61,0x00,0xf3,0xd8,0x2f,0xcb,0xe0,0xcf,0x60,0x68,0xd0,0x30,0x15,0xfa,0xac,0x36,0x3f,0x60,0x77,0xb3,0x80,0x5d,0xe6,0x4b,0x20,0x03,0x03,0xc4,0x01,0xd0,0x10,0x7f,0x40,0x81,0xfc,0xa7,0x10,0x06,0x99,0xd0,0x01,0x51,0x00,0x7f,0x48,0x01,0xfd,0xc0,0x43,0x98,0x00,0x8e,0xfe,0x00,0xf0,}; |  | ||||||
| const uint8_t *_I_IrdaLearnShort_128x31[] = {_I_IrdaLearnShort_128x31_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_IrdaSend_128x64_0[] = {0x01,0x00,0xe2,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xfe,0x04,0x0e,0x05,0x82,0xd7,0x81,0xca,0x21,0x08,0x01,0x8c,0x10,0x0e,0x54,0x00,0x20,0xe0,0xa4,0x00,0xfb,0xb2,0x4e,0xb0,0xfa,0x0e,0x74,0xc7,0x0f,0x3b,0xce,0x4e,0xec,0xf0,0xe1,0x79,0xe4,0xe9,0x58,0x2d,0x3d,0x4a,0x95,0x41,0x89,0x52,0x31,0x59,0x40,0xfa,0x64,0x01,0xe3,0xa0,0xa9,0x5e,0x81,0xe7,0xf4,0x07,0xcc,0x28,0x1e,0x71,0x40,0x7a,0x58,0x01,0xe4,0x3f,0x1c,0x0c,0x4f,0x11,0x0b,0xb3,0x83,0xcc,0x00,0x94,0x20,0x2a,0x03,0xa0,0x1e,0xd0,0x34,0xdf,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x4c,0xf0,0x17,0x4c,0x81,0xa0,0x18,0x18,0x1f,0x39,0x90,0x6c,0x60,0x27,0x70,0xe9,0x3f,0x67,0x03,0x3c,0x80,0x83,0xde,0x81,0x4a,0x84,0xca,0x68,0xb8,0x2b,0xf0,0x3f,0x29,0x20,0xfe,0xa8,0xe0,0x85,0xf3,0x80,0xa5,0xc3,0xb8,0xf4,0xd8,0x11,0x3e,0x40,0x04,0x1b,0x23,0x7d,0x83,0xcd,0x1f,0x60,0x0f,0x00,0x78,0x03,0x7f,0x9f,0xf0,0x01,0xc0,0xc1,0xf1,0x04,0x02,0xa4,0x08,0x1f,0xe0,0xff,0x01,0x0f,0x00,0x70,0x9f,0xfe,0x20,0x10,0xe7,0xe0,0xf2,0x90,0x07,0xd7,0x89,0xdf,0xaa,0xd5,0x7b,0xa0,0xf3,0x8e,0x03,0xdb,0x54,0x00,0x29,0x70,0x3c,0xa2,0x40,0xf6,0xbf,0x87,0xc7,0xea,0x1f,0x12,0x30,0xc2,0x41,0xed,0xab,0x95,0x07,0xc6,0x75,0x02,0x10,0x0c,0x17,0xe0,0x47,0x18,0xff,0x82,0x07,0xc4,0xaf,0x8f,0xd2,0x43,0x80,0x82,0x56,0x01,0x03,0x35,0xfc,0x43,0xc7,0xe3,0x8a,0xc4,0x6a,0xa5,0x50,0x28,0x8d,0x02,0x05,0xa8,0x13,0x8c,0xaa,0xf9,0x1f,0xe2,0x5d,0xc2,0xc3,0x75,0x9f,0xe0,0xa1,0x14,0x08,0x0f,0x60,0x52,0x33,0x59,0xf4,0xf8,0x7e,0x32,0x2d,0x10,0xfc,0x70,0x58,0x89,0x04,0x06,0xd1,0xa0,0x0f,0x8f,0xfa,0x7e,0x3f,0x3e,0xa8,0x7c,0x69,0x1a,0x08,0x04,0xe2,0x80,0x1f,0x19,0xfd,0xf8,0xfe,0x92,0xa0,0x78,0xd0,0x20,0x19,0x8e,0x19,0xa8,0x7a,0xf7,0x51,0xfb,0x03,0xcb,0x11,0xc3,0xaa,0x4d,0x7a,0x76,0x51,0xf8,0x87,0xc8,0x7e,0x34,0x85,0xf0,0xe2,0x24,0x7a,0xe0,0xf9,0xaf,0xd0,0x9e,0x31,0x08,0x04,0x22,0x01,0x57,0x1f,0x9e,0xb8,0x7e,0x90,0x80,0x79,0x61,0x07,0xe2,0x5f,0x2f,0xfd,0xde,0xeb,0xf7,0x4f,0x8c,0x44,0x3a,0x30,0x8f,0xc0,0x7c,0x4f,0xe6,0x1f,0x29,0xda,0xbc,0x41,0xe5,0xc0,0xd7,0xa7,0xcd,0x8a,0x3d,0xdf,0xe8,0x7c,0x60,0x40,0xf2,0x80,0x55,0x97,0xe7,0xee,0x0f,0x0f,0xa9,0xfe,0x30,0x40,0x79,0x7c,0x05,0x43,0xe1,0x6f,0x88,0x7c,0x40,0x02,0x1f,0x18,0x01,0x3c,0x5d,0xe5,0x9f,0x80,0xbf,0xc4,0x1f,0x00,0x05,0x82,0x01,0x50,0x1e,0x28,0xf1,0x00,0x2c,0x90,0x1e,0xca,0xf1,0x00,0x2d,0x52,0x1e,0x0f,0x5c,0x00,0x7d,0xc1,0xed,0x00,0x25,0x08,0xff,0x00,0x46,0x00,0x3f,0xe1,0x7c,0xff,0xf0,0x30,0xc3,0xc0,0x3c,0x02,0x73,0xbc,0x00,0xcb,0xf0,0x18,0x4f,0xf8,0x3e,0x00,0x0c,0x0f,0xf0,}; |  | ||||||
| const uint8_t *_I_IrdaSend_128x64[] = {_I_IrdaSend_128x64_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinReadingSuccess_59x63_0[] = {0x01,0x00,0x19,0x01,0x00,0x1d,0x00,0x0f,0xd2,0x00,0x21,0xe0,0x3f,0xf0,0xf9,0x00,0x40,0xee,0x00,0x11,0x88,0x04,0x0e,0x18,0x11,0x18,0x8c,0x40,0x0e,0x50,0x30,0x10,0xc0,0xa1,0x01,0xe2,0x05,0x14,0x12,0x08,0x33,0x58,0x44,0x08,0x66,0xa1,0xe3,0x01,0x9c,0x83,0x00,0x24,0x11,0x11,0x06,0xc4,0x76,0x20,0x75,0x15,0x99,0x48,0xc0,0xe9,0x0f,0x03,0x95,0xfc,0x86,0x3c,0x09,0x80,0x1c,0x7c,0x00,0x91,0x81,0x48,0x2f,0xc1,0x41,0x8c,0xc0,0x20,0x30,0x1c,0x87,0xfc,0x0e,0x30,0x70,0x70,0x81,0xc7,0xe6,0x07,0x18,0x08,0x1c,0xb9,0x1e,0x38,0x0f,0x02,0x01,0xf0,0x03,0xa0,0xa4,0x7f,0x90,0x30,0x38,0xff,0xe0,0x28,0x21,0xff,0x06,0x44,0x0e,0x46,0xe1,0x01,0x8c,0x03,0x34,0x2f,0x25,0x18,0x80,0xc7,0x2a,0x03,0x2e,0x01,0x3c,0x70,0x12,0xa2,0x39,0x78,0x27,0xe0,0x31,0xea,0x82,0xc4,0x6c,0x31,0xf0,0x78,0xea,0xb0,0x22,0x31,0xfc,0x1a,0xc6,0x01,0x55,0x25,0x88,0xf8,0x4b,0x02,0x1f,0x13,0xe1,0x7f,0x97,0x85,0x15,0x03,0x90,0xf8,0xa0,0x10,0xa1,0xb1,0x0e,0x88,0x00,0x7f,0x0f,0xc0,0x7c,0x57,0x27,0x3c,0xb0,0x7f,0x5f,0xa9,0x1f,0xc0,0x6a,0xc5,0x05,0xc0,0xf0,0x11,0x46,0xac,0x18,0x3f,0xf9,0x54,0x75,0x00,0x73,0x1f,0x0f,0xfe,0xfe,0xc6,0x30,0x01,0xbc,0x48,0x00,0x84,0x82,0x00,0x1b,0x64,0xc0,0x07,0x60,0x03,0xb4,0x70,0x0c,0xbf,0x82,0x31,0x01,0x8d,0x0c,0x40,0x02,0x37,0x08,0x1d,0x74,0x00,0x76,0xa0,0x01,0xdb,0x01,0xfe,0x85,0x8b,0x96,0xaa,0x9b,0x30,0x01,0x6a,0xa3,0x40,0x75,0xaa,0x03,0xdb,0x50,0xbb,0x30,0x01,0x54,0x24,0x25,0xe6,0x51,0x08,0x1f,0x68,0x00,0x7f,0x03,0xf2,0x79,0xc0,0xf4,}; |  | ||||||
| const uint8_t *_I_DolphinReadingSuccess_59x63[] = {_I_DolphinReadingSuccess_59x63_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Mute_hvr_25x27_0[] = {0x01,0x00,0x4a,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x21,0xfe,0x40,0x7b,0xf7,0xff,0x5c,0x07,0x7f,0xbf,0xf9,0xc0,0x6f,0xfd,0xff,0xd8,0x3c,0x7c,0x1f,0x90,0x38,0xff,0x7f,0x40,0x31,0xbd,0x82,0xc6,0xff,0xb7,0x01,0x97,0x3c,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb5,0x01,0x89,0x5c,0xcb,0xe6,0x67,0x30,}; |  | ||||||
| const uint8_t *_I_Mute_hvr_25x27[] = {_I_Mute_hvr_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Back_15x10_0[] = {0x00,0x04,0x00,0x06,0x00,0xFF,0x0F,0x06,0x10,0x04,0x20,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0xFE,0x0F,}; |  | ||||||
| const uint8_t *_I_Back_15x10[] = {_I_Back_15x10_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Up_25x27_0[] = {0x01,0x00,0x44,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3c,0x88,0x00,0xca,0x70,0x03,0x2b,0xe0,0x0c,0xbf,0xc0,0x32,0xff,0x80,0x87,0x03,0xff,0x81,0xc0,0x78,0x3f,0xf8,0x3c,0x07,0xc3,0xff,0x87,0xc0,0x7e,0x3f,0xf8,0xf8,0x0d,0x06,0xfe,0x03,0x78,0x19,0x4c,0x60,0x30,0x68,0x07,0x02,0x01,0xfc,0xff,0xdf,0xcc,0xe8,}; |  | ||||||
| const uint8_t *_I_Up_25x27[] = {_I_Up_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_IrdaArrowUp_4x8_0[] = {0x00,0x18,0x3C,0x7E,0xFF,}; |  | ||||||
| const uint8_t *_I_IrdaArrowUp_4x8[] = {_I_IrdaArrowUp_4x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Mute_25x27_0[] = {0x01,0x00,0x51,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x31,0x81,0xc0,0x64,0x38,0x08,0xa4,0x06,0x83,0x40,0x86,0x40,0x70,0x32,0x08,0x20,0x3c,0x63,0xf0,0x60,0x38,0xc0,0xa0,0xa0,0x31,0xc2,0x02,0xc7,0x03,0x48,0x01,0x94,0xc0,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb3,0x81,0x94,0xc6,0x03,0x06,0x80,0x70,0x20,0x1f,0xcf,0xfd,0xfc,0xce,0x80,}; |  | ||||||
| const uint8_t *_I_Mute_25x27[] = {_I_Mute_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Power_25x27_0[] = {0x01,0x00,0x54,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x30,0x18,0x80,0x0c,0xa7,0x00,0x35,0xc0,0xce,0x60,0x70,0x1e,0x0c,0xe6,0x0f,0x01,0xf0,0xce,0x21,0xd0,0x1b,0x0c,0xe2,0x18,0x03,0x58,0x80,0x0c,0xa0,0x00,0x39,0xf0,0xc0,0x03,0x63,0xc1,0x80,0x88,0xc7,0x03,0x83,0x15,0x8c,0x07,0xfe,0x02,0x18,0x0d,0xf0,0x76,0x44,0x73,0x01,0x94,0x0c,0xa6,0x30,0x18,0x34,0x03,0x81,0x00,0xfe,0x7f,0xef,0xe6,0x74,}; |  | ||||||
| const uint8_t *_I_Power_25x27[] = {_I_Power_25x27_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_IrdaSendShort_128x34_0[] = {0x01,0x00,0x42,0x01,0xfe,0x7f,0xc0,0x07,0x03,0x07,0xc4,0x10,0x0a,0x90,0x20,0x7f,0x83,0xfc,0x04,0x3c,0x01,0xc2,0x7f,0xf8,0x80,0x43,0x9f,0x83,0xca,0x40,0x1f,0x5e,0x27,0x7e,0xab,0x55,0xee,0x83,0xce,0x38,0x0f,0x6d,0x50,0x00,0xa5,0xc0,0xf2,0x89,0x03,0xda,0xfe,0x1f,0x1f,0xa8,0x7c,0x48,0xc3,0x09,0x07,0xb6,0xae,0x54,0x1f,0x19,0xd4,0x08,0x40,0x30,0x5f,0x81,0x1c,0x63,0xfe,0x08,0x1f,0x12,0xbe,0x3f,0x49,0x0e,0x02,0x09,0x58,0x04,0x0c,0xd7,0xf1,0x0f,0x1f,0x8e,0x2b,0x11,0xaa,0x95,0x40,0xa2,0x34,0x08,0x16,0xa0,0x4e,0x32,0xab,0xe4,0x7f,0x89,0x77,0x0b,0x0d,0xd6,0x7f,0x82,0x84,0x50,0x20,0x3d,0x81,0x48,0xcd,0x67,0xd3,0xe1,0xf8,0xc8,0xb4,0x43,0xf1,0xc1,0x62,0x24,0x10,0x1b,0x46,0x80,0x3e,0x3f,0xe9,0xf8,0xfc,0xfa,0xa1,0xf1,0xa4,0x68,0x20,0x13,0x8a,0x00,0x7c,0x67,0xf7,0xe3,0xfa,0x4a,0x81,0xe3,0x40,0x80,0x66,0x38,0x66,0xa1,0xeb,0xdd,0x47,0xec,0x0f,0x2c,0x47,0x0e,0xa9,0x35,0xe9,0xd9,0x47,0xe2,0x1f,0x21,0xf8,0xd2,0x17,0xc3,0x88,0x91,0xeb,0x83,0xe6,0xbf,0x42,0x78,0xc4,0x20,0x10,0x88,0x05,0x5c,0x7e,0x7a,0xe1,0xfa,0x42,0x01,0xe5,0x84,0x1f,0x89,0x7c,0xbf,0xf7,0x7b,0xaf,0xdd,0x3e,0x31,0x10,0xe8,0xc2,0x3f,0x01,0xf1,0x3f,0x98,0x7c,0xa7,0x6a,0xf1,0x07,0x97,0x03,0x5e,0x9f,0x36,0x28,0xf7,0x7f,0xa1,0xf1,0x81,0x03,0xca,0x01,0x56,0x5f,0x9f,0xb8,0x3c,0x3e,0xa7,0xf8,0xc1,0x01,0xe5,0xf0,0x15,0x0f,0x85,0xbe,0x21,0xf1,0x00,0x08,0x7c,0x60,0x04,0xf1,0x77,0x96,0x7e,0x02,0xff,0x10,0x7c,0x00,0x16,0x08,0x05,0x40,0x78,0xa3,0xc4,0x00,0xb2,0x40,0x7b,0x2b,0xc4,0x00,0xb5,0x48,0x78,0x3d,0x70,0x01,0xf7,0x07,0xb4,0x00,0x94,0x23,0xfc,0x01,0x18,0x00,0xff,0x85,0xf3,0xff,0xc0,0xc3,0x0f,0x00,0xf0,0x09,0xce,0xf0,0x03,0x2f,0xc0,0x61,0x3f,0xe0,0xf8,0x00,0x30,0x3f,0xc0,}; |  | ||||||
| const uint8_t *_I_IrdaSendShort_128x34[] = {_I_IrdaSendShort_128x34_0}; |  | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaArrowDown_4x8_0[] = {0x00,0xFF,0x7E,0x3C,0x18,}; | const uint8_t _I_IrdaArrowDown_4x8_0[] = {0x00,0xFF,0x7E,0x3C,0x18,}; | ||||||
| const uint8_t *_I_IrdaArrowDown_4x8[] = {_I_IrdaArrowDown_4x8_0}; | const uint8_t *_I_IrdaArrowDown_4x8[] = {_I_IrdaArrowDown_4x8_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_Power_25x27_0[] = {0x01,0x00,0x54,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x30,0x18,0x80,0x0c,0xa7,0x00,0x35,0xc0,0xce,0x60,0x70,0x1e,0x0c,0xe6,0x0f,0x01,0xf0,0xce,0x21,0xd0,0x1b,0x0c,0xe2,0x18,0x03,0x58,0x80,0x0c,0xa0,0x00,0x39,0xf0,0xc0,0x03,0x63,0xc1,0x80,0x88,0xc7,0x03,0x83,0x15,0x8c,0x07,0xfe,0x02,0x18,0x0d,0xf0,0x76,0x44,0x73,0x01,0x94,0x0c,0xa6,0x30,0x18,0x34,0x03,0x81,0x00,0xfe,0x7f,0xef,0xe6,0x74,}; | ||||||
|  | const uint8_t *_I_Power_25x27[] = {_I_Power_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Mute_25x27_0[] = {0x01,0x00,0x51,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x31,0x81,0xc0,0x64,0x38,0x08,0xa4,0x06,0x83,0x40,0x86,0x40,0x70,0x32,0x08,0x20,0x3c,0x63,0xf0,0x60,0x38,0xc0,0xa0,0xa0,0x31,0xc2,0x02,0xc7,0x03,0x48,0x01,0x94,0xc0,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb3,0x81,0x94,0xc6,0x03,0x06,0x80,0x70,0x20,0x1f,0xcf,0xfd,0xfc,0xce,0x80,}; | ||||||
|  | const uint8_t *_I_Mute_25x27[] = {_I_Mute_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Down_hvr_25x27_0[] = {0x01,0x00,0x3a,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3f,0x01,0x9c,0x3e,0x01,0xe0,0x01,0xa4,0x7e,0x01,0xf0,0x80,0x8b,0x47,0xf1,0x01,0x16,0x8f,0xf0,0x2e,0x23,0x11,0x01,0x88,0x04,0xf0,0x60,0x32,0xe3,0x80,0xcb,0xde,0x37,0xf0,0x1a,0x95,0xcc,0xbe,0x66,0x73,}; | ||||||
|  | const uint8_t *_I_Down_hvr_25x27[] = {_I_Down_hvr_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Vol_up_25x27_0[] = {0x01,0x00,0x2f,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x38,0x88,0x00,0xfc,0x06,0xbc,0x1f,0xfc,0x1c,0x06,0x81,0x7f,0x01,0xc1,0x0e,0xa0,0x65,0x31,0x80,0xc1,0xa0,0x1c,0x08,0x07,0xf3,0xff,0x7f,0x33,0xa0,}; | ||||||
|  | const uint8_t *_I_Vol_up_25x27[] = {_I_Vol_up_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_IrdaLearnShort_128x31_0[] = {0x01,0x00,0x10,0x01,0x00,0x47,0xfb,0xfe,0x00,0x38,0x38,0x3e,0x20,0x20,0x54,0x84,0x03,0x9f,0xc0,0x06,0x58,0x80,0x3d,0xf2,0x00,0x65,0x90,0x03,0xde,0x90,0x06,0x5a,0x07,0xc0,0x8a,0x70,0x1a,0x04,0x02,0x51,0x80,0x03,0x94,0x02,0x3f,0x40,0x20,0x24,0x0b,0x01,0x00,0x92,0x70,0x35,0x40,0x01,0xe0,0xdf,0xf0,0x10,0x40,0x71,0x58,0x20,0x90,0x88,0x0c,0x4a,0x81,0x55,0x00,0x0f,0x87,0xf7,0x00,0x82,0x43,0x36,0x16,0xdc,0x9c,0x12,0x21,0x01,0x85,0x70,0x3f,0xc1,0xf1,0xf8,0xfc,0x60,0x20,0xf5,0x90,0x40,0xa1,0x34,0x08,0x18,0x7c,0x7e,0x24,0x91,0x07,0x8c,0xc0,0x5e,0x52,0x28,0x14,0x17,0x81,0x01,0x0f,0x8f,0xe7,0xe3,0x03,0x1f,0x8e,0x02,0xdb,0x03,0x8e,0x49,0x20,0x50,0x2e,0x04,0x72,0xbd,0x55,0xdc,0xeb,0xa0,0x7c,0x4f,0x68,0xbc,0x60,0x72,0x40,0x79,0x50,0x23,0x9a,0x6d,0x56,0x66,0x5c,0x0f,0x21,0x78,0x9b,0x04,0x1e,0x28,0x21,0x8e,0x5c,0x43,0xe6,0x2f,0x10,0xf9,0x0b,0xc7,0x04,0x99,0x18,0x06,0xe0,0x7e,0x56,0x32,0x78,0x8f,0xc4,0x08,0x32,0x20,0x79,0x48,0x2b,0x85,0xf2,0xf8,0x83,0xc4,0x5c,0x3f,0x03,0x78,0xd0,0x81,0xe3,0xc0,0xdf,0x9f,0xcb,0xf3,0x04,0xc6,0x7d,0xfb,0xdf,0x34,0x78,0xd0,0x45,0xe5,0x7e,0x4f,0x97,0xe2,0x09,0x80,0x07,0x88,0xbc,0x61,0x00,0xf3,0xd8,0x2f,0xcb,0xe0,0xcf,0x60,0x68,0xd0,0x30,0x15,0xfa,0xac,0x36,0x3f,0x60,0x77,0xb3,0x80,0x5d,0xe6,0x4b,0x20,0x03,0x03,0xc4,0x01,0xd0,0x10,0x7f,0x40,0x81,0xfc,0xa7,0x10,0x06,0x99,0xd0,0x01,0x51,0x00,0x7f,0x48,0x01,0xfd,0xc0,0x43,0x98,0x00,0x8e,0xfe,0x00,0xf0,}; | ||||||
|  | const uint8_t *_I_IrdaLearnShort_128x31[] = {_I_IrdaLearnShort_128x31_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Up_25x27_0[] = {0x01,0x00,0x44,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3c,0x88,0x00,0xca,0x70,0x03,0x2b,0xe0,0x0c,0xbf,0xc0,0x32,0xff,0x80,0x87,0x03,0xff,0x81,0xc0,0x78,0x3f,0xf8,0x3c,0x07,0xc3,0xff,0x87,0xc0,0x7e,0x3f,0xf8,0xf8,0x0d,0x06,0xfe,0x03,0x78,0x19,0x4c,0x60,0x30,0x68,0x07,0x02,0x01,0xfc,0xff,0xdf,0xcc,0xe8,}; | ||||||
|  | const uint8_t *_I_Up_25x27[] = {_I_Up_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Vol_down_hvr_25x27_0[] = {0x01,0x00,0x23,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3f,0x01,0xf8,0xb4,0x7f,0x00,0x34,0x0b,0xf8,0x0f,0xc0,0x6e,0x57,0x32,0xf9,0x99,0xcc,}; | ||||||
|  | const uint8_t *_I_Vol_down_hvr_25x27[] = {_I_Vol_down_hvr_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Vol_down_25x27_0[] = {0x01,0x00,0x2c,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3f,0x01,0xff,0x07,0xff,0x07,0x01,0xa0,0x5f,0xc0,0x7e,0x03,0x38,0x19,0x4c,0x60,0x30,0x68,0x07,0x02,0x01,0xfc,0xff,0xdf,0xcc,0xe8,}; | ||||||
|  | const uint8_t *_I_Vol_down_25x27[] = {_I_Vol_down_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Vol_up_hvr_25x27_0[] = {0x01,0x00,0x28,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x38,0xf7,0x80,0xfc,0x06,0xa2,0xd1,0xfc,0x00,0xd0,0x2f,0xe0,0x38,0x21,0xd8,0x0c,0x8a,0xe6,0x5f,0x33,0x39,0x80,}; | ||||||
|  | const uint8_t *_I_Vol_up_hvr_25x27[] = {_I_Vol_up_hvr_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Fill_marker_7x7_0[] = {0x00,0x1C,0x32,0x6F,0x5F,0x7F,0x3E,0x1C,}; | ||||||
|  | const uint8_t *_I_Fill_marker_7x7[] = {_I_Fill_marker_7x7_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Up_hvr_25x27_0[] = {0x01,0x00,0x39,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3c,0xf7,0x80,0xcb,0x8e,0x03,0x2c,0x18,0x0c,0x80,0x26,0x25,0x18,0x08,0xa4,0x7f,0x90,0x11,0x88,0xfe,0x20,0x31,0xf8,0x07,0xc2,0x03,0x0f,0x80,0x78,0x00,0x68,0x37,0xf0,0x1d,0x95,0xcc,0xbe,0x66,0x73,}; | ||||||
|  | const uint8_t *_I_Up_hvr_25x27[] = {_I_Up_hvr_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_IrdaArrowUp_4x8_0[] = {0x00,0x18,0x3C,0x7E,0xFF,}; | ||||||
|  | const uint8_t *_I_IrdaArrowUp_4x8[] = {_I_IrdaArrowUp_4x8_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Down_25x27_0[] = {0x01,0x00,0x46,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3f,0x01,0x9f,0xc7,0xff,0x1f,0x01,0xa7,0x87,0xff,0x0f,0x80,0xf0,0x7f,0xf0,0x78,0x0e,0x07,0xff,0x03,0x0b,0x8f,0xfc,0x04,0x30,0x1f,0xf0,0x7c,0xaf,0x80,0x32,0x9c,0x00,0xca,0x20,0x37,0xf0,0x18,0xc0,0xca,0x63,0x01,0x83,0x40,0x38,0x10,0x0f,0xe7,0xfe,0xfe,0x67,0x40,}; | ||||||
|  | const uint8_t *_I_Down_25x27[] = {_I_Down_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DolphinReadingSuccess_59x63_0[] = {0x01,0x00,0x19,0x01,0x00,0x1d,0x00,0x0f,0xd2,0x00,0x21,0xe0,0x3f,0xf0,0xf9,0x00,0x40,0xee,0x00,0x11,0x88,0x04,0x0e,0x18,0x11,0x18,0x8c,0x40,0x0e,0x50,0x30,0x10,0xc0,0xa1,0x01,0xe2,0x05,0x14,0x12,0x08,0x33,0x58,0x44,0x08,0x66,0xa1,0xe3,0x01,0x9c,0x83,0x00,0x24,0x11,0x11,0x06,0xc4,0x76,0x20,0x75,0x15,0x99,0x48,0xc0,0xe9,0x0f,0x03,0x95,0xfc,0x86,0x3c,0x09,0x80,0x1c,0x7c,0x00,0x91,0x81,0x48,0x2f,0xc1,0x41,0x8c,0xc0,0x20,0x30,0x1c,0x87,0xfc,0x0e,0x30,0x70,0x70,0x81,0xc7,0xe6,0x07,0x18,0x08,0x1c,0xb9,0x1e,0x38,0x0f,0x02,0x01,0xf0,0x03,0xa0,0xa4,0x7f,0x90,0x30,0x38,0xff,0xe0,0x28,0x21,0xff,0x06,0x44,0x0e,0x46,0xe1,0x01,0x8c,0x03,0x34,0x2f,0x25,0x18,0x80,0xc7,0x2a,0x03,0x2e,0x01,0x3c,0x70,0x12,0xa2,0x39,0x78,0x27,0xe0,0x31,0xea,0x82,0xc4,0x6c,0x31,0xf0,0x78,0xea,0xb0,0x22,0x31,0xfc,0x1a,0xc6,0x01,0x55,0x25,0x88,0xf8,0x4b,0x02,0x1f,0x13,0xe1,0x7f,0x97,0x85,0x15,0x03,0x90,0xf8,0xa0,0x10,0xa1,0xb1,0x0e,0x88,0x00,0x7f,0x0f,0xc0,0x7c,0x57,0x27,0x3c,0xb0,0x7f,0x5f,0xa9,0x1f,0xc0,0x6a,0xc5,0x05,0xc0,0xf0,0x11,0x46,0xac,0x18,0x3f,0xf9,0x54,0x75,0x00,0x73,0x1f,0x0f,0xfe,0xfe,0xc6,0x30,0x01,0xbc,0x48,0x00,0x84,0x82,0x00,0x1b,0x64,0xc0,0x07,0x60,0x03,0xb4,0x70,0x0c,0xbf,0x82,0x31,0x01,0x8d,0x0c,0x40,0x02,0x37,0x08,0x1d,0x74,0x00,0x76,0xa0,0x01,0xdb,0x01,0xfe,0x85,0x8b,0x96,0xaa,0x9b,0x30,0x01,0x6a,0xa3,0x40,0x75,0xaa,0x03,0xdb,0x50,0xbb,0x30,0x01,0x54,0x24,0x25,0xe6,0x51,0x08,0x1f,0x68,0x00,0x7f,0x03,0xf2,0x79,0xc0,0xf4,}; | ||||||
|  | const uint8_t *_I_DolphinReadingSuccess_59x63[] = {_I_DolphinReadingSuccess_59x63_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_IrdaSendShort_128x34_0[] = {0x01,0x00,0x42,0x01,0xfe,0x7f,0xc0,0x07,0x03,0x07,0xc4,0x10,0x0a,0x90,0x20,0x7f,0x83,0xfc,0x04,0x3c,0x01,0xc2,0x7f,0xf8,0x80,0x43,0x9f,0x83,0xca,0x40,0x1f,0x5e,0x27,0x7e,0xab,0x55,0xee,0x83,0xce,0x38,0x0f,0x6d,0x50,0x00,0xa5,0xc0,0xf2,0x89,0x03,0xda,0xfe,0x1f,0x1f,0xa8,0x7c,0x48,0xc3,0x09,0x07,0xb6,0xae,0x54,0x1f,0x19,0xd4,0x08,0x40,0x30,0x5f,0x81,0x1c,0x63,0xfe,0x08,0x1f,0x12,0xbe,0x3f,0x49,0x0e,0x02,0x09,0x58,0x04,0x0c,0xd7,0xf1,0x0f,0x1f,0x8e,0x2b,0x11,0xaa,0x95,0x40,0xa2,0x34,0x08,0x16,0xa0,0x4e,0x32,0xab,0xe4,0x7f,0x89,0x77,0x0b,0x0d,0xd6,0x7f,0x82,0x84,0x50,0x20,0x3d,0x81,0x48,0xcd,0x67,0xd3,0xe1,0xf8,0xc8,0xb4,0x43,0xf1,0xc1,0x62,0x24,0x10,0x1b,0x46,0x80,0x3e,0x3f,0xe9,0xf8,0xfc,0xfa,0xa1,0xf1,0xa4,0x68,0x20,0x13,0x8a,0x00,0x7c,0x67,0xf7,0xe3,0xfa,0x4a,0x81,0xe3,0x40,0x80,0x66,0x38,0x66,0xa1,0xeb,0xdd,0x47,0xec,0x0f,0x2c,0x47,0x0e,0xa9,0x35,0xe9,0xd9,0x47,0xe2,0x1f,0x21,0xf8,0xd2,0x17,0xc3,0x88,0x91,0xeb,0x83,0xe6,0xbf,0x42,0x78,0xc4,0x20,0x10,0x88,0x05,0x5c,0x7e,0x7a,0xe1,0xfa,0x42,0x01,0xe5,0x84,0x1f,0x89,0x7c,0xbf,0xf7,0x7b,0xaf,0xdd,0x3e,0x31,0x10,0xe8,0xc2,0x3f,0x01,0xf1,0x3f,0x98,0x7c,0xa7,0x6a,0xf1,0x07,0x97,0x03,0x5e,0x9f,0x36,0x28,0xf7,0x7f,0xa1,0xf1,0x81,0x03,0xca,0x01,0x56,0x5f,0x9f,0xb8,0x3c,0x3e,0xa7,0xf8,0xc1,0x01,0xe5,0xf0,0x15,0x0f,0x85,0xbe,0x21,0xf1,0x00,0x08,0x7c,0x60,0x04,0xf1,0x77,0x96,0x7e,0x02,0xff,0x10,0x7c,0x00,0x16,0x08,0x05,0x40,0x78,0xa3,0xc4,0x00,0xb2,0x40,0x7b,0x2b,0xc4,0x00,0xb5,0x48,0x78,0x3d,0x70,0x01,0xf7,0x07,0xb4,0x00,0x94,0x23,0xfc,0x01,0x18,0x00,0xff,0x85,0xf3,0xff,0xc0,0xc3,0x0f,0x00,0xf0,0x09,0xce,0xf0,0x03,0x2f,0xc0,0x61,0x3f,0xe0,0xf8,0x00,0x30,0x3f,0xc0,}; | ||||||
|  | const uint8_t *_I_IrdaSendShort_128x34[] = {_I_IrdaSendShort_128x34_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_IrdaLearn_128x64_0[] = {0x01,0x00,0xcc,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3f,0x01,0x07,0x82,0x41,0x21,0x20,0x73,0x00,0x8e,0x82,0x0f,0x00,0xa0,0x01,0x46,0x11,0x00,0x07,0xc0,0x28,0x41,0xe5,0xc8,0xba,0x63,0xa7,0x70,0x6b,0x3d,0xbb,0x99,0x19,0xee,0x68,0x71,0x16,0x3f,0x70,0x3c,0x64,0xf9,0x58,0x25,0x26,0x13,0x91,0xc9,0x64,0xa4,0x99,0x2d,0x06,0x1f,0x29,0x42,0x07,0x8c,0x80,0x1e,0x50,0xff,0x88,0x3c,0x67,0x80,0xf1,0xc1,0x03,0xde,0x03,0x11,0x07,0x8c,0x10,0x1e,0x38,0x40,0x79,0xf0,0x32,0x80,0xf1,0x83,0x58,0x72,0x58,0xc8,0xc6,0x73,0x40,0x3f,0x10,0x78,0x9e,0xf1,0x17,0xe9,0xcf,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x02,0x44,0x18,0xa3,0x80,0x82,0x32,0x06,0x44,0x0f,0xf0,0x73,0x5d,0xe3,0x92,0x7e,0xcf,0x06,0x3b,0xc3,0xa4,0xdd,0xfc,0xc8,0x35,0xca,0x44,0xa5,0x34,0x5c,0x16,0x92,0x89,0x4a,0x91,0x4a,0x60,0x20,0xf7,0xa4,0x83,0xc6,0x8e,0x0f,0xba,0x88,0x3c,0x68,0x00,0xf7,0x80,0x65,0xe3,0x9c,0x7a,0x6e,0x0a,0x49,0xc3,0xb8,0xc8,0xa4,0xc0,0xf5,0x00,0x08,0x1d,0xc0,0x0e,0x0f,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xfb,0xfe,0x00,0x38,0x39,0x97,0xa1,0x00,0xe7,0xf0,0x3b,0x1c,0x00,0xd9,0x00,0x32,0xc8,0x01,0xef,0x48,0x03,0x2d,0x03,0xe0,0x45,0x38,0x0d,0x02,0x01,0x28,0xc0,0x01,0xca,0x01,0x1f,0xa0,0x10,0x12,0x05,0x80,0x80,0x49,0x38,0x1a,0xa0,0x00,0xf0,0x6f,0xf8,0x08,0x20,0x38,0xac,0x10,0x48,0x44,0x06,0x25,0x40,0xaa,0x80,0x07,0xc3,0xfb,0x80,0x41,0x21,0x9b,0x0b,0x6e,0x4e,0x09,0x10,0x80,0xc2,0xb8,0x1f,0xe0,0xf8,0xfc,0x7e,0x30,0x10,0x7a,0xc8,0x20,0x50,0x9a,0x04,0x0c,0x3e,0x3f,0x12,0x48,0x83,0xc6,0x60,0x2f,0x29,0x14,0x0a,0x0b,0xc0,0x80,0x87,0xc7,0xf3,0xf1,0x81,0x8f,0xc7,0x01,0x6d,0x81,0xc7,0x24,0x90,0x28,0x17,0x02,0x39,0x5e,0xaa,0xee,0x75,0xd0,0x3e,0x27,0xb4,0x5e,0x30,0x39,0x20,0x3c,0xa8,0x11,0xcd,0x36,0xab,0x33,0x2e,0x07,0x90,0xbc,0x4d,0x82,0x0f,0x14,0x10,0xc7,0x2e,0x21,0xf3,0x17,0x88,0x7c,0x85,0xe3,0x82,0x4c,0x8c,0x03,0x70,0x3f,0x2b,0x19,0x3c,0x47,0xe2,0x04,0x19,0x10,0x3c,0xa4,0x15,0xc2,0xf9,0x7c,0x41,0xe2,0x2e,0x1f,0x81,0xbc,0x68,0x40,0xf1,0xe0,0x6f,0xcf,0xe5,0xf9,0x82,0x63,0x3e,0xfd,0xef,0x9a,0x3c,0x68,0x22,0xf2,0xbf,0x27,0xcb,0xf1,0x04,0xc0,0x03,0xc4,0x5e,0x30,0x80,0x79,0xec,0x17,0xe5,0xf0,0x67,0xb0,0x34,0x68,0x18,0x0a,0xfd,0x56,0x1b,0x1f,0xb0,0x3b,0xd9,0xc0,0x2e,0xf3,0x25,0x90,0x01,0x81,0xe2,0x00,0xe8,0x08,0x3f,0xa0,0x40,0xfe,0x53,0x88,0x03,0x4c,0xe8,0x00,0xa8,0x80,0x3f,0xa4,0x00,0xfe,0xe0,0x21,0xcc,0x00,0x47,0x7f,0x00,0x78,}; | const uint8_t _I_IrdaLearn_128x64_0[] = {0x01,0x00,0xcc,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3f,0x01,0x07,0x82,0x41,0x21,0x20,0x73,0x00,0x8e,0x82,0x0f,0x00,0xa0,0x01,0x46,0x11,0x00,0x07,0xc0,0x28,0x41,0xe5,0xc8,0xba,0x63,0xa7,0x70,0x6b,0x3d,0xbb,0x99,0x19,0xee,0x68,0x71,0x16,0x3f,0x70,0x3c,0x64,0xf9,0x58,0x25,0x26,0x13,0x91,0xc9,0x64,0xa4,0x99,0x2d,0x06,0x1f,0x29,0x42,0x07,0x8c,0x80,0x1e,0x50,0xff,0x88,0x3c,0x67,0x80,0xf1,0xc1,0x03,0xde,0x03,0x11,0x07,0x8c,0x10,0x1e,0x38,0x40,0x79,0xf0,0x32,0x80,0xf1,0x83,0x58,0x72,0x58,0xc8,0xc6,0x73,0x40,0x3f,0x10,0x78,0x9e,0xf1,0x17,0xe9,0xcf,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x02,0x44,0x18,0xa3,0x80,0x82,0x32,0x06,0x44,0x0f,0xf0,0x73,0x5d,0xe3,0x92,0x7e,0xcf,0x06,0x3b,0xc3,0xa4,0xdd,0xfc,0xc8,0x35,0xca,0x44,0xa5,0x34,0x5c,0x16,0x92,0x89,0x4a,0x91,0x4a,0x60,0x20,0xf7,0xa4,0x83,0xc6,0x8e,0x0f,0xba,0x88,0x3c,0x68,0x00,0xf7,0x80,0x65,0xe3,0x9c,0x7a,0x6e,0x0a,0x49,0xc3,0xb8,0xc8,0xa4,0xc0,0xf5,0x00,0x08,0x1d,0xc0,0x0e,0x0f,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xfb,0xfe,0x00,0x38,0x39,0x97,0xa1,0x00,0xe7,0xf0,0x3b,0x1c,0x00,0xd9,0x00,0x32,0xc8,0x01,0xef,0x48,0x03,0x2d,0x03,0xe0,0x45,0x38,0x0d,0x02,0x01,0x28,0xc0,0x01,0xca,0x01,0x1f,0xa0,0x10,0x12,0x05,0x80,0x80,0x49,0x38,0x1a,0xa0,0x00,0xf0,0x6f,0xf8,0x08,0x20,0x38,0xac,0x10,0x48,0x44,0x06,0x25,0x40,0xaa,0x80,0x07,0xc3,0xfb,0x80,0x41,0x21,0x9b,0x0b,0x6e,0x4e,0x09,0x10,0x80,0xc2,0xb8,0x1f,0xe0,0xf8,0xfc,0x7e,0x30,0x10,0x7a,0xc8,0x20,0x50,0x9a,0x04,0x0c,0x3e,0x3f,0x12,0x48,0x83,0xc6,0x60,0x2f,0x29,0x14,0x0a,0x0b,0xc0,0x80,0x87,0xc7,0xf3,0xf1,0x81,0x8f,0xc7,0x01,0x6d,0x81,0xc7,0x24,0x90,0x28,0x17,0x02,0x39,0x5e,0xaa,0xee,0x75,0xd0,0x3e,0x27,0xb4,0x5e,0x30,0x39,0x20,0x3c,0xa8,0x11,0xcd,0x36,0xab,0x33,0x2e,0x07,0x90,0xbc,0x4d,0x82,0x0f,0x14,0x10,0xc7,0x2e,0x21,0xf3,0x17,0x88,0x7c,0x85,0xe3,0x82,0x4c,0x8c,0x03,0x70,0x3f,0x2b,0x19,0x3c,0x47,0xe2,0x04,0x19,0x10,0x3c,0xa4,0x15,0xc2,0xf9,0x7c,0x41,0xe2,0x2e,0x1f,0x81,0xbc,0x68,0x40,0xf1,0xe0,0x6f,0xcf,0xe5,0xf9,0x82,0x63,0x3e,0xfd,0xef,0x9a,0x3c,0x68,0x22,0xf2,0xbf,0x27,0xcb,0xf1,0x04,0xc0,0x03,0xc4,0x5e,0x30,0x80,0x79,0xec,0x17,0xe5,0xf0,0x67,0xb0,0x34,0x68,0x18,0x0a,0xfd,0x56,0x1b,0x1f,0xb0,0x3b,0xd9,0xc0,0x2e,0xf3,0x25,0x90,0x01,0x81,0xe2,0x00,0xe8,0x08,0x3f,0xa0,0x40,0xfe,0x53,0x88,0x03,0x4c,0xe8,0x00,0xa8,0x80,0x3f,0xa4,0x00,0xfe,0xe0,0x21,0xcc,0x00,0x47,0x7f,0x00,0x78,}; | ||||||
| const uint8_t *_I_IrdaLearn_128x64[] = {_I_IrdaLearn_128x64_0}; | const uint8_t *_I_IrdaLearn_128x64[] = {_I_IrdaLearn_128x64_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_Mute_hvr_25x27_0[] = {0x01,0x00,0x4a,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x21,0xfe,0x40,0x7b,0xf7,0xff,0x5c,0x07,0x7f,0xbf,0xf9,0xc0,0x6f,0xfd,0xff,0xd8,0x3c,0x7c,0x1f,0x90,0x38,0xff,0x7f,0x40,0x31,0xbd,0x82,0xc6,0xff,0xb7,0x01,0x97,0x3c,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb5,0x01,0x89,0x5c,0xcb,0xe6,0x67,0x30,}; | ||||||
|  | const uint8_t *_I_Mute_hvr_25x27[] = {_I_Mute_hvr_25x27_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_IrdaSend_128x64_0[] = {0x01,0x00,0xe2,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xfe,0x04,0x0e,0x05,0x82,0xd7,0x81,0xca,0x21,0x08,0x01,0x8c,0x10,0x0e,0x54,0x00,0x20,0xe0,0xa4,0x00,0xfb,0xb2,0x4e,0xb0,0xfa,0x0e,0x74,0xc7,0x0f,0x3b,0xce,0x4e,0xec,0xf0,0xe1,0x79,0xe4,0xe9,0x58,0x2d,0x3d,0x4a,0x95,0x41,0x89,0x52,0x31,0x59,0x40,0xfa,0x64,0x01,0xe3,0xa0,0xa9,0x5e,0x81,0xe7,0xf4,0x07,0xcc,0x28,0x1e,0x71,0x40,0x7a,0x58,0x01,0xe4,0x3f,0x1c,0x0c,0x4f,0x11,0x0b,0xb3,0x83,0xcc,0x00,0x94,0x20,0x2a,0x03,0xa0,0x1e,0xd0,0x34,0xdf,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x4c,0xf0,0x17,0x4c,0x81,0xa0,0x18,0x18,0x1f,0x39,0x90,0x6c,0x60,0x27,0x70,0xe9,0x3f,0x67,0x03,0x3c,0x80,0x83,0xde,0x81,0x4a,0x84,0xca,0x68,0xb8,0x2b,0xf0,0x3f,0x29,0x20,0xfe,0xa8,0xe0,0x85,0xf3,0x80,0xa5,0xc3,0xb8,0xf4,0xd8,0x11,0x3e,0x40,0x04,0x1b,0x23,0x7d,0x83,0xcd,0x1f,0x60,0x0f,0x00,0x78,0x03,0x7f,0x9f,0xf0,0x01,0xc0,0xc1,0xf1,0x04,0x02,0xa4,0x08,0x1f,0xe0,0xff,0x01,0x0f,0x00,0x70,0x9f,0xfe,0x20,0x10,0xe7,0xe0,0xf2,0x90,0x07,0xd7,0x89,0xdf,0xaa,0xd5,0x7b,0xa0,0xf3,0x8e,0x03,0xdb,0x54,0x00,0x29,0x70,0x3c,0xa2,0x40,0xf6,0xbf,0x87,0xc7,0xea,0x1f,0x12,0x30,0xc2,0x41,0xed,0xab,0x95,0x07,0xc6,0x75,0x02,0x10,0x0c,0x17,0xe0,0x47,0x18,0xff,0x82,0x07,0xc4,0xaf,0x8f,0xd2,0x43,0x80,0x82,0x56,0x01,0x03,0x35,0xfc,0x43,0xc7,0xe3,0x8a,0xc4,0x6a,0xa5,0x50,0x28,0x8d,0x02,0x05,0xa8,0x13,0x8c,0xaa,0xf9,0x1f,0xe2,0x5d,0xc2,0xc3,0x75,0x9f,0xe0,0xa1,0x14,0x08,0x0f,0x60,0x52,0x33,0x59,0xf4,0xf8,0x7e,0x32,0x2d,0x10,0xfc,0x70,0x58,0x89,0x04,0x06,0xd1,0xa0,0x0f,0x8f,0xfa,0x7e,0x3f,0x3e,0xa8,0x7c,0x69,0x1a,0x08,0x04,0xe2,0x80,0x1f,0x19,0xfd,0xf8,0xfe,0x92,0xa0,0x78,0xd0,0x20,0x19,0x8e,0x19,0xa8,0x7a,0xf7,0x51,0xfb,0x03,0xcb,0x11,0xc3,0xaa,0x4d,0x7a,0x76,0x51,0xf8,0x87,0xc8,0x7e,0x34,0x85,0xf0,0xe2,0x24,0x7a,0xe0,0xf9,0xaf,0xd0,0x9e,0x31,0x08,0x04,0x22,0x01,0x57,0x1f,0x9e,0xb8,0x7e,0x90,0x80,0x79,0x61,0x07,0xe2,0x5f,0x2f,0xfd,0xde,0xeb,0xf7,0x4f,0x8c,0x44,0x3a,0x30,0x8f,0xc0,0x7c,0x4f,0xe6,0x1f,0x29,0xda,0xbc,0x41,0xe5,0xc0,0xd7,0xa7,0xcd,0x8a,0x3d,0xdf,0xe8,0x7c,0x60,0x40,0xf2,0x80,0x55,0x97,0xe7,0xee,0x0f,0x0f,0xa9,0xfe,0x30,0x40,0x79,0x7c,0x05,0x43,0xe1,0x6f,0x88,0x7c,0x40,0x02,0x1f,0x18,0x01,0x3c,0x5d,0xe5,0x9f,0x80,0xbf,0xc4,0x1f,0x00,0x05,0x82,0x01,0x50,0x1e,0x28,0xf1,0x00,0x2c,0x90,0x1e,0xca,0xf1,0x00,0x2d,0x52,0x1e,0x0f,0x5c,0x00,0x7d,0xc1,0xed,0x00,0x25,0x08,0xff,0x00,0x46,0x00,0x3f,0xe1,0x7c,0xff,0xf0,0x30,0xc3,0xc0,0x3c,0x02,0x73,0xbc,0x00,0xcb,0xf0,0x18,0x4f,0xf8,0x3e,0x00,0x0c,0x0f,0xf0,}; | ||||||
|  | const uint8_t *_I_IrdaSend_128x64[] = {_I_IrdaSend_128x64_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_Power_hvr_25x27_0[] = {0x01,0x00,0x4b,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x3f,0xff,0x78,0x0c,0xb8,0xe0,0x35,0xbf,0xf1,0xbf,0x90,0x19,0xff,0x1b,0xf1,0x01,0x8f,0xf1,0xfe,0x30,0x1c,0xff,0x1f,0xe6,0x03,0x5f,0x78,0x0c,0xbf,0xe0,0x39,0x8f,0xff,0xc3,0x63,0x3f,0xff,0x08,0xc6,0xff,0x7c,0x15,0x89,0x04,0x7f,0xc0,0x31,0xc1,0x8e,0xc8,0x8e,0x60,0x36,0x2b,0x99,0x7c,0xcc,0xe6,}; | const uint8_t _I_Power_hvr_25x27_0[] = {0x01,0x00,0x4b,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x3f,0xff,0x78,0x0c,0xb8,0xe0,0x35,0xbf,0xf1,0xbf,0x90,0x19,0xff,0x1b,0xf1,0x01,0x8f,0xf1,0xfe,0x30,0x1c,0xff,0x1f,0xe6,0x03,0x5f,0x78,0x0c,0xbf,0xe0,0x39,0x8f,0xff,0xc3,0x63,0x3f,0xff,0x08,0xc6,0xff,0x7c,0x15,0x89,0x04,0x7f,0xc0,0x31,0xc1,0x8e,0xc8,0x8e,0x60,0x36,0x2b,0x99,0x7c,0xcc,0xe6,}; | ||||||
| const uint8_t *_I_Power_hvr_25x27[] = {_I_Power_hvr_25x27_0}; | const uint8_t *_I_Power_hvr_25x27[] = {_I_Power_hvr_25x27_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_Back_15x10_0[] = {0x00,0x04,0x00,0x06,0x00,0xFF,0x0F,0x06,0x10,0x04,0x20,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0xFE,0x0F,}; | ||||||
|  | const uint8_t *_I_Back_15x10[] = {_I_Back_15x10_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_KeySaveSelected_24x11_0[] = {0x01,0x00,0x1a,0x00,0xff,0x7f,0xc0,0x0d,0xcf,0xb4,0x7c,0xee,0xf6,0xbf,0x6d,0xbe,0xd7,0xe1,0xaf,0xda,0xff,0xbe,0x7c,0xc7,0xcc,0x28,0xa1,0xd1,0xbf,0x80,}; | const uint8_t _I_KeySaveSelected_24x11_0[] = {0x01,0x00,0x1a,0x00,0xff,0x7f,0xc0,0x0d,0xcf,0xb4,0x7c,0xee,0xf6,0xbf,0x6d,0xbe,0xd7,0xe1,0xaf,0xda,0xff,0xbe,0x7c,0xc7,0xcc,0x28,0xa1,0xd1,0xbf,0x80,}; | ||||||
| const uint8_t *_I_KeySaveSelected_24x11[] = {_I_KeySaveSelected_24x11_0}; | const uint8_t *_I_KeySaveSelected_24x11[] = {_I_KeySaveSelected_24x11_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_KeyBackspace_16x9_0[] = {0x00,0xFE,0x7F,0x01,0x80,0x11,0x80,0x19,0x80,0xFD,0xBF,0x19,0x80,0x11,0x80,0x01,0x80,0xFE,0x7F,}; | const uint8_t _I_KeySave_24x11_0[] = {0x01,0x00,0x1e,0x00,0xff,0x7f,0xff,0xf0,0x18,0x06,0x00,0x04,0x53,0x1c,0xbe,0x33,0x13,0x94,0xc9,0x64,0x72,0x99,0xed,0x0e,0x53,0x05,0x19,0xb3,0xe3,0x02,0x8a,0x1d,0x1b,0xf8,}; | ||||||
| const uint8_t *_I_KeyBackspace_16x9[] = {_I_KeyBackspace_16x9_0}; | const uint8_t *_I_KeySave_24x11[] = {_I_KeySave_24x11_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_KeyBackspaceSelected_16x9_0[] = {0x00,0xFE,0x7F,0xFF,0xFF,0xEF,0xFF,0xE7,0xFF,0x03,0xC0,0xE7,0xFF,0xEF,0xFF,0xFF,0xFF,0xFE,0x7F,}; | const uint8_t _I_KeyBackspaceSelected_16x9_0[] = {0x00,0xFE,0x7F,0xFF,0xFF,0xEF,0xFF,0xE7,0xFF,0x03,0xC0,0xE7,0xFF,0xEF,0xFF,0xFF,0xFF,0xFE,0x7F,}; | ||||||
| const uint8_t *_I_KeyBackspaceSelected_16x9[] = {_I_KeyBackspaceSelected_16x9_0}; | const uint8_t *_I_KeyBackspaceSelected_16x9[] = {_I_KeyBackspaceSelected_16x9_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_KeySave_24x11_0[] = {0x01,0x00,0x1e,0x00,0xff,0x7f,0xff,0xf0,0x18,0x06,0x00,0x04,0x53,0x1c,0xbe,0x33,0x13,0x94,0xc9,0x64,0x72,0x99,0xed,0x0e,0x53,0x05,0x19,0xb3,0xe3,0x02,0x8a,0x1d,0x1b,0xf8,}; | const uint8_t _I_KeyBackspace_16x9_0[] = {0x00,0xFE,0x7F,0x01,0x80,0x11,0x80,0x19,0x80,0xFD,0xBF,0x19,0x80,0x11,0x80,0x01,0x80,0xFE,0x7F,}; | ||||||
| const uint8_t *_I_KeySave_24x11[] = {_I_KeySave_24x11_0}; | const uint8_t *_I_KeyBackspace_16x9[] = {_I_KeyBackspace_16x9_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _A_125khz_14_0[] = {0x00,0x80,0x07,0x00,0x08,0x00,0x13,0x00,0x24,0x0E,0x28,0x71,0x28,0x85,0x21,0x01,0x02,0x62,0x02,0x92,0x02,0x92,0x02,0x64,0x02,0x04,0x01,0xF8,0x00,}; | const uint8_t _A_125khz_14_0[] = {0x00,0x80,0x07,0x00,0x08,0x00,0x13,0x00,0x24,0x0E,0x28,0x71,0x28,0x85,0x21,0x01,0x02,0x62,0x02,0x92,0x02,0x92,0x02,0x64,0x02,0x04,0x01,0xF8,0x00,}; | ||||||
| const uint8_t _A_125khz_14_1[] = {0x00,0x80,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x0E,0x20,0x71,0x20,0x85,0x21,0x01,0x02,0x62,0x02,0x92,0x02,0x92,0x02,0x64,0x02,0x04,0x01,0xF8,0x00,}; | const uint8_t _A_125khz_14_1[] = {0x00,0x80,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x0E,0x20,0x71,0x20,0x85,0x21,0x01,0x02,0x62,0x02,0x92,0x02,0x92,0x02,0x64,0x02,0x04,0x01,0xF8,0x00,}; | ||||||
| @ -341,23 +353,26 @@ const uint8_t _A_iButton_14_5[] = {0x01,0x00,0x1a,0x00,0x00,0x14,0xe2,0x01,0x24, | |||||||
| const uint8_t _A_iButton_14_6[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x24,0x00,0x23,0x80,0x20,0xF0,0x10,0x0C,0x0D,0xE2,0x02,0x91,0x01,0x69,0x01,0x15,0x01,0x8D,0x00,0x4D,0x00,0x3E,0x00,}; | const uint8_t _A_iButton_14_6[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x24,0x00,0x23,0x80,0x20,0xF0,0x10,0x0C,0x0D,0xE2,0x02,0x91,0x01,0x69,0x01,0x15,0x01,0x8D,0x00,0x4D,0x00,0x3E,0x00,}; | ||||||
| const uint8_t *_A_iButton_14[] = {_A_iButton_14_0,_A_iButton_14_1,_A_iButton_14_2,_A_iButton_14_3,_A_iButton_14_4,_A_iButton_14_5,_A_iButton_14_6}; | const uint8_t *_A_iButton_14[] = {_A_iButton_14_0,_A_iButton_14_1,_A_iButton_14_2,_A_iButton_14_3,_A_iButton_14_4,_A_iButton_14_5,_A_iButton_14_6}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Detailed_chip_17x13_0[] = {0x01,0x00,0x1e,0x00,0xfe,0x5f,0xe0,0x10,0x2c,0x04,0x02,0x23,0x11,0x80,0xe4,0x62,0x50,0x1a,0xff,0xc2,0x03,0x21,0x84,0x00,0x9a,0xbf,0xf4,0x08,0x98,0x5c,0x83,0xa4,0x23,0x20,}; |  | ||||||
| const uint8_t *_I_Detailed_chip_17x13[] = {_I_Detailed_chip_17x13_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Medium_chip_22x21_0[] = {0x01,0x00,0x35,0x00,0xfe,0x7f,0xe1,0xf0,0x28,0x04,0x43,0xf3,0xff,0x93,0xe1,0x6a,0x52,0x8e,0x2f,0xfe,0x51,0x25,0x80,0x4a,0x72,0xb6,0x79,0x55,0x76,0xc1,0x2e,0xaa,0xc0,0x25,0x51,0xdc,0x00,0x14,0x70,0x00,0x56,0xae,0x81,0x47,0x2b,0x7d,0x95,0x07,0x48,0x46,0x42,0x92,0x17,0x90,0xd4,0x87,0x64,}; | const uint8_t _I_Medium_chip_22x21_0[] = {0x01,0x00,0x35,0x00,0xfe,0x7f,0xe1,0xf0,0x28,0x04,0x43,0xf3,0xff,0x93,0xe1,0x6a,0x52,0x8e,0x2f,0xfe,0x51,0x25,0x80,0x4a,0x72,0xb6,0x79,0x55,0x76,0xc1,0x2e,0xaa,0xc0,0x25,0x51,0xdc,0x00,0x14,0x70,0x00,0x56,0xae,0x81,0x47,0x2b,0x7d,0x95,0x07,0x48,0x46,0x42,0x92,0x17,0x90,0xd4,0x87,0x64,}; | ||||||
| const uint8_t *_I_Medium_chip_22x21[] = {_I_Medium_chip_22x21_0}; | const uint8_t *_I_Medium_chip_22x21[] = {_I_Medium_chip_22x21_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_BatteryBody_52x28_0[] = {0x01,0x00,0x45,0x00,0xe0,0x7f,0x3f,0xe0,0x02,0x87,0xf0,0x21,0xe0,0xc3,0x84,0x50,0x39,0xbf,0xff,0x27,0xfe,0xf3,0x09,0xe0,0x42,0x81,0xab,0x0d,0x03,0x1c,0x2b,0xfc,0x0d,0x48,0x55,0xdc,0x1a,0x90,0x8f,0x18,0x6d,0x41,0xaa,0x1b,0x71,0x4b,0x0d,0xd4,0x1b,0xe0,0xdf,0x1b,0xd5,0xfc,0x1a,0xa5,0x36,0x06,0xac,0x20,0xa7,0xe0,0xdc,0xa5,0x7c,0x7c,0xb7,0xff,0xb4,0x21,0x5c,0xcb,0xc6,}; | const uint8_t _I_Detailed_chip_17x13_0[] = {0x01,0x00,0x1e,0x00,0xfe,0x5f,0xe0,0x10,0x2c,0x04,0x02,0x23,0x11,0x80,0xe4,0x62,0x50,0x1a,0xff,0xc2,0x03,0x21,0x84,0x00,0x9a,0xbf,0xf4,0x08,0x98,0x5c,0x83,0xa4,0x23,0x20,}; | ||||||
| const uint8_t *_I_BatteryBody_52x28[] = {_I_BatteryBody_52x28_0}; | const uint8_t *_I_Detailed_chip_17x13[] = {_I_Detailed_chip_17x13_0}; | ||||||
| 
 |  | ||||||
| const uint8_t _I_FaceCharging_29x14_0[] = {0x01,0x00,0x28,0x00,0xa0,0x00,0x86,0x05,0x60,0x01,0x8c,0x0e,0x61,0x00,0xc0,0x40,0x63,0x10,0x0e,0x04,0x03,0xf9,0x00,0xf0,0x41,0xc0,0x66,0x13,0xb8,0x40,0x94,0xc0,0x07,0x04,0x82,0x00,0xc6,0x11,0x02,0x01,0x8f,0xc2,0x03,0x00,}; |  | ||||||
| const uint8_t *_I_FaceCharging_29x14[] = {_I_FaceCharging_29x14_0}; |  | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Health_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x2f,0x02,0x03,0x40,0x00,0x95,0xe2,0x1f,0x08,0x84,0x00,0xc4,0x12,0x60,0xf1,0x0c,0xb8,}; | const uint8_t _I_Health_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x2f,0x02,0x03,0x40,0x00,0x95,0xe2,0x1f,0x08,0x84,0x00,0xc4,0x12,0x60,0xf1,0x0c,0xb8,}; | ||||||
| const uint8_t *_I_Health_16x16[] = {_I_Health_16x16_0}; | const uint8_t *_I_Health_16x16[] = {_I_Health_16x16_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Temperature_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x1e,0x02,0x01,0x40,0x80,0x80,0x66,0x41,0x02,0xf0,0x40,0xc0,0x23,0xc0,0x80,0x86,0xd4,}; | const uint8_t _I_Voltage_16x16_0[] = {0x01,0x00,0x1a,0x00,0x00,0x24,0x0a,0x01,0x03,0xc0,0x40,0x78,0x10,0x1f,0x04,0x03,0xe1,0x07,0xc0,0x40,0xc0,0xe3,0xc0,0x80,0x58,0x20,0x12,0x00,0xd3,0x00,}; | ||||||
| const uint8_t *_I_Temperature_16x16[] = {_I_Temperature_16x16_0}; | const uint8_t *_I_Voltage_16x16[] = {_I_Voltage_16x16_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_BatteryBody_52x28_0[] = {0x01,0x00,0x45,0x00,0xe0,0x7f,0x3f,0xe0,0x02,0x87,0xf0,0x21,0xe0,0xc3,0x84,0x50,0x39,0xbf,0xff,0x27,0xfe,0xf3,0x09,0xe0,0x42,0x81,0xab,0x0d,0x03,0x1c,0x2b,0xfc,0x0d,0x48,0x55,0xdc,0x1a,0x90,0x8f,0x18,0x6d,0x41,0xaa,0x1b,0x71,0x4b,0x0d,0xd4,0x1b,0xe0,0xdf,0x1b,0xd5,0xfc,0x1a,0xa5,0x36,0x06,0xac,0x20,0xa7,0xe0,0xdc,0xa5,0x7c,0x7c,0xb7,0xff,0xb4,0x21,0x5c,0xcb,0xc6,}; | ||||||
|  | const uint8_t *_I_BatteryBody_52x28[] = {_I_BatteryBody_52x28_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_FaceNormal_29x14_0[] = {0x01,0x00,0x1e,0x00,0x00,0x1c,0xf2,0x01,0x80,0x83,0xd7,0xa0,0x1c,0x08,0x5d,0xf8,0x06,0x30,0xf0,0x1b,0x84,0xcc,0x41,0x10,0x88,0x10,0x0e,0x62,0x10,0x10,0x18,0xf8,0x00,0x42,}; | ||||||
|  | const uint8_t *_I_FaceNormal_29x14[] = {_I_FaceNormal_29x14_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_FaceCharging_29x14_0[] = {0x01,0x00,0x28,0x00,0xa0,0x00,0x86,0x05,0x60,0x01,0x8c,0x0e,0x61,0x00,0xc0,0x40,0x63,0x10,0x0e,0x04,0x03,0xf9,0x00,0xf0,0x41,0xc0,0x66,0x13,0xb8,0x40,0x94,0xc0,0x07,0x04,0x82,0x00,0xc6,0x11,0x02,0x01,0x8f,0xc2,0x03,0x00,}; | ||||||
|  | const uint8_t *_I_FaceCharging_29x14[] = {_I_FaceCharging_29x14_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Battery_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x1e,0x02,0x03,0xc0,0x81,0xc8,0x20,0x80,0x11,0xd0,0x41,0x40,0x72,0x11,0x10,0xda,0x80,}; | const uint8_t _I_Battery_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x1e,0x02,0x03,0xc0,0x81,0xc8,0x20,0x80,0x11,0xd0,0x41,0x40,0x72,0x11,0x10,0xda,0x80,}; | ||||||
| const uint8_t *_I_Battery_16x16[] = {_I_Battery_16x16_0}; | const uint8_t *_I_Battery_16x16[] = {_I_Battery_16x16_0}; | ||||||
| @ -365,63 +380,36 @@ const uint8_t *_I_Battery_16x16[] = {_I_Battery_16x16_0}; | |||||||
| const uint8_t _I_FaceConfused_29x14_0[] = {0x01,0x00,0x30,0x00,0xc0,0x00,0x46,0x1f,0x38,0x80,0xd0,0x22,0x14,0x48,0x0c,0x82,0x0f,0x52,0x80,0xe8,0x21,0x14,0xa0,0x18,0xc2,0xa6,0x59,0x19,0x24,0x27,0x09,0x48,0xa1,0x41,0x2f,0x12,0x4c,0x0c,0x0c,0x51,0x1f,0xc8,0x78,0x0c,0x7f,0xd1,0xf0,0x18,0xc3,0xa3,0x00,0x74,}; | const uint8_t _I_FaceConfused_29x14_0[] = {0x01,0x00,0x30,0x00,0xc0,0x00,0x46,0x1f,0x38,0x80,0xd0,0x22,0x14,0x48,0x0c,0x82,0x0f,0x52,0x80,0xe8,0x21,0x14,0xa0,0x18,0xc2,0xa6,0x59,0x19,0x24,0x27,0x09,0x48,0xa1,0x41,0x2f,0x12,0x4c,0x0c,0x0c,0x51,0x1f,0xc8,0x78,0x0c,0x7f,0xd1,0xf0,0x18,0xc3,0xa3,0x00,0x74,}; | ||||||
| const uint8_t *_I_FaceConfused_29x14[] = {_I_FaceConfused_29x14_0}; | const uint8_t *_I_FaceConfused_29x14[] = {_I_FaceConfused_29x14_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_FaceNormal_29x14_0[] = {0x01,0x00,0x1e,0x00,0x00,0x1c,0xf2,0x01,0x80,0x83,0xd7,0xa0,0x1c,0x08,0x5d,0xf8,0x06,0x30,0xf0,0x1b,0x84,0xcc,0x41,0x10,0x88,0x10,0x0e,0x62,0x10,0x10,0x18,0xf8,0x00,0x42,}; | const uint8_t _I_Temperature_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x1e,0x02,0x01,0x40,0x80,0x80,0x66,0x41,0x02,0xf0,0x40,0xc0,0x23,0xc0,0x80,0x86,0xd4,}; | ||||||
| const uint8_t *_I_FaceNormal_29x14[] = {_I_FaceNormal_29x14_0}; | const uint8_t *_I_Temperature_16x16[] = {_I_Temperature_16x16_0}; | ||||||
| 
 |  | ||||||
| const uint8_t _I_Voltage_16x16_0[] = {0x01,0x00,0x1a,0x00,0x00,0x24,0x0a,0x01,0x03,0xc0,0x40,0x78,0x10,0x1f,0x04,0x03,0xe1,0x07,0xc0,0x40,0xc0,0xe3,0xc0,0x80,0x58,0x20,0x12,0x00,0xd3,0x00,}; |  | ||||||
| const uint8_t *_I_Voltage_16x16[] = {_I_Voltage_16x16_0}; |  | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_FaceNopower_29x14_0[] = {0x01,0x00,0x24,0x00,0x00,0x1f,0x02,0x01,0x60,0x01,0xa7,0x80,0x02,0x57,0xe0,0x48,0xc3,0xe7,0xd0,0x0c,0x04,0x3c,0x39,0x1f,0x88,0x18,0x0c,0x61,0x90,0x60,0x18,0xff,0x82,0x44,0x03,0x38,0x74,0x38,0x2c,0x80,}; | const uint8_t _I_FaceNopower_29x14_0[] = {0x01,0x00,0x24,0x00,0x00,0x1f,0x02,0x01,0x60,0x01,0xa7,0x80,0x02,0x57,0xe0,0x48,0xc3,0xe7,0xd0,0x0c,0x04,0x3c,0x39,0x1f,0x88,0x18,0x0c,0x61,0x90,0x60,0x18,0xff,0x82,0x44,0x03,0x38,0x74,0x38,0x2c,0x80,}; | ||||||
| const uint8_t *_I_FaceNopower_29x14[] = {_I_FaceNopower_29x14_0}; | const uint8_t *_I_FaceNopower_29x14[] = {_I_FaceNopower_29x14_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_RFIDDolphinSend_97x61_0[] = {0x01,0x00,0x8d,0x01,0x00,0x0f,0xfa,0x3e,0x04,0x2a,0x00,0x2d,0x78,0x10,0x1f,0x04,0x04,0x0a,0x38,0x00,0x62,0xcc,0x00,0x43,0x06,0x06,0x44,0x30,0x04,0x31,0x80,0x31,0x07,0x48,0x00,0x50,0x20,0x10,0xc8,0x01,0x64,0x0c,0x1d,0x04,0x28,0x24,0x83,0xd2,0x81,0x04,0xc4,0x18,0x42,0xc3,0x01,0x90,0x30,0xbe,0x05,0x51,0x29,0xa0,0x74,0x60,0x80,0xc1,0x84,0x0b,0x44,0x5e,0x43,0x73,0x82,0x41,0x20,0x1e,0x4a,0x68,0x31,0x27,0x90,0x48,0x84,0x20,0x18,0x31,0x7e,0x64,0x06,0x20,0x0c,0x2a,0x14,0x12,0x40,0x0c,0x28,0xa0,0xc4,0x41,0x87,0x81,0x17,0x08,0x30,0xa0,0xfd,0x08,0x0c,0x20,0xfc,0x38,0x08,0xc4,0x24,0x32,0x95,0x02,0x18,0xc2,0x61,0x18,0x09,0x20,0x31,0x03,0x25,0x84,0x1d,0x88,0x30,0x62,0x21,0x96,0xe2,0x44,0x22,0x00,0xc2,0x26,0xa0,0x64,0x68,0x80,0xc4,0x33,0x9e,0x92,0x9f,0x00,0xa3,0x48,0x24,0x00,0xc4,0x40,0xa4,0xa8,0x18,0xa9,0xb5,0x9b,0x48,0x28,0x05,0xa1,0x06,0x22,0xd4,0xa3,0x7e,0x05,0x98,0xe0,0x4f,0x22,0xcf,0x58,0x6f,0x80,0x10,0x34,0x24,0x31,0x3a,0x52,0x0f,0xe0,0x03,0x0c,0xf1,0xee,0x2d,0x63,0x00,0x0c,0x0f,0xe0,0x13,0x28,0xa0,0x31,0xa0,0x3f,0x08,0x18,0x10,0x45,0xa2,0xe3,0x40,0x00,0xf4,0x3f,0xe1,0xa1,0x84,0x02,0x94,0x18,0xb0,0xc0,0x63,0xc6,0x3f,0xe0,0x31,0x87,0x03,0x1e,0x11,0x3c,0x80,0x47,0xc1,0x90,0x56,0x1b,0x06,0x01,0xc0,0x20,0x06,0x17,0x88,0xf8,0x60,0xa0,0xc7,0x31,0x8a,0x58,0x60,0xe1,0x99,0x00,0x08,0x9a,0x01,0x06,0xd9,0x10,0x03,0x1f,0x44,0x19,0x43,0xc3,0x40,0xc4,0x2c,0x19,0x58,0x08,0x29,0xa0,0x60,0x0c,0xf2,0x00,0x27,0x02,0x05,0x20,0x06,0x4d,0x02,0x0b,0xc0,0x02,0x08,0x3c,0x80,0x09,0xa0,0x39,0x0a,0xd4,0x41,0x8f,0x50,0x05,0x09,0xa4,0x5b,0x4d,0x00,0xd8,0x23,0xc4,0x96,0x20,0xc7,0xac,0x40,0x2d,0x53,0x00,0x64,0x6b,0x20,0x1d,0x4a,0x08,0x32,0x2a,0x90,0x0d,0x46,0x0e,0x02,0x0c,0x79,0x51,0x08,0x61,0xf0,0x20,0x63,0xc5,0x4b,0x83,0x1e,0xfe,0x57,0xd3,0x51,0x40,0xbe,0xc0,0x08,0x42,0x00,0x53,0x30,0xe8,0x3f,0x50,0x14,0x73,0x80,0x0b,0xeb,0x07,0x61,0x40,0x00,0x7d,0x5f,0xf8,0x38,0x32,0x7a,0x03,0xf7,0x55,0xa6,0x78,0x19,0x54,0x0c,0xa8,0x32,0xa0,0x19,0xa0,0x65,0xc4,0x0b,0xe2,0x00,0x98,0x40,0x33,0xc1,0x92,0xfa,0x10,0x67,0x80,0x08,}; |  | ||||||
| const uint8_t *_I_RFIDDolphinSend_97x61[] = {_I_RFIDDolphinSend_97x61_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_RFIDDolphinSuccess_108x57_0[] = {0x01,0x00,0xe7,0x01,0x00,0x0f,0x03,0xff,0x1f,0x06,0xd4,0xe2,0x01,0xe0,0x06,0xd4,0x18,0x04,0x30,0x30,0x64,0x60,0x20,0x20,0x31,0x86,0x03,0x62,0x80,0x03,0x28,0x80,0x36,0x24,0x00,0x36,0x00,0x28,0x5c,0xc3,0xe6,0x00,0x58,0x40,0xec,0xc1,0xb1,0x04,0x02,0x19,0x24,0x80,0x0b,0x02,0x02,0x40,0x37,0xc4,0x8c,0x2e,0x40,0x6f,0x93,0x8b,0x81,0x07,0x06,0xdc,0xc2,0x38,0x66,0x50,0x6a,0xe2,0x27,0xe0,0xd2,0xfc,0x08,0x09,0x0c,0x9c,0x4b,0x98,0x34,0xa0,0xe1,0xd5,0x06,0x8f,0x92,0xc2,0x05,0x1e,0x42,0xe1,0x81,0xa3,0xe2,0xf0,0xbc,0x4c,0x1a,0xff,0x2f,0x9b,0x80,0xd8,0xca,0x05,0x1f,0x97,0xfd,0xf8,0x60,0xd2,0x01,0x1e,0x00,0x1a,0x5c,0x00,0x08,0xc9,0xc1,0xab,0x40,0xf9,0x83,0x46,0x61,0x00,0xd8,0x4a,0x81,0xab,0xa0,0xf3,0x5f,0xc6,0x05,0x58,0x8a,0xa4,0x09,0x76,0x21,0xb1,0xf2,0x83,0x4f,0x5d,0x1a,0x01,0x8c,0x90,0x1a,0x31,0x0d,0x07,0xa9,0x16,0x50,0x0a,0xac,0x34,0xba,0x42,0xa1,0x88,0x50,0x23,0xaa,0x72,0xe0,0x6a,0xa1,0x4a,0x32,0x39,0x88,0x6c,0x60,0xc7,0x82,0xb0,0x55,0x60,0xa2,0x92,0x80,0xc0,0x43,0x63,0x03,0x25,0x96,0xe3,0x54,0x33,0x18,0xc4,0x90,0x22,0x21,0x81,0x81,0x03,0x4a,0xa9,0x55,0x7a,0x17,0xf3,0x82,0x9f,0x6d,0x5e,0xa9,0xb6,0x50,0x38,0x70,0x35,0x70,0x15,0x5a,0xa9,0xb8,0xa3,0x46,0x12,0x06,0x9f,0x83,0x54,0x8a,0x28,0x80,0x34,0xfc,0x08,0x93,0xaa,0xc7,0x40,0x83,0x83,0x81,0xd3,0xa1,0xd1,0x08,0x84,0x0c,0x24,0x3f,0xed,0x54,0x18,0x26,0x50,0x20,0xd9,0x42,0x21,0x90,0x4c,0x07,0xff,0xae,0x52,0x20,0x6a,0xc4,0x23,0x1f,0x88,0x3f,0xf0,0x1a,0x45,0x31,0xe7,0x03,0x4a,0x41,0xe0,0x69,0x0f,0xc2,0x1e,0x0d,0x19,0x80,0x48,0xa2,0x10,0xc5,0x68,0xdf,0x0a,0x82,0xb9,0x28,0x22,0x2c,0xe3,0x0a,0xd1,0x2b,0x0f,0x00,0x3c,0x22,0x91,0x53,0x9c,0x50,0x1a,0x30,0x08,0x39,0x1c,0x60,0x6d,0x12,0x3d,0x8c,0xc2,0x51,0x00,0x17,0x0c,0xe2,0x01,0xff,0x83,0x84,0xc6,0x40,0xb0,0x19,0x84,0xd0,0x1a,0x5c,0x08,0x1f,0xf8,0x8c,0x50,0x43,0x08,0xce,0x2d,0x06,0x71,0x5f,0x17,0xfe,0x12,0xdf,0x20,0x69,0x55,0x01,0xa6,0x00,0x18,0x40,0xa4,0x80,0x63,0x3c,0xb5,0x03,0x56,0x08,0x8b,0x20,0x10,0xcf,0x03,0x62,0x08,0x20,0x00,0x94,0xc6,0x01,0x70,0x01,0x0c,0xe8,0x36,0x20,0xd3,0xe0,0x00,0xcb,0x10,0x02,0x19,0xf3,0x9c,0x41,0xa3,0x15,0x31,0x90,0x00,0x70,0xc0,0x21,0xdd,0x86,0xc4,0x78,0x3e,0xa3,0x71,0xe0,0x30,0x20,0x31,0xbe,0x86,0xc4,0x1a,0x35,0x40,0x20,0x8d,0x89,0x28,0x5b,0xa0,0xd9,0xea,0x3d,0x44,0x42,0x87,0x83,0x48,0x36,0x49,0xe1,0xa0,0x75,0x67,0x8d,0x41,0x54,0x14,0x03,0xf5,0x2a,0x06,0x96,0x03,0x54,0xc4,0x14,0xd0,0x83,0x4a,0xfb,0x35,0x06,0x90,0x38,0x4e,0x46,0xb4,0x10,0xd9,0x81,0x49,0x72,0x40,0x01,0x0a,0x95,0xd4,0x36,0x20,0xd7,0x55,0x10,}; | const uint8_t _I_RFIDDolphinSuccess_108x57_0[] = {0x01,0x00,0xe7,0x01,0x00,0x0f,0x03,0xff,0x1f,0x06,0xd4,0xe2,0x01,0xe0,0x06,0xd4,0x18,0x04,0x30,0x30,0x64,0x60,0x20,0x20,0x31,0x86,0x03,0x62,0x80,0x03,0x28,0x80,0x36,0x24,0x00,0x36,0x00,0x28,0x5c,0xc3,0xe6,0x00,0x58,0x40,0xec,0xc1,0xb1,0x04,0x02,0x19,0x24,0x80,0x0b,0x02,0x02,0x40,0x37,0xc4,0x8c,0x2e,0x40,0x6f,0x93,0x8b,0x81,0x07,0x06,0xdc,0xc2,0x38,0x66,0x50,0x6a,0xe2,0x27,0xe0,0xd2,0xfc,0x08,0x09,0x0c,0x9c,0x4b,0x98,0x34,0xa0,0xe1,0xd5,0x06,0x8f,0x92,0xc2,0x05,0x1e,0x42,0xe1,0x81,0xa3,0xe2,0xf0,0xbc,0x4c,0x1a,0xff,0x2f,0x9b,0x80,0xd8,0xca,0x05,0x1f,0x97,0xfd,0xf8,0x60,0xd2,0x01,0x1e,0x00,0x1a,0x5c,0x00,0x08,0xc9,0xc1,0xab,0x40,0xf9,0x83,0x46,0x61,0x00,0xd8,0x4a,0x81,0xab,0xa0,0xf3,0x5f,0xc6,0x05,0x58,0x8a,0xa4,0x09,0x76,0x21,0xb1,0xf2,0x83,0x4f,0x5d,0x1a,0x01,0x8c,0x90,0x1a,0x31,0x0d,0x07,0xa9,0x16,0x50,0x0a,0xac,0x34,0xba,0x42,0xa1,0x88,0x50,0x23,0xaa,0x72,0xe0,0x6a,0xa1,0x4a,0x32,0x39,0x88,0x6c,0x60,0xc7,0x82,0xb0,0x55,0x60,0xa2,0x92,0x80,0xc0,0x43,0x63,0x03,0x25,0x96,0xe3,0x54,0x33,0x18,0xc4,0x90,0x22,0x21,0x81,0x81,0x03,0x4a,0xa9,0x55,0x7a,0x17,0xf3,0x82,0x9f,0x6d,0x5e,0xa9,0xb6,0x50,0x38,0x70,0x35,0x70,0x15,0x5a,0xa9,0xb8,0xa3,0x46,0x12,0x06,0x9f,0x83,0x54,0x8a,0x28,0x80,0x34,0xfc,0x08,0x93,0xaa,0xc7,0x40,0x83,0x83,0x81,0xd3,0xa1,0xd1,0x08,0x84,0x0c,0x24,0x3f,0xed,0x54,0x18,0x26,0x50,0x20,0xd9,0x42,0x21,0x90,0x4c,0x07,0xff,0xae,0x52,0x20,0x6a,0xc4,0x23,0x1f,0x88,0x3f,0xf0,0x1a,0x45,0x31,0xe7,0x03,0x4a,0x41,0xe0,0x69,0x0f,0xc2,0x1e,0x0d,0x19,0x80,0x48,0xa2,0x10,0xc5,0x68,0xdf,0x0a,0x82,0xb9,0x28,0x22,0x2c,0xe3,0x0a,0xd1,0x2b,0x0f,0x00,0x3c,0x22,0x91,0x53,0x9c,0x50,0x1a,0x30,0x08,0x39,0x1c,0x60,0x6d,0x12,0x3d,0x8c,0xc2,0x51,0x00,0x17,0x0c,0xe2,0x01,0xff,0x83,0x84,0xc6,0x40,0xb0,0x19,0x84,0xd0,0x1a,0x5c,0x08,0x1f,0xf8,0x8c,0x50,0x43,0x08,0xce,0x2d,0x06,0x71,0x5f,0x17,0xfe,0x12,0xdf,0x20,0x69,0x55,0x01,0xa6,0x00,0x18,0x40,0xa4,0x80,0x63,0x3c,0xb5,0x03,0x56,0x08,0x8b,0x20,0x10,0xcf,0x03,0x62,0x08,0x20,0x00,0x94,0xc6,0x01,0x70,0x01,0x0c,0xe8,0x36,0x20,0xd3,0xe0,0x00,0xcb,0x10,0x02,0x19,0xf3,0x9c,0x41,0xa3,0x15,0x31,0x90,0x00,0x70,0xc0,0x21,0xdd,0x86,0xc4,0x78,0x3e,0xa3,0x71,0xe0,0x30,0x20,0x31,0xbe,0x86,0xc4,0x1a,0x35,0x40,0x20,0x8d,0x89,0x28,0x5b,0xa0,0xd9,0xea,0x3d,0x44,0x42,0x87,0x83,0x48,0x36,0x49,0xe1,0xa0,0x75,0x67,0x8d,0x41,0x54,0x14,0x03,0xf5,0x2a,0x06,0x96,0x03,0x54,0xc4,0x14,0xd0,0x83,0x4a,0xfb,0x35,0x06,0x90,0x38,0x4e,0x46,0xb4,0x10,0xd9,0x81,0x49,0x72,0x40,0x01,0x0a,0x95,0xd4,0x36,0x20,0xd7,0x55,0x10,}; | ||||||
| const uint8_t *_I_RFIDDolphinSuccess_108x57[] = {_I_RFIDDolphinSuccess_108x57_0}; | const uint8_t *_I_RFIDDolphinSuccess_108x57[] = {_I_RFIDDolphinSuccess_108x57_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_RFIDDolphinReceive_97x61_0[] = {0x01,0x00,0x87,0x01,0x00,0x0f,0xfa,0x3e,0x04,0x28,0x08,0x2d,0x78,0x10,0x1f,0x00,0x24,0x70,0x01,0x86,0x98,0x00,0x86,0x0c,0x0c,0x88,0x60,0x08,0x63,0x10,0x0a,0x00,0x31,0xa0,0x40,0x21,0x90,0x03,0x04,0x1a,0x5a,0x08,0x50,0xe9,0x01,0x23,0x20,0x07,0x88,0x30,0xc5,0xa6,0x03,0x10,0x61,0xfc,0x0a,0xa2,0x2d,0x48,0x0c,0x82,0x20,0x04,0x18,0x40,0x40,0x42,0x44,0x37,0x28,0x80,0x30,0xbc,0x94,0xd0,0x62,0x4f,0x20,0x91,0x08,0x44,0x12,0x01,0x17,0xe6,0x40,0x42,0x45,0x00,0xa1,0x03,0x08,0xa8,0x31,0x41,0x88,0x83,0x0f,0x03,0x08,0x06,0x1c,0x1f,0xa1,0x01,0x84,0x1f,0x8a,0x31,0x09,0x0c,0xa5,0x40,0x86,0x30,0x98,0x46,0x02,0x48,0x0c,0x40,0xc9,0x61,0x00,0xe2,0x0c,0x18,0x88,0x65,0xb8,0x85,0x51,0x06,0x21,0x34,0x83,0x23,0x44,0x06,0x29,0x1c,0xb4,0x94,0xf8,0x05,0x19,0x12,0x20,0xc2,0x40,0xb4,0xa8,0x18,0xa9,0xb5,0x9b,0x48,0x28,0x05,0xa1,0x06,0x22,0xd4,0xa3,0x7e,0x05,0x98,0xe0,0x62,0x0c,0xf6,0x86,0xf8,0x16,0x63,0x42,0x06,0x0b,0xa1,0x60,0xfe,0x06,0xe8,0xcf,0x23,0x0d,0x53,0x00,0x14,0x0f,0xe0,0xea,0x28,0xa0,0x31,0xa0,0x3f,0x08,0x18,0x10,0x45,0xa2,0x11,0x20,0x01,0xf4,0x3f,0xe0,0x81,0x84,0x02,0x94,0x18,0xb0,0xc0,0x63,0xc6,0x3f,0xe0,0x31,0x87,0x03,0x1e,0x11,0x3c,0x80,0x47,0xc1,0x91,0x18,0x80,0x58,0x30,0x0e,0x01,0x00,0x30,0xbc,0x47,0xc3,0x05,0x06,0x3c,0x52,0x00,0xe4,0x20,0xcc,0x80,0x04,0x4d,0x00,0x83,0x73,0x08,0x01,0x8f,0xa2,0x0c,0xa1,0xe1,0xa0,0x62,0x16,0x0c,0xac,0x04,0x14,0xd0,0x30,0x08,0x80,0x31,0xb8,0x10,0x27,0x89,0x03,0x1e,0x81,0x05,0xe0,0x01,0x04,0x1e,0x40,0x04,0xd0,0x1c,0x85,0x6a,0x20,0xc7,0xa8,0x02,0x84,0xd2,0x34,0x00,0x63,0x6c,0x11,0xe2,0x4b,0x10,0x63,0xd6,0x20,0x16,0xa9,0x80,0x32,0x35,0x90,0x0e,0xa5,0x04,0x19,0x15,0x48,0x06,0xa3,0x07,0x01,0x06,0x3c,0xa8,0x84,0x30,0xf8,0x10,0x31,0xe2,0xa5,0xc1,0x8f,0x7f,0x2b,0xe9,0xa8,0xa0,0x5f,0x60,0x04,0x21,0x00,0x29,0x98,0x74,0x1f,0xa8,0x0a,0x39,0xc0,0x05,0xf5,0x83,0xb0,0xa0,0x00,0x3e,0xaf,0xfc,0x1c,0x19,0x3d,0x01,0xfb,0xaa,0xd3,0x3c,0x0c,0xaa,0x06,0x54,0x19,0x50,0x0c,0xd0,0x32,0xe2,0x05,0xf1,0x00,0x4c,0x20,0x19,0xe0,0xc9,0x7d,0x08,0x33,0xc0,0x04,}; |  | ||||||
| const uint8_t *_I_RFIDDolphinReceive_97x61[] = {_I_RFIDDolphinReceive_97x61_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_RFIDBigChip_37x36_0[] = {0x01,0x00,0x6e,0x00,0x83,0x01,0x0f,0xcd,0xff,0x00,0x0c,0x1e,0x24,0x08,0x28,0x47,0x24,0x12,0x51,0x39,0x28,0x24,0xa2,0x91,0x5e,0x07,0xab,0xfe,0x04,0x1c,0x04,0xaa,0x01,0x15,0x02,0x28,0x4c,0x81,0x2c,0x04,0x4e,0x05,0xfc,0x08,0x35,0x59,0x06,0x02,0x81,0x15,0xca,0xe4,0x26,0xf2,0x10,0x70,0xd7,0x66,0x11,0x70,0x70,0xd4,0x20,0x14,0x10,0x70,0xc7,0x68,0x13,0x70,0x70,0xd4,0x28,0x10,0x10,0x4a,0x84,0xc6,0x80,0x13,0x10,0xe8,0xd0,0x03,0xa2,0x27,0x19,0xf0,0x9c,0x46,0x28,0x3b,0x42,0xcf,0x96,0x6a,0xd4,0x13,0x6f,0x2a,0x2c,0xa2,0x90,0x54,0x59,0xfe,0x52,0xa7,0x02,0x4f,0x9f,0xf1,0x52,0x60,}; | const uint8_t _I_RFIDBigChip_37x36_0[] = {0x01,0x00,0x6e,0x00,0x83,0x01,0x0f,0xcd,0xff,0x00,0x0c,0x1e,0x24,0x08,0x28,0x47,0x24,0x12,0x51,0x39,0x28,0x24,0xa2,0x91,0x5e,0x07,0xab,0xfe,0x04,0x1c,0x04,0xaa,0x01,0x15,0x02,0x28,0x4c,0x81,0x2c,0x04,0x4e,0x05,0xfc,0x08,0x35,0x59,0x06,0x02,0x81,0x15,0xca,0xe4,0x26,0xf2,0x10,0x70,0xd7,0x66,0x11,0x70,0x70,0xd4,0x20,0x14,0x10,0x70,0xc7,0x68,0x13,0x70,0x70,0xd4,0x28,0x10,0x10,0x4a,0x84,0xc6,0x80,0x13,0x10,0xe8,0xd0,0x03,0xa2,0x27,0x19,0xf0,0x9c,0x46,0x28,0x3b,0x42,0xcf,0x96,0x6a,0xd4,0x13,0x6f,0x2a,0x2c,0xa2,0x90,0x54,0x59,0xfe,0x52,0xa7,0x02,0x4f,0x9f,0xf1,0x52,0x60,}; | ||||||
| const uint8_t *_I_RFIDBigChip_37x36[] = {_I_RFIDBigChip_37x36_0}; | const uint8_t *_I_RFIDBigChip_37x36[] = {_I_RFIDBigChip_37x36_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_SDQuestion_35x43_0[] = {0x01,0x00,0x67,0x00,0xf8,0x7f,0xc0,0x03,0x03,0xfc,0x01,0x0a,0x0f,0x38,0xa4,0xe4,0xa4,0x80,0x4f,0x0c,0x20,0x13,0xc0,0x9f,0x80,0x02,0x15,0xfe,0x00,0x04,0x29,0xfc,0x03,0xfd,0x07,0xfa,0x47,0xe7,0xdf,0xc8,0x3f,0xea,0x1f,0x7f,0xfc,0x41,0xff,0xb8,0xff,0xf8,0x10,0x7f,0xe0,0x4e,0xef,0x86,0x08,0x68,0x33,0xf1,0x10,0xff,0x3f,0xf1,0xf1,0x60,0x81,0x06,0x1e,0x36,0x10,0x20,0xe1,0xc0,0x87,0xc7,0x02,0x0f,0xd3,0xff,0xe3,0x02,0x0f,0xe8,0x08,0x7f,0xd0,0x21,0x89,0xc4,0x08,0x9f,0x70,0x21,0x9a,0x08,0x08,0xc1,0x89,0x02,0x20,0x62,0x40,0x8f,0xfe,0x68,0x98,}; | const uint8_t _I_RFIDDolphinReceive_97x61_0[] = {0x01,0x00,0x87,0x01,0x00,0x0f,0xfa,0x3e,0x04,0x28,0x08,0x2d,0x78,0x10,0x1f,0x00,0x24,0x70,0x01,0x86,0x98,0x00,0x86,0x0c,0x0c,0x88,0x60,0x08,0x63,0x10,0x0a,0x00,0x31,0xa0,0x40,0x21,0x90,0x03,0x04,0x1a,0x5a,0x08,0x50,0xe9,0x01,0x23,0x20,0x07,0x88,0x30,0xc5,0xa6,0x03,0x10,0x61,0xfc,0x0a,0xa2,0x2d,0x48,0x0c,0x82,0x20,0x04,0x18,0x40,0x40,0x42,0x44,0x37,0x28,0x80,0x30,0xbc,0x94,0xd0,0x62,0x4f,0x20,0x91,0x08,0x44,0x12,0x01,0x17,0xe6,0x40,0x42,0x45,0x00,0xa1,0x03,0x08,0xa8,0x31,0x41,0x88,0x83,0x0f,0x03,0x08,0x06,0x1c,0x1f,0xa1,0x01,0x84,0x1f,0x8a,0x31,0x09,0x0c,0xa5,0x40,0x86,0x30,0x98,0x46,0x02,0x48,0x0c,0x40,0xc9,0x61,0x00,0xe2,0x0c,0x18,0x88,0x65,0xb8,0x85,0x51,0x06,0x21,0x34,0x83,0x23,0x44,0x06,0x29,0x1c,0xb4,0x94,0xf8,0x05,0x19,0x12,0x20,0xc2,0x40,0xb4,0xa8,0x18,0xa9,0xb5,0x9b,0x48,0x28,0x05,0xa1,0x06,0x22,0xd4,0xa3,0x7e,0x05,0x98,0xe0,0x62,0x0c,0xf6,0x86,0xf8,0x16,0x63,0x42,0x06,0x0b,0xa1,0x60,0xfe,0x06,0xe8,0xcf,0x23,0x0d,0x53,0x00,0x14,0x0f,0xe0,0xea,0x28,0xa0,0x31,0xa0,0x3f,0x08,0x18,0x10,0x45,0xa2,0x11,0x20,0x01,0xf4,0x3f,0xe0,0x81,0x84,0x02,0x94,0x18,0xb0,0xc0,0x63,0xc6,0x3f,0xe0,0x31,0x87,0x03,0x1e,0x11,0x3c,0x80,0x47,0xc1,0x91,0x18,0x80,0x58,0x30,0x0e,0x01,0x00,0x30,0xbc,0x47,0xc3,0x05,0x06,0x3c,0x52,0x00,0xe4,0x20,0xcc,0x80,0x04,0x4d,0x00,0x83,0x73,0x08,0x01,0x8f,0xa2,0x0c,0xa1,0xe1,0xa0,0x62,0x16,0x0c,0xac,0x04,0x14,0xd0,0x30,0x08,0x80,0x31,0xb8,0x10,0x27,0x89,0x03,0x1e,0x81,0x05,0xe0,0x01,0x04,0x1e,0x40,0x04,0xd0,0x1c,0x85,0x6a,0x20,0xc7,0xa8,0x02,0x84,0xd2,0x34,0x00,0x63,0x6c,0x11,0xe2,0x4b,0x10,0x63,0xd6,0x20,0x16,0xa9,0x80,0x32,0x35,0x90,0x0e,0xa5,0x04,0x19,0x15,0x48,0x06,0xa3,0x07,0x01,0x06,0x3c,0xa8,0x84,0x30,0xf8,0x10,0x31,0xe2,0xa5,0xc1,0x8f,0x7f,0x2b,0xe9,0xa8,0xa0,0x5f,0x60,0x04,0x21,0x00,0x29,0x98,0x74,0x1f,0xa8,0x0a,0x39,0xc0,0x05,0xf5,0x83,0xb0,0xa0,0x00,0x3e,0xaf,0xfc,0x1c,0x19,0x3d,0x01,0xfb,0xaa,0xd3,0x3c,0x0c,0xaa,0x06,0x54,0x19,0x50,0x0c,0xd0,0x32,0xe2,0x05,0xf1,0x00,0x4c,0x20,0x19,0xe0,0xc9,0x7d,0x08,0x33,0xc0,0x04,}; | ||||||
| const uint8_t *_I_SDQuestion_35x43[] = {_I_SDQuestion_35x43_0}; | const uint8_t *_I_RFIDDolphinReceive_97x61[] = {_I_RFIDDolphinReceive_97x61_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_RFIDDolphinSend_97x61_0[] = {0x01,0x00,0x8d,0x01,0x00,0x0f,0xfa,0x3e,0x04,0x2a,0x00,0x2d,0x78,0x10,0x1f,0x04,0x04,0x0a,0x38,0x00,0x62,0xcc,0x00,0x43,0x06,0x06,0x44,0x30,0x04,0x31,0x80,0x31,0x07,0x48,0x00,0x50,0x20,0x10,0xc8,0x01,0x64,0x0c,0x1d,0x04,0x28,0x24,0x83,0xd2,0x81,0x04,0xc4,0x18,0x42,0xc3,0x01,0x90,0x30,0xbe,0x05,0x51,0x29,0xa0,0x74,0x60,0x80,0xc1,0x84,0x0b,0x44,0x5e,0x43,0x73,0x82,0x41,0x20,0x1e,0x4a,0x68,0x31,0x27,0x90,0x48,0x84,0x20,0x18,0x31,0x7e,0x64,0x06,0x20,0x0c,0x2a,0x14,0x12,0x40,0x0c,0x28,0xa0,0xc4,0x41,0x87,0x81,0x17,0x08,0x30,0xa0,0xfd,0x08,0x0c,0x20,0xfc,0x38,0x08,0xc4,0x24,0x32,0x95,0x02,0x18,0xc2,0x61,0x18,0x09,0x20,0x31,0x03,0x25,0x84,0x1d,0x88,0x30,0x62,0x21,0x96,0xe2,0x44,0x22,0x00,0xc2,0x26,0xa0,0x64,0x68,0x80,0xc4,0x33,0x9e,0x92,0x9f,0x00,0xa3,0x48,0x24,0x00,0xc4,0x40,0xa4,0xa8,0x18,0xa9,0xb5,0x9b,0x48,0x28,0x05,0xa1,0x06,0x22,0xd4,0xa3,0x7e,0x05,0x98,0xe0,0x4f,0x22,0xcf,0x58,0x6f,0x80,0x10,0x34,0x24,0x31,0x3a,0x52,0x0f,0xe0,0x03,0x0c,0xf1,0xee,0x2d,0x63,0x00,0x0c,0x0f,0xe0,0x13,0x28,0xa0,0x31,0xa0,0x3f,0x08,0x18,0x10,0x45,0xa2,0xe3,0x40,0x00,0xf4,0x3f,0xe1,0xa1,0x84,0x02,0x94,0x18,0xb0,0xc0,0x63,0xc6,0x3f,0xe0,0x31,0x87,0x03,0x1e,0x11,0x3c,0x80,0x47,0xc1,0x90,0x56,0x1b,0x06,0x01,0xc0,0x20,0x06,0x17,0x88,0xf8,0x60,0xa0,0xc7,0x31,0x8a,0x58,0x60,0xe1,0x99,0x00,0x08,0x9a,0x01,0x06,0xd9,0x10,0x03,0x1f,0x44,0x19,0x43,0xc3,0x40,0xc4,0x2c,0x19,0x58,0x08,0x29,0xa0,0x60,0x0c,0xf2,0x00,0x27,0x02,0x05,0x20,0x06,0x4d,0x02,0x0b,0xc0,0x02,0x08,0x3c,0x80,0x09,0xa0,0x39,0x0a,0xd4,0x41,0x8f,0x50,0x05,0x09,0xa4,0x5b,0x4d,0x00,0xd8,0x23,0xc4,0x96,0x20,0xc7,0xac,0x40,0x2d,0x53,0x00,0x64,0x6b,0x20,0x1d,0x4a,0x08,0x32,0x2a,0x90,0x0d,0x46,0x0e,0x02,0x0c,0x79,0x51,0x08,0x61,0xf0,0x20,0x63,0xc5,0x4b,0x83,0x1e,0xfe,0x57,0xd3,0x51,0x40,0xbe,0xc0,0x08,0x42,0x00,0x53,0x30,0xe8,0x3f,0x50,0x14,0x73,0x80,0x0b,0xeb,0x07,0x61,0x40,0x00,0x7d,0x5f,0xf8,0x38,0x32,0x7a,0x03,0xf7,0x55,0xa6,0x78,0x19,0x54,0x0c,0xa8,0x32,0xa0,0x19,0xa0,0x65,0xc4,0x0b,0xe2,0x00,0x98,0x40,0x33,0xc1,0x92,0xfa,0x10,0x67,0x80,0x08,}; | ||||||
|  | const uint8_t *_I_RFIDDolphinSend_97x61[] = {_I_RFIDDolphinSend_97x61_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_SDError_43x35_0[] = {0x01,0x00,0x6f,0x00,0xff,0x7f,0xc0,0x05,0x03,0x80,0x82,0x8e,0x08,0x05,0x59,0xe8,0x16,0x82,0x2d,0x30,0x8c,0x43,0x20,0xc0,0x51,0xb0,0x43,0x23,0x10,0x30,0x88,0xf0,0x20,0xdb,0x08,0x08,0x2c,0x70,0x10,0x3f,0x00,0x5c,0x80,0xa8,0x11,0x60,0xea,0x0a,0x54,0x8f,0xe5,0x99,0xfe,0x4f,0xc0,0xa6,0x70,0x10,0x89,0x60,0x23,0xff,0x91,0xa9,0x70,0x25,0xff,0x21,0xa9,0x70,0x2b,0xfe,0x42,0xc9,0x60,0x30,0x7e,0x40,0x89,0x42,0x30,0x12,0x08,0x80,0x14,0xa0,0x11,0x10,0x28,0xc0,0x66,0x10,0x08,0x74,0x30,0x8f,0xe0,0x58,0x5c,0x88,0x14,0xc0,0x43,0x01,0x8f,0x81,0x4f,0x05,0x20,0x02,0x9f,0xf3,0x80,0xcb,0x10,}; | const uint8_t _I_SDError_43x35_0[] = {0x01,0x00,0x6f,0x00,0xff,0x7f,0xc0,0x05,0x03,0x80,0x82,0x8e,0x08,0x05,0x59,0xe8,0x16,0x82,0x2d,0x30,0x8c,0x43,0x20,0xc0,0x51,0xb0,0x43,0x23,0x10,0x30,0x88,0xf0,0x20,0xdb,0x08,0x08,0x2c,0x70,0x10,0x3f,0x00,0x5c,0x80,0xa8,0x11,0x60,0xea,0x0a,0x54,0x8f,0xe5,0x99,0xfe,0x4f,0xc0,0xa6,0x70,0x10,0x89,0x60,0x23,0xff,0x91,0xa9,0x70,0x25,0xff,0x21,0xa9,0x70,0x2b,0xfe,0x42,0xc9,0x60,0x30,0x7e,0x40,0x89,0x42,0x30,0x12,0x08,0x80,0x14,0xa0,0x11,0x10,0x28,0xc0,0x66,0x10,0x08,0x74,0x30,0x8f,0xe0,0x58,0x5c,0x88,0x14,0xc0,0x43,0x01,0x8f,0x81,0x4f,0x05,0x20,0x02,0x9f,0xf3,0x80,0xcb,0x10,}; | ||||||
| const uint8_t *_I_SDError_43x35[] = {_I_SDError_43x35_0}; | const uint8_t *_I_SDError_43x35[] = {_I_SDError_43x35_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_SDQuestion_35x43_0[] = {0x01,0x00,0x67,0x00,0xf8,0x7f,0xc0,0x03,0x03,0xfc,0x01,0x0a,0x0f,0x38,0xa4,0xe4,0xa4,0x80,0x4f,0x0c,0x20,0x13,0xc0,0x9f,0x80,0x02,0x15,0xfe,0x00,0x04,0x29,0xfc,0x03,0xfd,0x07,0xfa,0x47,0xe7,0xdf,0xc8,0x3f,0xea,0x1f,0x7f,0xfc,0x41,0xff,0xb8,0xff,0xf8,0x10,0x7f,0xe0,0x4e,0xef,0x86,0x08,0x68,0x33,0xf1,0x10,0xff,0x3f,0xf1,0xf1,0x60,0x81,0x06,0x1e,0x36,0x10,0x20,0xe1,0xc0,0x87,0xc7,0x02,0x0f,0xd3,0xff,0xe3,0x02,0x0f,0xe8,0x08,0x7f,0xd0,0x21,0x89,0xc4,0x08,0x9f,0x70,0x21,0x9a,0x08,0x08,0xc1,0x89,0x02,0x20,0x62,0x40,0x8f,0xfe,0x68,0x98,}; | ||||||
|  | const uint8_t *_I_SDQuestion_35x43[] = {_I_SDQuestion_35x43_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_Cry_dolph_55x52_0[] = {0x01,0x00,0xe8,0x00,0x00,0x0f,0xe3,0xff,0x01,0x03,0x1f,0xfb,0xff,0x0f,0x02,0x96,0x02,0x0f,0x00,0x9f,0x01,0x8b,0xc0,0x12,0x1f,0x80,0x18,0xae,0x00,0x21,0xe0,0x07,0x0a,0x30,0x0a,0x28,0x18,0x08,0x61,0x80,0x62,0x83,0x00,0x90,0x14,0x61,0x02,0x0c,0x16,0x00,0x76,0x60,0x66,0x98,0x0b,0x04,0x90,0x60,0x66,0xb0,0x00,0x48,0x0d,0x21,0x21,0x03,0x30,0x74,0x40,0xd3,0x80,0x03,0x34,0x04,0xc0,0x52,0x00,0x32,0xc7,0xa0,0x18,0x80,0x31,0x80,0x07,0xe1,0x01,0x37,0x18,0x50,0x80,0xc2,0x92,0x10,0x31,0xe8,0x23,0xe9,0x63,0x86,0x54,0x3f,0xe0,0xe1,0x0d,0x96,0x83,0xfc,0x06,0x40,0x69,0x6c,0x3c,0x60,0xd2,0xfc,0xc0,0x60,0x58,0x48,0x0c,0x1b,0x81,0x08,0x14,0x9c,0x1a,0x81,0x04,0x03,0x46,0x80,0x0c,0x50,0x26,0x21,0xc1,0x94,0x26,0x14,0x27,0x8a,0x40,0xc0,0xc2,0xe7,0x26,0x40,0x81,0x86,0xc0,0x6b,0x28,0x64,0x0f,0x01,0x10,0x4e,0x14,0x60,0x0c,0x29,0x02,0x48,0x8b,0x5c,0x45,0x22,0x01,0x10,0x31,0x3a,0x4c,0x0c,0x34,0x06,0xf1,0xd8,0x00,0xc5,0x1a,0x64,0x94,0x0c,0xc0,0x37,0x52,0x20,0x81,0x84,0x26,0x3e,0x88,0x0c,0x38,0x28,0x54,0x0e,0xac,0x1f,0xe1,0x3f,0x06,0x96,0x82,0x7e,0x29,0x4a,0xaf,0xfd,0x76,0x30,0x3a,0x41,0x14,0x7f,0xd0,0xf8,0x78,0x18,0xaa,0x9f,0xd4,0xe0,0x83,0x4f,0xf5,0xf7,0x38,0x0b,0x9c,0x6a,0x1f,0x5b,0x5c,0x00,}; | const uint8_t _I_Cry_dolph_55x52_0[] = {0x01,0x00,0xe8,0x00,0x00,0x0f,0xe3,0xff,0x01,0x03,0x1f,0xfb,0xff,0x0f,0x02,0x96,0x02,0x0f,0x00,0x9f,0x01,0x8b,0xc0,0x12,0x1f,0x80,0x18,0xae,0x00,0x21,0xe0,0x07,0x0a,0x30,0x0a,0x28,0x18,0x08,0x61,0x80,0x62,0x83,0x00,0x90,0x14,0x61,0x02,0x0c,0x16,0x00,0x76,0x60,0x66,0x98,0x0b,0x04,0x90,0x60,0x66,0xb0,0x00,0x48,0x0d,0x21,0x21,0x03,0x30,0x74,0x40,0xd3,0x80,0x03,0x34,0x04,0xc0,0x52,0x00,0x32,0xc7,0xa0,0x18,0x80,0x31,0x80,0x07,0xe1,0x01,0x37,0x18,0x50,0x80,0xc2,0x92,0x10,0x31,0xe8,0x23,0xe9,0x63,0x86,0x54,0x3f,0xe0,0xe1,0x0d,0x96,0x83,0xfc,0x06,0x40,0x69,0x6c,0x3c,0x60,0xd2,0xfc,0xc0,0x60,0x58,0x48,0x0c,0x1b,0x81,0x08,0x14,0x9c,0x1a,0x81,0x04,0x03,0x46,0x80,0x0c,0x50,0x26,0x21,0xc1,0x94,0x26,0x14,0x27,0x8a,0x40,0xc0,0xc2,0xe7,0x26,0x40,0x81,0x86,0xc0,0x6b,0x28,0x64,0x0f,0x01,0x10,0x4e,0x14,0x60,0x0c,0x29,0x02,0x48,0x8b,0x5c,0x45,0x22,0x01,0x10,0x31,0x3a,0x4c,0x0c,0x34,0x06,0xf1,0xd8,0x00,0xc5,0x1a,0x64,0x94,0x0c,0xc0,0x37,0x52,0x20,0x81,0x84,0x26,0x3e,0x88,0x0c,0x38,0x28,0x54,0x0e,0xac,0x1f,0xe1,0x3f,0x06,0x96,0x82,0x7e,0x29,0x4a,0xaf,0xfd,0x76,0x30,0x3a,0x41,0x14,0x7f,0xd0,0xf8,0x78,0x18,0xaa,0x9f,0xd4,0xe0,0x83,0x4f,0xf5,0xf7,0x38,0x0b,0x9c,0x6a,0x1f,0x5b,0x5c,0x00,}; | ||||||
| const uint8_t *_I_Cry_dolph_55x52[] = {_I_Cry_dolph_55x52_0}; | const uint8_t *_I_Cry_dolph_55x52[] = {_I_Cry_dolph_55x52_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Background_128x11_0[] = {0x01,0x00,0x70,0x00,0xff,0x40,0x40,0xc9,0xe0,0xff,0x80,0x06,0x1e,0x08,0x38,0x0c,0x0c,0x1e,0x93,0x00,0x19,0x46,0x01,0x07,0x7d,0x83,0x03,0xd2,0x31,0xff,0xdb,0xd5,0x66,0x20,0x83,0xc0,0xff,0x05,0x24,0x00,0x1c,0x78,0x28,0xbc,0x40,0x72,0xbf,0xcf,0x47,0xeb,0x40,0xdb,0x7a,0xbf,0xf0,0x40,0x39,0x60,0x28,0x3f,0xe0,0xa0,0xea,0x80,0x63,0x3f,0x0b,0x17,0xe4,0x3e,0x5a,0xbc,0xf9,0x99,0x70,0x1f,0x81,0x50,0xc0,0x80,0xe7,0x3e,0x1e,0x9d,0x57,0xfb,0x7f,0x23,0x15,0xb0,0x12,0x5b,0x5b,0x02,0x1d,0x8c,0xc3,0x80,0x24,0x9e,0x03,0x80,0x5e,0x40,0x00,0xa1,0x88,0x0e,0x98,0x00,0x7b,0x07,0x08,0xb2,0x44,0x41,}; |  | ||||||
| const uint8_t *_I_Background_128x11[] = {_I_Background_128x11_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Lock_8x8_0[] = {0x00,0x3C,0x42,0x42,0xFF,0xFF,0xE7,0xFF,0xFF,}; |  | ||||||
| const uint8_t *_I_Lock_8x8[] = {_I_Lock_8x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Battery_26x8_0[] = {0x01,0x00,0x13,0x00,0xff,0x7f,0xef,0xf0,0x08,0x0c,0x03,0x00,0x03,0x38,0x18,0x0c,0xa0,0x40,0x36,0x05,0x98,0x6d,0x00,}; |  | ||||||
| const uint8_t *_I_Battery_26x8[] = {_I_Battery_26x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Battery_19x8_0[] = {0x01,0x00,0x0f,0x00,0xff,0x7f,0xe0,0x30,0x18,0x04,0x08,0x04,0x90,0x60,0x12,0x02,0xcc,0x28,0x40,}; | const uint8_t _I_Battery_19x8_0[] = {0x01,0x00,0x0f,0x00,0xff,0x7f,0xe0,0x30,0x18,0x04,0x08,0x04,0x90,0x60,0x12,0x02,0xcc,0x28,0x40,}; | ||||||
| const uint8_t *_I_Battery_19x8[] = {_I_Battery_19x8_0}; | const uint8_t *_I_Battery_19x8[] = {_I_Battery_19x8_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_USBConnected_15x8_0[] = {0x00,0xF0,0x07,0x08,0x7C,0x04,0x44,0x07,0x54,0x07,0x54,0x04,0x44,0x08,0x7C,0xF0,0x07,}; |  | ||||||
| const uint8_t *_I_USBConnected_15x8[] = {_I_USBConnected_15x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Background_128x8_0[] = {0x01,0x00,0x43,0x00,0xff,0x7f,0xc0,0x19,0x7f,0x80,0x87,0xb7,0x01,0x3d,0xfd,0xff,0x74,0xff,0xdf,0x7f,0x87,0x87,0xfd,0xfb,0xd3,0xe7,0xf7,0x9d,0xbf,0xff,0x35,0x41,0x09,0x8c,0x20,0x04,0x31,0xc8,0xe0,0x0c,0x62,0x18,0x08,0x10,0x10,0x70,0x99,0xde,0xfe,0xde,0xe7,0xf7,0xff,0x70,0xfc,0x3f,0x6d,0x7f,0x9e,0x6f,0xd9,0xfd,0xd9,0xf3,0x43,0xff,0x2f,0x68,0x00,0x4d,0xfe,}; |  | ||||||
| const uint8_t *_I_Background_128x8[] = {_I_Background_128x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_BadUsb_9x8_0[] = {0x00,0x01,0x01,0xBB,0x01,0xFE,0x00,0xFE,0x00,0xD6,0x00,0xD6,0x00,0x7C,0x00,0x38,0x00,}; |  | ||||||
| const uint8_t *_I_BadUsb_9x8[] = {_I_BadUsb_9x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_BT_Pair_9x8_0[] = {0x00,0x11,0x01,0x35,0x00,0x58,0x01,0x31,0x00,0x30,0x01,0x59,0x00,0x34,0x01,0x11,0x01,}; |  | ||||||
| const uint8_t *_I_BT_Pair_9x8[] = {_I_BT_Pair_9x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_PlaceholderL_11x13_0[] = {0x01,0x00,0x10,0x00,0xfe,0x40,0x60,0x50,0x28,0x0c,0x10,0x03,0xb0,0x38,0x37,0xfe,0x07,0xfe,0x80,0x80,}; |  | ||||||
| const uint8_t *_I_PlaceholderL_11x13[] = {_I_PlaceholderL_11x13_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_SDcardFail_11x8_0[] = {0x00,0xFF,0x07,0xB7,0x07,0xFF,0x07,0x87,0x07,0x7B,0x07,0xFF,0x07,0xFF,0x07,0x67,0x00,}; | const uint8_t _I_SDcardFail_11x8_0[] = {0x00,0xFF,0x07,0xB7,0x07,0xFF,0x07,0x87,0x07,0x7B,0x07,0xFF,0x07,0xFF,0x07,0x67,0x00,}; | ||||||
| const uint8_t *_I_SDcardFail_11x8[] = {_I_SDcardFail_11x8_0}; | const uint8_t *_I_SDcardFail_11x8[] = {_I_SDcardFail_11x8_0}; | ||||||
| 
 | 
 | ||||||
| @ -431,38 +419,47 @@ const uint8_t *_I_Bluetooth_5x8[] = {_I_Bluetooth_5x8_0}; | |||||||
| const uint8_t _I_PlaceholderR_30x13_0[] = {0x01,0x00,0x19,0x00,0xfe,0x7f,0xff,0xf0,0xf8,0x10,0x18,0x62,0x10,0x10,0x18,0xc8,0x00,0x7e,0x03,0xb8,0x18,0x0c,0x66,0x1f,0xe1,0x58,0xc7,0xc5,0xe6,}; | const uint8_t _I_PlaceholderR_30x13_0[] = {0x01,0x00,0x19,0x00,0xfe,0x7f,0xff,0xf0,0xf8,0x10,0x18,0x62,0x10,0x10,0x18,0xc8,0x00,0x7e,0x03,0xb8,0x18,0x0c,0x66,0x1f,0xe1,0x58,0xc7,0xc5,0xe6,}; | ||||||
| const uint8_t *_I_PlaceholderR_30x13[] = {_I_PlaceholderR_30x13_0}; | const uint8_t *_I_PlaceholderR_30x13[] = {_I_PlaceholderR_30x13_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_Battery_26x8_0[] = {0x01,0x00,0x13,0x00,0xff,0x7f,0xef,0xf0,0x08,0x0c,0x03,0x00,0x03,0x38,0x18,0x0c,0xa0,0x40,0x36,0x05,0x98,0x6d,0x00,}; | ||||||
|  | const uint8_t *_I_Battery_26x8[] = {_I_Battery_26x8_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Lock_8x8_0[] = {0x00,0x3C,0x42,0x42,0xFF,0xFF,0xE7,0xFF,0xFF,}; | ||||||
|  | const uint8_t *_I_Lock_8x8[] = {_I_Lock_8x8_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_SDcardMounted_11x8_0[] = {0x01,0x00,0x09,0x00,0xff,0xc1,0xff,0xf0,0x40,0x1c,0xd9,0xe0,0x00,}; | const uint8_t _I_SDcardMounted_11x8_0[] = {0x01,0x00,0x09,0x00,0xff,0xc1,0xff,0xf0,0x40,0x1c,0xd9,0xe0,0x00,}; | ||||||
| const uint8_t *_I_SDcardMounted_11x8[] = {_I_SDcardMounted_11x8_0}; | const uint8_t *_I_SDcardMounted_11x8[] = {_I_SDcardMounted_11x8_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_BadUsb_9x8_0[] = {0x00,0x01,0x01,0xBB,0x01,0xFE,0x00,0xFE,0x00,0xD6,0x00,0xD6,0x00,0x7C,0x00,0x38,0x00,}; | ||||||
|  | const uint8_t *_I_BadUsb_9x8[] = {_I_BadUsb_9x8_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_BT_Pair_9x8_0[] = {0x00,0x11,0x01,0x35,0x00,0x58,0x01,0x31,0x00,0x30,0x01,0x59,0x00,0x34,0x01,0x11,0x01,}; | ||||||
|  | const uint8_t *_I_BT_Pair_9x8[] = {_I_BT_Pair_9x8_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_PlaceholderL_11x13_0[] = {0x01,0x00,0x10,0x00,0xfe,0x40,0x60,0x50,0x28,0x0c,0x10,0x03,0xb0,0x38,0x37,0xfe,0x07,0xfe,0x80,0x80,}; | ||||||
|  | const uint8_t *_I_PlaceholderL_11x13[] = {_I_PlaceholderL_11x13_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Background_128x11_0[] = {0x01,0x00,0x70,0x00,0xff,0x40,0x40,0xc9,0xe0,0xff,0x80,0x06,0x1e,0x08,0x38,0x0c,0x0c,0x1e,0x93,0x00,0x19,0x46,0x01,0x07,0x7d,0x83,0x03,0xd2,0x31,0xff,0xdb,0xd5,0x66,0x20,0x83,0xc0,0xff,0x05,0x24,0x00,0x1c,0x78,0x28,0xbc,0x40,0x72,0xbf,0xcf,0x47,0xeb,0x40,0xdb,0x7a,0xbf,0xf0,0x40,0x39,0x60,0x28,0x3f,0xe0,0xa0,0xea,0x80,0x63,0x3f,0x0b,0x17,0xe4,0x3e,0x5a,0xbc,0xf9,0x99,0x70,0x1f,0x81,0x50,0xc0,0x80,0xe7,0x3e,0x1e,0x9d,0x57,0xfb,0x7f,0x23,0x15,0xb0,0x12,0x5b,0x5b,0x02,0x1d,0x8c,0xc3,0x80,0x24,0x9e,0x03,0x80,0x5e,0x40,0x00,0xa1,0x88,0x0e,0x98,0x00,0x7b,0x07,0x08,0xb2,0x44,0x41,}; | ||||||
|  | const uint8_t *_I_Background_128x11[] = {_I_Background_128x11_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_Background_128x8_0[] = {0x01,0x00,0x43,0x00,0xff,0x7f,0xc0,0x19,0x7f,0x80,0x87,0xb7,0x01,0x3d,0xfd,0xff,0x74,0xff,0xdf,0x7f,0x87,0x87,0xfd,0xfb,0xd3,0xe7,0xf7,0x9d,0xbf,0xff,0x35,0x41,0x09,0x8c,0x20,0x04,0x31,0xc8,0xe0,0x0c,0x62,0x18,0x08,0x10,0x10,0x70,0x99,0xde,0xfe,0xde,0xe7,0xf7,0xff,0x70,0xfc,0x3f,0x6d,0x7f,0x9e,0x6f,0xd9,0xfd,0xd9,0xf3,0x43,0xff,0x2f,0x68,0x00,0x4d,0xfe,}; | ||||||
|  | const uint8_t *_I_Background_128x8[] = {_I_Background_128x8_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_USBConnected_15x8_0[] = {0x00,0xF0,0x07,0x08,0x7C,0x04,0x44,0x07,0x54,0x07,0x54,0x04,0x44,0x08,0x7C,0xF0,0x07,}; | ||||||
|  | const uint8_t *_I_USBConnected_15x8[] = {_I_USBConnected_15x8_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_Quest_7x8_0[] = {0x00,0x1E,0x33,0x33,0x30,0x18,0x0C,0x00,0x0C,}; | const uint8_t _I_Quest_7x8_0[] = {0x00,0x1E,0x33,0x33,0x30,0x18,0x0C,0x00,0x0C,}; | ||||||
| const uint8_t *_I_Quest_7x8[] = {_I_Quest_7x8_0}; | const uint8_t *_I_Quest_7x8[] = {_I_Quest_7x8_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Lock_7x8_0[] = {0x00,0x1C,0x22,0x22,0x7F,0x7F,0x77,0x7F,0x3E,}; | const uint8_t _I_MHz_25x11_0[] = {0x01,0x00,0x21,0x00,0xe1,0xe1,0xa0,0x30,0x0f,0x38,0x0c,0xbf,0xe0,0x34,0xfe,0xc0,0x7b,0x7f,0xe0,0x19,0xf0,0x60,0x1d,0xbc,0x35,0x84,0x36,0x53,0x10,0x19,0x46,0x40,0x64,0x13,0x10,0x19,0x80,}; | ||||||
| const uint8_t *_I_Lock_7x8[] = {_I_Lock_7x8_0}; | const uint8_t *_I_MHz_25x11[] = {_I_MHz_25x11_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Scanning_123x52_0[] = {0x01,0x00,0xd3,0x01,0x00,0x78,0x03,0xc0,0x1f,0x00,0xe0,0x7f,0xc1,0xfb,0xf0,0x80,0x41,0xc0,0xc7,0x03,0x07,0xbe,0xb2,0x07,0x18,0x07,0xc4,0x40,0x06,0x55,0x68,0x2d,0x80,0x0a,0x58,0x08,0x10,0x3c,0xe1,0x00,0x32,0xc0,0xc2,0xb0,0x00,0xf8,0x82,0x02,0x0a,0x01,0x15,0x80,0x40,0x40,0xc3,0x40,0x07,0xa0,0x10,0xa8,0x10,0x09,0xc0,0x19,0x01,0xe9,0x82,0x01,0x0c,0x82,0x01,0x74,0x13,0x1d,0x03,0x04,0x24,0x28,0x05,0x04,0x1e,0x76,0x80,0x79,0xc8,0x30,0x50,0x28,0x30,0x14,0x64,0x26,0x23,0xe8,0x78,0x21,0xe0,0xf4,0x85,0x43,0x30,0x12,0x03,0x00,0x83,0xc7,0x41,0x1c,0x3b,0x10,0x3c,0xe2,0x98,0x08,0x80,0xa4,0x61,0x1e,0x0e,0x9c,0x0c,0x1e,0x51,0x00,0x7a,0x95,0x46,0x11,0x90,0xd3,0xd0,0x24,0x80,0xfb,0xe4,0x5f,0xf0,0x92,0x80,0x79,0x61,0x01,0xe3,0xff,0x07,0x9e,0x22,0xcf,0x3e,0xc4,0x03,0xd3,0xf5,0xff,0x07,0xa5,0x12,0xc9,0x2e,0x07,0xa7,0xf3,0x5f,0xff,0x8a,0x93,0xce,0x89,0xe4,0x97,0xe2,0x25,0x40,0xf1,0x8c,0x75,0x3b,0xf1,0xf1,0xf8,0x9b,0xc8,0x1e,0x55,0x0f,0xfc,0x03,0xfd,0x1f,0xf6,0x4f,0xc9,0xe2,0x8f,0x3a,0x27,0x12,0x5f,0xea,0x68,0x0c,0x06,0x35,0xfc,0x2f,0x92,0xbc,0xf0,0x98,0x89,0x7c,0x75,0x8e,0x37,0xd8,0xf1,0x7c,0xa3,0x0c,0xf3,0xc3,0x47,0xf8,0xcb,0x81,0xc2,0x5f,0x62,0xc0,0xf2,0x77,0xa5,0x1b,0xeb,0xc3,0x6c,0x8d,0x12,0x03,0x22,0x07,0x8c,0x30,0x18,0x2d,0x82,0xc3,0xc2,0xaf,0x84,0x42,0x81,0xc8,0xb1,0x01,0xb2,0x4e,0x08,0x08,0x68,0xb0,0x50,0x20,0xdf,0xb4,0x90,0x3a,0x10,0x3d,0x19,0x05,0x86,0x1e,0x8f,0x03,0x03,0xa5,0x83,0xd0,0xa1,0x10,0x30,0x79,0x00,0x0a,0x0a,0x02,0x19,0x84,0x03,0xa5,0xff,0xc0,0x8a,0x88,0x00,0x81,0xe1,0x80,0x12,0x07,0xa5,0x1f,0xc0,0x03,0xde,0x0b,0x80,0x80,0x0a,0x47,0xa3,0x1f,0x80,0x42,0x43,0xf1,0xe1,0x80,0x60,0x3d,0x30,0xf8,0x04,0x48,0x3e,0xf0,0x08,0xf1,0x40,0x7d,0x00,0xf1,0x56,0x08,0xfe,0x20,0x17,0x0f,0x70,0x3c,0x55,0x82,0x00,0x58,0x38,0x0c,0xa7,0x9f,0x90,0x78,0x80,0x1c,0xec,0x5a,0xac,0xff,0xc0,0x1f,0x30,0x1a,0x05,0x57,0xfb,0x5f,0xf8,0x45,0xc3,0xf3,0x80,0xf5,0x7f,0xe7,0xfe,0x00,0x7c,0x87,0xc7,0xab,0xff,0x8f,0x83,0xea,0x05,0x80,0xd5,0x7f,0xe1,0xfe,0x08,0x98,0x7e,0x60,0x15,0x5a,0xac,0x0f,0xe1,0x15,0x0f,0xc9,0x78,0x75,0x50,0x0d,0x84,0x28,0x3f,0x55,0x4b,0xac,0x02,0xb1,0x0d,0x0f,0xd6,0xa0,0xf8,0x3a,0x85,0x29,0xaf,0xde,0xf8,0x04,0x1a,0xe2,0x54,0x83,0xf0,0x00,0x2d,0x70,0xd4,0x43,0xf2,0x00,0x2e,0xb8,0x3a,0x20,0x05,0x93,0xc0,0x5e,0xc1,0xf2,0x79,0x3e,0x04,0x7c,0x1f,0x32,0xa0,0x19,0x7c,0x1e,0x86,0x00,0x6a,0xa8,0x0c,0xbf,0x84,0xe9,0x4e,0x88,0x0c,0x85,0xd5,0x00,}; | const uint8_t _I_Scanning_123x52_0[] = {0x01,0x00,0xd3,0x01,0x00,0x78,0x03,0xc0,0x1f,0x00,0xe0,0x7f,0xc1,0xfb,0xf0,0x80,0x41,0xc0,0xc7,0x03,0x07,0xbe,0xb2,0x07,0x18,0x07,0xc4,0x40,0x06,0x55,0x68,0x2d,0x80,0x0a,0x58,0x08,0x10,0x3c,0xe1,0x00,0x32,0xc0,0xc2,0xb0,0x00,0xf8,0x82,0x02,0x0a,0x01,0x15,0x80,0x40,0x40,0xc3,0x40,0x07,0xa0,0x10,0xa8,0x10,0x09,0xc0,0x19,0x01,0xe9,0x82,0x01,0x0c,0x82,0x01,0x74,0x13,0x1d,0x03,0x04,0x24,0x28,0x05,0x04,0x1e,0x76,0x80,0x79,0xc8,0x30,0x50,0x28,0x30,0x14,0x64,0x26,0x23,0xe8,0x78,0x21,0xe0,0xf4,0x85,0x43,0x30,0x12,0x03,0x00,0x83,0xc7,0x41,0x1c,0x3b,0x10,0x3c,0xe2,0x98,0x08,0x80,0xa4,0x61,0x1e,0x0e,0x9c,0x0c,0x1e,0x51,0x00,0x7a,0x95,0x46,0x11,0x90,0xd3,0xd0,0x24,0x80,0xfb,0xe4,0x5f,0xf0,0x92,0x80,0x79,0x61,0x01,0xe3,0xff,0x07,0x9e,0x22,0xcf,0x3e,0xc4,0x03,0xd3,0xf5,0xff,0x07,0xa5,0x12,0xc9,0x2e,0x07,0xa7,0xf3,0x5f,0xff,0x8a,0x93,0xce,0x89,0xe4,0x97,0xe2,0x25,0x40,0xf1,0x8c,0x75,0x3b,0xf1,0xf1,0xf8,0x9b,0xc8,0x1e,0x55,0x0f,0xfc,0x03,0xfd,0x1f,0xf6,0x4f,0xc9,0xe2,0x8f,0x3a,0x27,0x12,0x5f,0xea,0x68,0x0c,0x06,0x35,0xfc,0x2f,0x92,0xbc,0xf0,0x98,0x89,0x7c,0x75,0x8e,0x37,0xd8,0xf1,0x7c,0xa3,0x0c,0xf3,0xc3,0x47,0xf8,0xcb,0x81,0xc2,0x5f,0x62,0xc0,0xf2,0x77,0xa5,0x1b,0xeb,0xc3,0x6c,0x8d,0x12,0x03,0x22,0x07,0x8c,0x30,0x18,0x2d,0x82,0xc3,0xc2,0xaf,0x84,0x42,0x81,0xc8,0xb1,0x01,0xb2,0x4e,0x08,0x08,0x68,0xb0,0x50,0x20,0xdf,0xb4,0x90,0x3a,0x10,0x3d,0x19,0x05,0x86,0x1e,0x8f,0x03,0x03,0xa5,0x83,0xd0,0xa1,0x10,0x30,0x79,0x00,0x0a,0x0a,0x02,0x19,0x84,0x03,0xa5,0xff,0xc0,0x8a,0x88,0x00,0x81,0xe1,0x80,0x12,0x07,0xa5,0x1f,0xc0,0x03,0xde,0x0b,0x80,0x80,0x0a,0x47,0xa3,0x1f,0x80,0x42,0x43,0xf1,0xe1,0x80,0x60,0x3d,0x30,0xf8,0x04,0x48,0x3e,0xf0,0x08,0xf1,0x40,0x7d,0x00,0xf1,0x56,0x08,0xfe,0x20,0x17,0x0f,0x70,0x3c,0x55,0x82,0x00,0x58,0x38,0x0c,0xa7,0x9f,0x90,0x78,0x80,0x1c,0xec,0x5a,0xac,0xff,0xc0,0x1f,0x30,0x1a,0x05,0x57,0xfb,0x5f,0xf8,0x45,0xc3,0xf3,0x80,0xf5,0x7f,0xe7,0xfe,0x00,0x7c,0x87,0xc7,0xab,0xff,0x8f,0x83,0xea,0x05,0x80,0xd5,0x7f,0xe1,0xfe,0x08,0x98,0x7e,0x60,0x15,0x5a,0xac,0x0f,0xe1,0x15,0x0f,0xc9,0x78,0x75,0x50,0x0d,0x84,0x28,0x3f,0x55,0x4b,0xac,0x02,0xb1,0x0d,0x0f,0xd6,0xa0,0xf8,0x3a,0x85,0x29,0xaf,0xde,0xf8,0x04,0x1a,0xe2,0x54,0x83,0xf0,0x00,0x2d,0x70,0xd4,0x43,0xf2,0x00,0x2e,0xb8,0x3a,0x20,0x05,0x93,0xc0,0x5e,0xc1,0xf2,0x79,0x3e,0x04,0x7c,0x1f,0x32,0xa0,0x19,0x7c,0x1e,0x86,0x00,0x6a,0xa8,0x0c,0xbf,0x84,0xe9,0x4e,0x88,0x0c,0x85,0xd5,0x00,}; | ||||||
| const uint8_t *_I_Scanning_123x52[] = {_I_Scanning_123x52_0}; | const uint8_t *_I_Scanning_123x52[] = {_I_Scanning_123x52_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_MHz_25x11_0[] = {0x01,0x00,0x21,0x00,0xe1,0xe1,0xa0,0x30,0x0f,0x38,0x0c,0xbf,0xe0,0x34,0xfe,0xc0,0x7b,0x7f,0xe0,0x19,0xf0,0x60,0x1d,0xbc,0x35,0x84,0x36,0x53,0x10,0x19,0x46,0x40,0x64,0x13,0x10,0x19,0x80,}; |  | ||||||
| const uint8_t *_I_MHz_25x11[] = {_I_MHz_25x11_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Unlock_7x8_0[] = {0x00,0x1C,0x22,0x02,0x4F,0x67,0x73,0x79,0x3C,}; | const uint8_t _I_Unlock_7x8_0[] = {0x00,0x1C,0x22,0x02,0x4F,0x67,0x73,0x79,0x3C,}; | ||||||
| const uint8_t *_I_Unlock_7x8[] = {_I_Unlock_7x8_0}; | const uint8_t *_I_Unlock_7x8[] = {_I_Unlock_7x8_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_iButtonKey_49x44_0[] = {0x01,0x00,0xb4,0x00,0x00,0x24,0xfc,0x0a,0x9c,0x0e,0x00,0x19,0x26,0x18,0x00,0x32,0x43,0x20,0x10,0x10,0x31,0xc0,0x80,0xc9,0x80,0x02,0x08,0x18,0xec,0x00,0x21,0x03,0x1c,0x40,0x1e,0x22,0x15,0xa0,0x08,0x56,0x40,0x06,0x30,0xc0,0x85,0x84,0x86,0x40,0x21,0x84,0x10,0xcc,0x04,0x30,0x40,0x31,0x02,0x88,0x3a,0x20,0x01,0x83,0x0d,0x94,0x06,0x26,0x03,0xf8,0x43,0xc5,0xe9,0x0c,0x11,0x08,0xbc,0xe0,0x64,0x21,0x23,0x09,0x38,0x80,0x22,0x28,0x20,0x58,0x99,0xc4,0x50,0x41,0xe1,0xc0,0x60,0xcc,0xab,0x47,0x21,0xa6,0x02,0x9e,0x06,0x22,0x70,0xf0,0x00,0xcb,0x40,0x03,0x18,0xb0,0x78,0x14,0xe0,0x32,0x58,0x28,0xa5,0x84,0xd0,0x51,0x80,0xc9,0x30,0x06,0xae,0x62,0x84,0x06,0x48,0x64,0x88,0x0c,0x90,0x29,0x08,0x19,0x30,0x31,0x13,0x71,0xb8,0xc4,0xea,0x70,0x6b,0xc5,0x01,0x4a,0x7f,0xc8,0x7c,0x81,0x4a,0x77,0x8a,0xac,0x45,0x4a,0x7f,0x08,0x54,0x39,0x4a,0x7e,0x0e,0xa9,0xf0,0xcb,0xe3,0x7f,0x6e,0x22,0x5c,0x59,0x44,0x00,0x28,0x7a,0xd4,0x40,0x07,0xf0,0x02,0xa0,}; | const uint8_t _I_Lock_7x8_0[] = {0x00,0x1C,0x22,0x22,0x7F,0x7F,0x77,0x7F,0x3E,}; | ||||||
| const uint8_t *_I_iButtonKey_49x44[] = {_I_iButtonKey_49x44_0}; | const uint8_t *_I_Lock_7x8[] = {_I_Lock_7x8_0}; | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinExcited_64x63_0[] = {0x01,0x00,0x36,0x01,0x00,0x25,0x00,0x0f,0xd2,0x00,0x3b,0xe0,0x00,0xeb,0x10,0x0c,0x34,0x40,0x30,0xd0,0x88,0x80,0x1d,0xa1,0x00,0x42,0xfc,0x7f,0xc0,0x63,0x04,0x01,0x0e,0x02,0x0f,0x00,0x00,0x8c,0x08,0x0e,0x37,0x00,0x10,0xc6,0x20,0x10,0x10,0xd9,0x11,0x92,0x1c,0x1a,0x3e,0x00,0x04,0x42,0x02,0x1a,0x20,0xb0,0xce,0x00,0x64,0x07,0x20,0x59,0x16,0x50,0x36,0x45,0x94,0x84,0x78,0x20,0x60,0x75,0x8e,0x43,0x06,0x63,0x3c,0x33,0x94,0x0c,0xd2,0x5c,0x30,0x38,0xe4,0x08,0x43,0x10,0xc0,0x5e,0x06,0x22,0x53,0x1a,0x02,0x08,0x7f,0xd0,0x32,0xc1,0x50,0x21,0x14,0x0e,0x70,0x1c,0x46,0xe2,0x07,0x19,0x06,0x3c,0xdc,0x20,0x91,0xae,0x01,0xcc,0xbe,0x30,0x09,0xfc,0x12,0x41,0xff,0x83,0xcc,0x0a,0xa3,0x1f,0x03,0x99,0xe8,0x7c,0x10,0xf8,0x25,0xa0,0x5e,0x50,0x0f,0x84,0x1e,0x09,0x54,0x03,0x9f,0xf2,0x07,0x02,0xd5,0x11,0xca,0x01,0xfe,0x80,0xc0,0xaa,0x9f,0xf0,0x39,0x5f,0xd0,0x43,0xaa,0x83,0x41,0x92,0xc3,0x1f,0x03,0x8d,0x52,0x02,0x2e,0x25,0xc9,0x6a,0x99,0x46,0xa6,0x2a,0xa0,0x1c,0xaf,0xca,0x62,0x94,0x28,0xcb,0x7e,0x0f,0x15,0x71,0xf8,0x3c,0x22,0x71,0x03,0x8a,0x84,0x67,0x18,0x0f,0xac,0x1c,0x0e,0x38,0x08,0x0c,0x3e,0x01,0xae,0xbd,0x13,0x0c,0x0e,0x35,0x8e,0xa8,0x1c,0xb0,0x1f,0xf8,0x06,0x83,0xf4,0x27,0x38,0x07,0xff,0xff,0x8f,0x03,0xa0,0x4c,0x80,0xed,0x60,0x03,0xb4,0x60,0x0e,0xd0,0x60,0x3a,0x87,0x84,0x0e,0xb7,0xc2,0xfa,0x18,0x05,0x44,0x20,0x73,0xff,0xf7,0xce,0xe4,0x07,0x2d,0x52,0x2c,0x80,0xe7,0x54,0xea,0x81,0xd7,0x50,0x0f,0x7a,0xaa,0x3d,0x41,0xe2,0x07,0x5a,0x80,0x3c,0xa0,0x40,0x72,0xd0,0x6a,0x80,0xa2,0x07,0x3a,0x05,0x54,0x8e,0x20,0x73,0xc0,0x03,0xd8,0x60,0x30,0x40,0x3a,0xc0,0x00,0xee,0xea,0x10,0x3b,0x80,}; |  | ||||||
| const uint8_t *_I_DolphinExcited_64x63[] = {_I_DolphinExcited_64x63_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinWait_61x59_0[] = {0x01,0x00,0x56,0x01,0x00,0x17,0xfa,0x1e,0x06,0x4f,0x84,0x06,0xe0,0x07,0x48,0x64,0x03,0x01,0x01,0x03,0x9c,0x0c,0x04,0x30,0x60,0x31,0x70,0x00,0x65,0x08,0x01,0x94,0xc0,0x06,0x51,0x00,0x5b,0x48,0x00,0x65,0x04,0x01,0x95,0x00,0x82,0xd8,0x00,0x19,0x40,0x7e,0x00,0x75,0x1f,0x88,0xe0,0x88,0x02,0x1a,0x1f,0x94,0x14,0x0e,0xbf,0x98,0x58,0x5c,0x42,0x45,0x00,0x9e,0x99,0x87,0x01,0x02,0x11,0x94,0xf2,0x2e,0x03,0x18,0x39,0x28,0x70,0x1f,0xc0,0x3e,0x42,0x00,0xe5,0x80,0xff,0xdf,0xc0,0xe5,0xf8,0x85,0xd8,0x10,0x27,0x40,0xf9,0xc2,0x63,0x88,0x12,0x82,0x6a,0x20,0x50,0x41,0xe9,0x42,0x20,0x95,0x48,0x6e,0x0c,0xfa,0x9a,0xaf,0xf9,0x90,0xe2,0x10,0x2e,0xac,0xe0,0x0e,0x98,0x29,0x52,0x11,0x13,0x23,0x15,0x3e,0x20,0x3c,0x61,0x40,0x52,0xfc,0x4f,0xe2,0x10,0x38,0x68,0x1c,0xa0,0xfc,0x08,0xbe,0x04,0x1e,0x5e,0x01,0xb9,0x03,0xc5,0x60,0x24,0xf2,0x84,0x60,0x63,0x40,0x71,0x27,0x9c,0x0e,0x2b,0x04,0x6c,0xa4,0x06,0x15,0x08,0x6c,0x99,0x8c,0xa6,0x0f,0x81,0x00,0x0c,0x08,0xf0,0x3c,0x05,0x61,0xc0,0x40,0x86,0xd0,0x30,0x78,0x80,0x0c,0xc6,0x2b,0x92,0x00,0x0d,0x51,0xf0,0x2d,0x42,0x0a,0x8e,0xaa,0x34,0x0f,0x4a,0x85,0x55,0x6e,0x20,0xf3,0xd5,0x6a,0x84,0xa2,0x66,0x2a,0x05,0xf7,0xaa,0x07,0x18,0xaf,0xfb,0x7f,0xea,0xc1,0xef,0xc0,0xe3,0xea,0x80,0xf8,0x27,0xf0,0x0a,0xc0,0x1c,0x67,0xa2,0xd1,0xb1,0xc0,0x34,0x00,0x71,0x14,0x8f,0x00,0x98,0x34,0x02,0x69,0xd0,0x37,0x90,0x16,0xf1,0x00,0x06,0xe1,0x84,0x31,0x89,0x14,0xe9,0xdc,0x40,0x38,0xa4,0xc4,0x4c,0x3c,0x1f,0x88,0x8c,0x5b,0xc3,0x01,0xbc,0x40,0x3f,0xf0,0xf6,0x71,0x0c,0x0b,0xe0,0x07,0x3c,0x0a,0xf8,0xa3,0xf0,0x03,0xb8,0xd8,0x80,0xe8,0x87,0x1b,0xa8,0x1c,0x78,0x1f,0xf8,0x0e,0x7e,0x01,0x6a,0x03,0x94,0x0f,0xfd,0xa0,0x80,0x7d,0x49,0x04,0x4d,0x12,0xc0,0xfa,0x83,0x83,0xbe,0x26,0x8d,0x02,0x05,0xd5,0xff,0xff,0xeb,0xe9,0x31,0x90,0x40,0x80,}; |  | ||||||
| const uint8_t *_I_DolphinWait_61x59[] = {_I_DolphinWait_61x59_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_iButtonDolphinVerySuccess_108x52_0[] = {0x01,0x00,0xc2,0x01,0x00,0x0f,0xe2,0xfe,0x0d,0xb8,0x3e,0x02,0x06,0x0c,0x9f,0x00,0x08,0x61,0x80,0xd9,0x8c,0x00,0x86,0x60,0x0d,0x98,0x30,0x08,0x6a,0x00,0xd9,0x80,0x80,0x87,0x40,0x0c,0x8c,0x00,0x0c,0xa8,0x01,0x12,0x00,0x2d,0x00,0x22,0x70,0x20,0x6b,0xc8,0x02,0x26,0x62,0x88,0x80,0x6c,0xc9,0x24,0x0d,0x9a,0x07,0x17,0xfe,0x1d,0x68,0x40,0x6c,0xe7,0x48,0x04,0x28,0x10,0x34,0xe8,0x10,0xd1,0x11,0xc4,0x01,0xa5,0x04,0x06,0x96,0xa0,0xa6,0x24,0xc2,0x88,0x17,0x88,0x1a,0x7d,0x43,0x78,0x82,0x4a,0x40,0x03,0x20,0xb0,0xff,0x20,0x16,0xa3,0xb2,0x48,0x03,0xe4,0x0d,0x1f,0xfc,0x06,0x3a,0x0d,0x4a,0x00,0x34,0xf8,0x00,0xd1,0x37,0x0f,0x82,0x9e,0x95,0x58,0x17,0x83,0xff,0x81,0x1b,0x0f,0xf1,0xfe,0x71,0xe0,0x69,0x7c,0x3f,0xe0,0x82,0xff,0xcf,0xc0,0x85,0x61,0x80,0x43,0xb0,0x5f,0xa8,0x79,0xdc,0x81,0xa5,0x70,0xc0,0x68,0x3c,0x10,0x1a,0x17,0xd5,0x28,0x42,0xd1,0x8f,0x84,0x46,0x83,0xb0,0x8e,0x40,0x34,0x5f,0xa8,0x38,0x34,0x45,0xa2,0x0d,0x18,0x04,0x9b,0x50,0x03,0x1a,0x14,0x35,0x36,0x5f,0x8f,0xf8,0xb8,0xa4,0x19,0x40,0x18,0xe8,0xa0,0xca,0x22,0xfe,0x7f,0xc4,0x05,0x20,0xa5,0x80,0xc6,0x82,0xcb,0x3f,0xf3,0x44,0xfc,0x12,0x40,0x18,0xe8,0x51,0x82,0x52,0x28,0xfc,0x38,0x0a,0x3e,0x48,0x98,0x6c,0x8f,0x43,0x00,0xe0,0x63,0xe0,0x62,0xe2,0x91,0x90,0x0a,0x02,0x0d,0x2f,0x82,0x50,0x41,0xa3,0x80,0x90,0x41,0x04,0xc3,0x01,0xc0,0x83,0x46,0x71,0x30,0x06,0x95,0x82,0x21,0x02,0x6e,0x88,0x6c,0x43,0x83,0x1f,0x2f,0x88,0x34,0x62,0x00,0xd1,0x15,0x08,0x2c,0x60,0xcc,0x51,0x0f,0x08,0xcc,0x81,0xa2,0x12,0x10,0x68,0xc6,0x3f,0x06,0xc2,0x06,0x8e,0x02,0x16,0x41,0x20,0x10,0xf8,0x01,0x85,0x00,0x19,0x0d,0x82,0x18,0x07,0x20,0x81,0x00,0x0c,0x9c,0x31,0x08,0x42,0x74,0x81,0xab,0x80,0x03,0x0c,0x32,0x11,0x0b,0x06,0xb9,0xc0,0x43,0xa3,0x10,0x8b,0x83,0x5c,0xe0,0x20,0x81,0xc8,0x26,0x49,0x4c,0x40,0x02,0x86,0x0a,0xc5,0x22,0x32,0x50,0x6b,0x93,0x86,0xc0,0x0d,0x19,0x18,0x35,0x8c,0x84,0x79,0x1a,0x84,0x84,0x1a,0xdf,0xc2,0xe0,0x8a,0xc7,0x51,0x22,0x06,0xb5,0x5e,0x3f,0x00,0x77,0x0d,0x60,0x36,0xfa,0xa9,0xd7,0x00,0x08,0x3a,0xc9,0x02,0x48,0xc0,0x05,0x54,0xba,0x98,0x8a,0xa8,0xf1,0x20,0x6a,0x6a,0x3d,0x43,0x61,0x80,0x4a,0x81,0xaf,0x40,0xea,0x8d,0x86,0x01,0x56,0x06,0x93,0x60,0x80,0x05,0xea,0x01,0x94,0xac,0x1b,0x11,0x80,0x19,0x45,0x41,0x44,0x0d,0x58,0x33,0x18,0xa1,0x4f,0xf3,0x06,0x1f,0x01,0x76,0x58,0x00,0xd9,0x83,0x52,0x7c,0x11,0x38,0x51,0x40,0x80,}; |  | ||||||
| const uint8_t *_I_iButtonDolphinVerySuccess_108x52[] = {_I_iButtonDolphinVerySuccess_108x52_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DolphinMafia_115x62_0[] = {0x01,0x00,0x21,0x02,0x00,0x1e,0x02,0x06,0x0e,0xcb,0x04,0x10,0x1d,0x91,0x88,0x40,0x3b,0x20,0xc0,0xec,0xc0,0x40,0x62,0x03,0xac,0x80,0x03,0xb2,0x31,0x00,0x90,0x03,0xae,0x5e,0x0e,0xcf,0xc4,0x56,0x01,0x40,0x07,0x56,0xbe,0x14,0x0e,0x2f,0xf1,0x5e,0x2a,0xa1,0xd1,0xc0,0x7c,0x3f,0xf0,0x70,0x73,0x70,0x35,0x41,0xd1,0xc0,0x7f,0xff,0xf0,0xf0,0x73,0x50,0x03,0xa4,0x0d,0x10,0x74,0x07,0x46,0x55,0xe0,0x07,0x10,0xb1,0xc3,0xa3,0x55,0xfe,0x03,0x88,0x94,0xe1,0xd1,0xd5,0x03,0x4a,0x3e,0x59,0x9e,0xaf,0xfe,0xff,0x05,0x60,0x4e,0xab,0xf5,0xff,0x95,0xb4,0xa4,0x3a,0x3f,0xd0,0xe0,0xfa,0x20,0x20,0xf8,0xd5,0xff,0xb5,0xf0,0x0f,0x88,0x3a,0x6a,0xbf,0xf8,0xaf,0x82,0x6f,0x03,0x07,0x47,0xaf,0xff,0x0a,0xfe,0x5f,0xc1,0xd3,0xf6,0xbf,0xe0,0x7f,0xfe,0xf0,0x73,0x41,0x00,0x43,0xfa,0xd7,0xf8,0x27,0xfe,0xe0,0x73,0x40,0x80,0x43,0xfe,0xab,0xfe,0x21,0xfc,0xe5,0x9b,0x05,0x48,0xea,0x3f,0xc8,0xfa,0xc4,0x66,0x07,0x44,0x0e,0x8f,0x00,0xb0,0x2b,0x31,0x07,0x0f,0x00,0x1c,0x72,0x00,0x70,0xf8,0x37,0xe5,0x81,0xff,0x89,0x08,0xf2,0x71,0x80,0x20,0xfe,0x2b,0xf0,0x5f,0xc0,0x38,0xc8,0xa5,0x60,0xc3,0x00,0xc7,0xf9,0xaf,0x81,0x2d,0x04,0x34,0x40,0xe1,0x98,0x47,0x68,0x04,0x92,0xab,0xc0,0x7e,0xb7,0xf7,0x39,0x03,0x85,0x8e,0x24,0xf1,0xc0,0x7f,0xf5,0x78,0x0f,0x53,0xb4,0xbc,0x1f,0xb8,0x1a,0x0c,0x61,0xc5,0x82,0xab,0xc0,0x3e,0xa3,0xa2,0xfc,0x07,0x46,0x09,0x60,0x19,0x8f,0x80,0xec,0x38,0x08,0x52,0x6c,0xb8,0xdc,0x28,0x7c,0x10,0x2a,0x5f,0x0f,0xfc,0x5a,0x01,0x05,0x1a,0x8e,0x02,0x02,0x1d,0x1f,0x81,0xa8,0xbe,0x13,0xf8,0x52,0x2c,0x8c,0x62,0x77,0x42,0x11,0x40,0xe0,0xca,0x93,0x8e,0x03,0x8a,0x30,0x10,0x48,0x54,0x03,0x04,0xbb,0x2c,0x00,0x0c,0x64,0x80,0xe4,0x0e,0x88,0x38,0x7c,0x10,0x04,0x09,0x48,0x83,0xac,0x1b,0x18,0xf3,0x44,0xc1,0xca,0x1d,0x15,0x40,0x8e,0x05,0x02,0x20,0xe6,0x24,0x12,0x8c,0x8b,0x05,0x21,0x07,0x24,0x14,0x08,0x73,0x80,0x19,0x78,0x43,0xb2,0xff,0x15,0x30,0xc4,0x01,0x26,0x8f,0x14,0x61,0xa9,0x8a,0x09,0x10,0x02,0x12,0x1c,0x80,0x84,0xaf,0x10,0x71,0xaa,0xc4,0x00,0x3b,0x04,0xea,0x24,0x48,0x1c,0xbd,0x8f,0xf8,0x00,0x67,0xf0,0x09,0x40,0x20,0x61,0x00,0xe4,0xf6,0x07,0x4b,0xc1,0x1f,0x07,0x14,0x40,0x1c,0x9d,0x66,0x79,0x24,0xc6,0xa0,0x0e,0x32,0x51,0xfa,0xce,0xe7,0x50,0x07,0x1c,0x80,0x30,0x58,0x0e,0xa2,0xcc,0xa0,0x19,0x00,0x71,0x42,0x13,0x27,0x40,0xf5,0x45,0x41,0xc5,0x08,0xb0,0x80,0xc6,0x18,0xf2,0x28,0x04,0x83,0xe8,0x58,0x10,0x30,0xc2,0x2c,0x40,0x91,0x89,0x3c,0x88,0x62,0x21,0xd2,0xff,0x03,0x87,0xc8,0x12,0x19,0x08,0x39,0x3e,0x83,0xb2,0x4a,0x0e,0xa2,0x0d,0xc0,0xe0,0x50,0x06,0xa7,0xe8,0x2c,0x94,0xc2,0x09,0x50,0x8c,0xce,0x20,0x34,0x70,0x71,0x41,0x3e,0x85,0xe2,0xe0,0x41,0x38,0x1e,0x28,0x3c,0x19,0xc8,0x70,0x4f,0xc1,0xdc,0xe0,0x74,0x01,0xd8,0xc6,0x24,0x00,0x82,0x81,0x7c,0x12,0xa6,0x7e,0x10,0x28,0xd8,0x22,0x00,0xe3,0xfc,0x34,0x53,0x00,0x23,0x1c,0x04,0x44,0x0e,0x50,0x10,0xeb,0x17,0xca,0x1c,0x07,0x20,}; |  | ||||||
| const uint8_t *_I_DolphinMafia_115x62[] = {_I_DolphinMafia_115x62_0}; |  | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_DolphinNice_96x59_0[] = {0x01,0x00,0x8a,0x01,0x00,0x37,0xfa,0x3e,0x0a,0x8f,0x04,0x04,0x02,0x20,0xb7,0x8c,0x00,0x86,0x1c,0x0b,0x78,0x20,0x08,0x66,0x00,0xb7,0x81,0x00,0x86,0x80,0x0b,0x71,0x61,0x60,0x01,0x4c,0x07,0x41,0xe3,0x07,0xd0,0x4e,0x40,0xb8,0x1f,0x90,0x00,0xe4,0x00,0xba,0x88,0x01,0x0e,0x10,0x0a,0x48,0xf9,0x6c,0xbe,0x10,0x70,0x82,0x78,0x3c,0x15,0x82,0x18,0xc2,0x21,0x00,0xb4,0x02,0x0e,0xbc,0x86,0x30,0x48,0x80,0xd1,0x05,0x03,0x78,0x82,0xc0,0x3e,0x52,0x32,0x63,0x70,0x20,0x70,0x09,0xd4,0x98,0xb0,0xf0,0x60,0x58,0xc9,0xce,0x12,0x0b,0xbf,0xd4,0x9d,0x28,0x9e,0x24,0xa9,0x82,0xda,0x24,0x2d,0x10,0x00,0xfd,0x2a,0x60,0xb4,0x85,0x4e,0x00,0x85,0xf8,0xd4,0x82,0xd2,0x09,0xc0,0x12,0x14,0x12,0xad,0x81,0x29,0xa8,0x90,0xf5,0x01,0x75,0x80,0x46,0x00,0xa5,0x50,0x0b,0x90,0x1c,0x41,0x63,0x60,0x05,0x96,0xc0,0x2e,0x52,0x44,0x79,0x60,0x06,0x05,0x50,0x05,0x94,0x89,0x88,0x63,0x02,0x98,0x02,0xc7,0xc1,0x21,0x6a,0x98,0xa0,0x62,0x11,0x00,0x58,0xc6,0x02,0xe2,0xb8,0x21,0x80,0xc3,0x05,0x02,0x38,0x11,0x78,0xa5,0x0b,0x01,0x81,0x5a,0x88,0x2c,0x60,0x40,0xb1,0xc0,0x27,0x0a,0xfc,0x0f,0x28,0x04,0x06,0x50,0x05,0x18,0xa9,0x94,0xc1,0x67,0x48,0x02,0x8c,0xb8,0x16,0xf8,0x80,0x28,0xd6,0x16,0x86,0x0b,0x38,0x40,0xd4,0x76,0x0c,0xd4,0x05,0x94,0x10,0x9a,0x34,0x01,0x82,0x1f,0x06,0x05,0x02,0x98,0x01,0x47,0x54,0x18,0x35,0xc8,0xff,0x20,0x3c,0x00,0x58,0xd5,0x6a,0xa0,0xb3,0x81,0xa3,0x0a,0x0f,0x80,0xd5,0xea,0x81,0x67,0x07,0x46,0x14,0xe3,0xe1,0x55,0x18,0x18,0x2c,0x51,0x85,0xc0,0xef,0x85,0x8c,0x0c,0x30,0xf4,0x61,0x40,0x2d,0x46,0xb4,0x05,0x8b,0x04,0xb0,0x15,0x40,0x5a,0x50,0x23,0xe6,0x01,0x02,0x8c,0xa8,0x2e,0xb1,0xe5,0x40,0x81,0x46,0x6a,0x17,0x59,0xeb,0xe4,0xa8,0x11,0xa0,0x5a,0x68,0x27,0x4e,0xd3,0x59,0xad,0x82,0xfa,0xed,0x2a,0x04,0x28,0x2e,0xb7,0xa7,0x69,0xc3,0x42,0xeb,0xf5,0x1f,0x09,0x4c,0x42,0xed,0xea,0x01,0x8c,0x06,0x41,0x05,0x0b,0xbc,0x02,0x0d,0x80,0x83,0x05,0xe2,0x11,0x40,0x0b,0xb7,0x14,0x06,0x33,0x0c,0x83,0x89,0x02,0xe3,0xca,0x3d,0x95,0x01,0xe2,0x21,0x74,0xc2,0x81,0x0b,0x0e,0x17,0x6c,0x10,0x10,0xaf,0x09,0xe2,0x0b,0xbb,0xd0,0x42,0xeb,0x02,}; | const uint8_t _I_DolphinNice_96x59_0[] = {0x01,0x00,0x8a,0x01,0x00,0x37,0xfa,0x3e,0x0a,0x8f,0x04,0x04,0x02,0x20,0xb7,0x8c,0x00,0x86,0x1c,0x0b,0x78,0x20,0x08,0x66,0x00,0xb7,0x81,0x00,0x86,0x80,0x0b,0x71,0x61,0x60,0x01,0x4c,0x07,0x41,0xe3,0x07,0xd0,0x4e,0x40,0xb8,0x1f,0x90,0x00,0xe4,0x00,0xba,0x88,0x01,0x0e,0x10,0x0a,0x48,0xf9,0x6c,0xbe,0x10,0x70,0x82,0x78,0x3c,0x15,0x82,0x18,0xc2,0x21,0x00,0xb4,0x02,0x0e,0xbc,0x86,0x30,0x48,0x80,0xd1,0x05,0x03,0x78,0x82,0xc0,0x3e,0x52,0x32,0x63,0x70,0x20,0x70,0x09,0xd4,0x98,0xb0,0xf0,0x60,0x58,0xc9,0xce,0x12,0x0b,0xbf,0xd4,0x9d,0x28,0x9e,0x24,0xa9,0x82,0xda,0x24,0x2d,0x10,0x00,0xfd,0x2a,0x60,0xb4,0x85,0x4e,0x00,0x85,0xf8,0xd4,0x82,0xd2,0x09,0xc0,0x12,0x14,0x12,0xad,0x81,0x29,0xa8,0x90,0xf5,0x01,0x75,0x80,0x46,0x00,0xa5,0x50,0x0b,0x90,0x1c,0x41,0x63,0x60,0x05,0x96,0xc0,0x2e,0x52,0x44,0x79,0x60,0x06,0x05,0x50,0x05,0x94,0x89,0x88,0x63,0x02,0x98,0x02,0xc7,0xc1,0x21,0x6a,0x98,0xa0,0x62,0x11,0x00,0x58,0xc6,0x02,0xe2,0xb8,0x21,0x80,0xc3,0x05,0x02,0x38,0x11,0x78,0xa5,0x0b,0x01,0x81,0x5a,0x88,0x2c,0x60,0x40,0xb1,0xc0,0x27,0x0a,0xfc,0x0f,0x28,0x04,0x06,0x50,0x05,0x18,0xa9,0x94,0xc1,0x67,0x48,0x02,0x8c,0xb8,0x16,0xf8,0x80,0x28,0xd6,0x16,0x86,0x0b,0x38,0x40,0xd4,0x76,0x0c,0xd4,0x05,0x94,0x10,0x9a,0x34,0x01,0x82,0x1f,0x06,0x05,0x02,0x98,0x01,0x47,0x54,0x18,0x35,0xc8,0xff,0x20,0x3c,0x00,0x58,0xd5,0x6a,0xa0,0xb3,0x81,0xa3,0x0a,0x0f,0x80,0xd5,0xea,0x81,0x67,0x07,0x46,0x14,0xe3,0xe1,0x55,0x18,0x18,0x2c,0x51,0x85,0xc0,0xef,0x85,0x8c,0x0c,0x30,0xf4,0x61,0x40,0x2d,0x46,0xb4,0x05,0x8b,0x04,0xb0,0x15,0x40,0x5a,0x50,0x23,0xe6,0x01,0x02,0x8c,0xa8,0x2e,0xb1,0xe5,0x40,0x81,0x46,0x6a,0x17,0x59,0xeb,0xe4,0xa8,0x11,0xa0,0x5a,0x68,0x27,0x4e,0xd3,0x59,0xad,0x82,0xfa,0xed,0x2a,0x04,0x28,0x2e,0xb7,0xa7,0x69,0xc3,0x42,0xeb,0xf5,0x1f,0x09,0x4c,0x42,0xed,0xea,0x01,0x8c,0x06,0x41,0x05,0x0b,0xbc,0x02,0x0d,0x80,0x83,0x05,0xe2,0x11,0x40,0x0b,0xb7,0x14,0x06,0x33,0x0c,0x83,0x89,0x02,0xe3,0xca,0x3d,0x95,0x01,0xe2,0x21,0x74,0xc2,0x81,0x0b,0x0e,0x17,0x6c,0x10,0x10,0xaf,0x09,0xe2,0x0b,0xbb,0xd0,0x42,0xeb,0x02,}; | ||||||
| const uint8_t *_I_DolphinNice_96x59[] = {_I_DolphinNice_96x59_0}; | const uint8_t *_I_DolphinNice_96x59[] = {_I_DolphinNice_96x59_0}; | ||||||
| @ -470,70 +467,89 @@ const uint8_t *_I_DolphinNice_96x59[] = {_I_DolphinNice_96x59_0}; | |||||||
| const uint8_t _I_iButtonDolphinSuccess_109x60_0[] = {0x01,0x00,0xac,0x01,0x00,0x17,0xfe,0x1e,0x0c,0xaf,0x04,0x02,0xe0,0x0d,0xa8,0xf4,0x03,0x01,0x03,0x06,0x46,0x02,0x02,0x03,0x18,0xe0,0x36,0x2c,0x00,0x36,0x00,0x2c,0x40,0x3e,0x60,0xd8,0x84,0x01,0x0c,0x5a,0x40,0x05,0x82,0x01,0x0e,0x04,0x0d,0x70,0x42,0x04,0x90,0x49,0x02,0xe4,0x20,0x41,0x28,0xc0,0x07,0x40,0x06,0xf8,0x00,0xa4,0x00,0xd6,0x03,0xa8,0x37,0x44,0x2a,0x31,0x74,0xd3,0x83,0x57,0x80,0x0d,0xc7,0x18,0xa9,0xa8,0x36,0x2a,0x86,0x06,0x8d,0xfc,0x36,0x60,0xd7,0xc0,0x3b,0x8c,0x36,0xf0,0x4a,0x05,0xf9,0x6e,0x5e,0x06,0x23,0x41,0x24,0x1f,0xf6,0x01,0x74,0x01,0xb1,0xe3,0x82,0x81,0x47,0x40,0x0d,0x7c,0x87,0x8e,0x12,0x05,0x1a,0x84,0x0d,0xb6,0xa0,0xd2,0x85,0x86,0xc8,0x1a,0x50,0x40,0x69,0x40,0xb2,0x1f,0xf0,0x69,0x50,0x01,0xa5,0x08,0xfc,0x03,0x5f,0x60,0x0d,0x28,0x84,0x1a,0x07,0x18,0x06,0xaf,0x00,0x1a,0x3c,0x03,0xb8,0xc3,0x20,0xd0,0x28,0x87,0xfc,0x8a,0x50,0x08,0x78,0x08,0x70,0x77,0x0c,0x44,0x06,0x05,0x30,0xff,0x18,0x4a,0x01,0x30,0x01,0x0d,0x33,0x19,0x11,0x1b,0x8c,0xa2,0xf8,0x7d,0x27,0x71,0xd0,0x20,0x51,0x20,0x68,0xd5,0x00,0x42,0x0d,0x2c,0x00,0x08,0x64,0x10,0x19,0x20,0x28,0x75,0x07,0x53,0x3d,0x18,0x35,0x2a,0x9f,0xf4,0x9a,0x41,0x90,0x23,0x00,0x94,0x43,0xe0,0x5e,0xae,0x03,0x9d,0xb4,0xe0,0xd1,0x0d,0x8c,0xd0,0x52,0xb1,0x00,0xd9,0x83,0x46,0x34,0x45,0x41,0xa8,0x9f,0x86,0x01,0x14,0x05,0x08,0x08,0x81,0xa6,0x62,0x10,0x68,0xe5,0x20,0x70,0x41,0x80,0x80,0x10,0xc4,0x34,0x48,0x04,0x2a,0x38,0x0d,0x99,0x16,0x02,0x1a,0xd5,0x10,0x6c,0x5e,0x2e,0x0b,0xa1,0x4b,0x0a,0x60,0xc1,0xa7,0x84,0xfc,0x58,0x01,0xb5,0x02,0x82,0xb4,0xc4,0x16,0x22,0xa5,0x06,0x96,0x19,0x20,0x20,0xd7,0x30,0x8c,0x0f,0x08,0x05,0x10,0x68,0xa1,0x44,0x1a,0x98,0x08,0x14,0x11,0x28,0x21,0x91,0x1d,0x8f,0x83,0xfe,0x07,0x1b,0x00,0x34,0x61,0x00,0xd3,0x1d,0x8c,0x7a,0x01,0x7e,0x80,0x56,0x30,0x06,0xb1,0x4a,0x08,0xd4,0xbf,0xc1,0x31,0xc0,0x7f,0xe8,0xf0,0x08,0x3c,0x40,0x1a,0x80,0x04,0x5a,0x8c,0x10,0x80,0x40,0xd7,0x05,0x08,0x36,0xc0,0xe2,0x0d,0xb8,0x30,0x34,0x45,0x82,0x0d,0x72,0x49,0x03,0x5a,0x41,0x55,0xf8,0x7f,0xff,0xe8,0x72,0x06,0xae,0x03,0xf4,0x0c,0x1d,0xf8,0x18,0x60,0x40,0xd2,0x4b,0x9f,0xd0,0x1a,0x35,0x71,0x48,0xc0,0x95,0x42,0x0d,0x4d,0x50,0x70,0x75,0x40,0xd1,0x80,0x83,0x5a,0xa1,0x55,0x00,0x0c,0x05,0xa4,0x20,0xd2,}; | const uint8_t _I_iButtonDolphinSuccess_109x60_0[] = {0x01,0x00,0xac,0x01,0x00,0x17,0xfe,0x1e,0x0c,0xaf,0x04,0x02,0xe0,0x0d,0xa8,0xf4,0x03,0x01,0x03,0x06,0x46,0x02,0x02,0x03,0x18,0xe0,0x36,0x2c,0x00,0x36,0x00,0x2c,0x40,0x3e,0x60,0xd8,0x84,0x01,0x0c,0x5a,0x40,0x05,0x82,0x01,0x0e,0x04,0x0d,0x70,0x42,0x04,0x90,0x49,0x02,0xe4,0x20,0x41,0x28,0xc0,0x07,0x40,0x06,0xf8,0x00,0xa4,0x00,0xd6,0x03,0xa8,0x37,0x44,0x2a,0x31,0x74,0xd3,0x83,0x57,0x80,0x0d,0xc7,0x18,0xa9,0xa8,0x36,0x2a,0x86,0x06,0x8d,0xfc,0x36,0x60,0xd7,0xc0,0x3b,0x8c,0x36,0xf0,0x4a,0x05,0xf9,0x6e,0x5e,0x06,0x23,0x41,0x24,0x1f,0xf6,0x01,0x74,0x01,0xb1,0xe3,0x82,0x81,0x47,0x40,0x0d,0x7c,0x87,0x8e,0x12,0x05,0x1a,0x84,0x0d,0xb6,0xa0,0xd2,0x85,0x86,0xc8,0x1a,0x50,0x40,0x69,0x40,0xb2,0x1f,0xf0,0x69,0x50,0x01,0xa5,0x08,0xfc,0x03,0x5f,0x60,0x0d,0x28,0x84,0x1a,0x07,0x18,0x06,0xaf,0x00,0x1a,0x3c,0x03,0xb8,0xc3,0x20,0xd0,0x28,0x87,0xfc,0x8a,0x50,0x08,0x78,0x08,0x70,0x77,0x0c,0x44,0x06,0x05,0x30,0xff,0x18,0x4a,0x01,0x30,0x01,0x0d,0x33,0x19,0x11,0x1b,0x8c,0xa2,0xf8,0x7d,0x27,0x71,0xd0,0x20,0x51,0x20,0x68,0xd5,0x00,0x42,0x0d,0x2c,0x00,0x08,0x64,0x10,0x19,0x20,0x28,0x75,0x07,0x53,0x3d,0x18,0x35,0x2a,0x9f,0xf4,0x9a,0x41,0x90,0x23,0x00,0x94,0x43,0xe0,0x5e,0xae,0x03,0x9d,0xb4,0xe0,0xd1,0x0d,0x8c,0xd0,0x52,0xb1,0x00,0xd9,0x83,0x46,0x34,0x45,0x41,0xa8,0x9f,0x86,0x01,0x14,0x05,0x08,0x08,0x81,0xa6,0x62,0x10,0x68,0xe5,0x20,0x70,0x41,0x80,0x80,0x10,0xc4,0x34,0x48,0x04,0x2a,0x38,0x0d,0x99,0x16,0x02,0x1a,0xd5,0x10,0x6c,0x5e,0x2e,0x0b,0xa1,0x4b,0x0a,0x60,0xc1,0xa7,0x84,0xfc,0x58,0x01,0xb5,0x02,0x82,0xb4,0xc4,0x16,0x22,0xa5,0x06,0x96,0x19,0x20,0x20,0xd7,0x30,0x8c,0x0f,0x08,0x05,0x10,0x68,0xa1,0x44,0x1a,0x98,0x08,0x14,0x11,0x28,0x21,0x91,0x1d,0x8f,0x83,0xfe,0x07,0x1b,0x00,0x34,0x61,0x00,0xd3,0x1d,0x8c,0x7a,0x01,0x7e,0x80,0x56,0x30,0x06,0xb1,0x4a,0x08,0xd4,0xbf,0xc1,0x31,0xc0,0x7f,0xe8,0xf0,0x08,0x3c,0x40,0x1a,0x80,0x04,0x5a,0x8c,0x10,0x80,0x40,0xd7,0x05,0x08,0x36,0xc0,0xe2,0x0d,0xb8,0x30,0x34,0x45,0x82,0x0d,0x72,0x49,0x03,0x5a,0x41,0x55,0xf8,0x7f,0xff,0xe8,0x72,0x06,0xae,0x03,0xf4,0x0c,0x1d,0xf8,0x18,0x60,0x40,0xd2,0x4b,0x9f,0xd0,0x1a,0x35,0x71,0x48,0xc0,0x95,0x42,0x0d,0x4d,0x50,0x70,0x75,0x40,0xd1,0x80,0x83,0x5a,0xa1,0x55,0x00,0x0c,0x05,0xa4,0x20,0xd2,}; | ||||||
| const uint8_t *_I_iButtonDolphinSuccess_109x60[] = {_I_iButtonDolphinSuccess_109x60_0}; | const uint8_t *_I_iButtonDolphinSuccess_109x60[] = {_I_iButtonDolphinSuccess_109x60_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_DolphinExcited_64x63_0[] = {0x01,0x00,0x36,0x01,0x00,0x25,0x00,0x0f,0xd2,0x00,0x3b,0xe0,0x00,0xeb,0x10,0x0c,0x34,0x40,0x30,0xd0,0x88,0x80,0x1d,0xa1,0x00,0x42,0xfc,0x7f,0xc0,0x63,0x04,0x01,0x0e,0x02,0x0f,0x00,0x00,0x8c,0x08,0x0e,0x37,0x00,0x10,0xc6,0x20,0x10,0x10,0xd9,0x11,0x92,0x1c,0x1a,0x3e,0x00,0x04,0x42,0x02,0x1a,0x20,0xb0,0xce,0x00,0x64,0x07,0x20,0x59,0x16,0x50,0x36,0x45,0x94,0x84,0x78,0x20,0x60,0x75,0x8e,0x43,0x06,0x63,0x3c,0x33,0x94,0x0c,0xd2,0x5c,0x30,0x38,0xe4,0x08,0x43,0x10,0xc0,0x5e,0x06,0x22,0x53,0x1a,0x02,0x08,0x7f,0xd0,0x32,0xc1,0x50,0x21,0x14,0x0e,0x70,0x1c,0x46,0xe2,0x07,0x19,0x06,0x3c,0xdc,0x20,0x91,0xae,0x01,0xcc,0xbe,0x30,0x09,0xfc,0x12,0x41,0xff,0x83,0xcc,0x0a,0xa3,0x1f,0x03,0x99,0xe8,0x7c,0x10,0xf8,0x25,0xa0,0x5e,0x50,0x0f,0x84,0x1e,0x09,0x54,0x03,0x9f,0xf2,0x07,0x02,0xd5,0x11,0xca,0x01,0xfe,0x80,0xc0,0xaa,0x9f,0xf0,0x39,0x5f,0xd0,0x43,0xaa,0x83,0x41,0x92,0xc3,0x1f,0x03,0x8d,0x52,0x02,0x2e,0x25,0xc9,0x6a,0x99,0x46,0xa6,0x2a,0xa0,0x1c,0xaf,0xca,0x62,0x94,0x28,0xcb,0x7e,0x0f,0x15,0x71,0xf8,0x3c,0x22,0x71,0x03,0x8a,0x84,0x67,0x18,0x0f,0xac,0x1c,0x0e,0x38,0x08,0x0c,0x3e,0x01,0xae,0xbd,0x13,0x0c,0x0e,0x35,0x8e,0xa8,0x1c,0xb0,0x1f,0xf8,0x06,0x83,0xf4,0x27,0x38,0x07,0xff,0xff,0x8f,0x03,0xa0,0x4c,0x80,0xed,0x60,0x03,0xb4,0x60,0x0e,0xd0,0x60,0x3a,0x87,0x84,0x0e,0xb7,0xc2,0xfa,0x18,0x05,0x44,0x20,0x73,0xff,0xf7,0xce,0xe4,0x07,0x2d,0x52,0x2c,0x80,0xe7,0x54,0xea,0x81,0xd7,0x50,0x0f,0x7a,0xaa,0x3d,0x41,0xe2,0x07,0x5a,0x80,0x3c,0xa0,0x40,0x72,0xd0,0x6a,0x80,0xa2,0x07,0x3a,0x05,0x54,0x8e,0x20,0x73,0xc0,0x03,0xd8,0x60,0x30,0x40,0x3a,0xc0,0x00,0xee,0xea,0x10,0x3b,0x80,}; | ||||||
|  | const uint8_t *_I_DolphinExcited_64x63[] = {_I_DolphinExcited_64x63_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_iButtonKey_49x44_0[] = {0x01,0x00,0xb4,0x00,0x00,0x24,0xfc,0x0a,0x9c,0x0e,0x00,0x19,0x26,0x18,0x00,0x32,0x43,0x20,0x10,0x10,0x31,0xc0,0x80,0xc9,0x80,0x02,0x08,0x18,0xec,0x00,0x21,0x03,0x1c,0x40,0x1e,0x22,0x15,0xa0,0x08,0x56,0x40,0x06,0x30,0xc0,0x85,0x84,0x86,0x40,0x21,0x84,0x10,0xcc,0x04,0x30,0x40,0x31,0x02,0x88,0x3a,0x20,0x01,0x83,0x0d,0x94,0x06,0x26,0x03,0xf8,0x43,0xc5,0xe9,0x0c,0x11,0x08,0xbc,0xe0,0x64,0x21,0x23,0x09,0x38,0x80,0x22,0x28,0x20,0x58,0x99,0xc4,0x50,0x41,0xe1,0xc0,0x60,0xcc,0xab,0x47,0x21,0xa6,0x02,0x9e,0x06,0x22,0x70,0xf0,0x00,0xcb,0x40,0x03,0x18,0xb0,0x78,0x14,0xe0,0x32,0x58,0x28,0xa5,0x84,0xd0,0x51,0x80,0xc9,0x30,0x06,0xae,0x62,0x84,0x06,0x48,0x64,0x88,0x0c,0x90,0x29,0x08,0x19,0x30,0x31,0x13,0x71,0xb8,0xc4,0xea,0x70,0x6b,0xc5,0x01,0x4a,0x7f,0xc8,0x7c,0x81,0x4a,0x77,0x8a,0xac,0x45,0x4a,0x7f,0x08,0x54,0x39,0x4a,0x7e,0x0e,0xa9,0xf0,0xcb,0xe3,0x7f,0x6e,0x22,0x5c,0x59,0x44,0x00,0x28,0x7a,0xd4,0x40,0x07,0xf0,0x02,0xa0,}; | ||||||
|  | const uint8_t *_I_iButtonKey_49x44[] = {_I_iButtonKey_49x44_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_iButtonDolphinVerySuccess_108x52_0[] = {0x01,0x00,0xc2,0x01,0x00,0x0f,0xe2,0xfe,0x0d,0xb8,0x3e,0x02,0x06,0x0c,0x9f,0x00,0x08,0x61,0x80,0xd9,0x8c,0x00,0x86,0x60,0x0d,0x98,0x30,0x08,0x6a,0x00,0xd9,0x80,0x80,0x87,0x40,0x0c,0x8c,0x00,0x0c,0xa8,0x01,0x12,0x00,0x2d,0x00,0x22,0x70,0x20,0x6b,0xc8,0x02,0x26,0x62,0x88,0x80,0x6c,0xc9,0x24,0x0d,0x9a,0x07,0x17,0xfe,0x1d,0x68,0x40,0x6c,0xe7,0x48,0x04,0x28,0x10,0x34,0xe8,0x10,0xd1,0x11,0xc4,0x01,0xa5,0x04,0x06,0x96,0xa0,0xa6,0x24,0xc2,0x88,0x17,0x88,0x1a,0x7d,0x43,0x78,0x82,0x4a,0x40,0x03,0x20,0xb0,0xff,0x20,0x16,0xa3,0xb2,0x48,0x03,0xe4,0x0d,0x1f,0xfc,0x06,0x3a,0x0d,0x4a,0x00,0x34,0xf8,0x00,0xd1,0x37,0x0f,0x82,0x9e,0x95,0x58,0x17,0x83,0xff,0x81,0x1b,0x0f,0xf1,0xfe,0x71,0xe0,0x69,0x7c,0x3f,0xe0,0x82,0xff,0xcf,0xc0,0x85,0x61,0x80,0x43,0xb0,0x5f,0xa8,0x79,0xdc,0x81,0xa5,0x70,0xc0,0x68,0x3c,0x10,0x1a,0x17,0xd5,0x28,0x42,0xd1,0x8f,0x84,0x46,0x83,0xb0,0x8e,0x40,0x34,0x5f,0xa8,0x38,0x34,0x45,0xa2,0x0d,0x18,0x04,0x9b,0x50,0x03,0x1a,0x14,0x35,0x36,0x5f,0x8f,0xf8,0xb8,0xa4,0x19,0x40,0x18,0xe8,0xa0,0xca,0x22,0xfe,0x7f,0xc4,0x05,0x20,0xa5,0x80,0xc6,0x82,0xcb,0x3f,0xf3,0x44,0xfc,0x12,0x40,0x18,0xe8,0x51,0x82,0x52,0x28,0xfc,0x38,0x0a,0x3e,0x48,0x98,0x6c,0x8f,0x43,0x00,0xe0,0x63,0xe0,0x62,0xe2,0x91,0x90,0x0a,0x02,0x0d,0x2f,0x82,0x50,0x41,0xa3,0x80,0x90,0x41,0x04,0xc3,0x01,0xc0,0x83,0x46,0x71,0x30,0x06,0x95,0x82,0x21,0x02,0x6e,0x88,0x6c,0x43,0x83,0x1f,0x2f,0x88,0x34,0x62,0x00,0xd1,0x15,0x08,0x2c,0x60,0xcc,0x51,0x0f,0x08,0xcc,0x81,0xa2,0x12,0x10,0x68,0xc6,0x3f,0x06,0xc2,0x06,0x8e,0x02,0x16,0x41,0x20,0x10,0xf8,0x01,0x85,0x00,0x19,0x0d,0x82,0x18,0x07,0x20,0x81,0x00,0x0c,0x9c,0x31,0x08,0x42,0x74,0x81,0xab,0x80,0x03,0x0c,0x32,0x11,0x0b,0x06,0xb9,0xc0,0x43,0xa3,0x10,0x8b,0x83,0x5c,0xe0,0x20,0x81,0xc8,0x26,0x49,0x4c,0x40,0x02,0x86,0x0a,0xc5,0x22,0x32,0x50,0x6b,0x93,0x86,0xc0,0x0d,0x19,0x18,0x35,0x8c,0x84,0x79,0x1a,0x84,0x84,0x1a,0xdf,0xc2,0xe0,0x8a,0xc7,0x51,0x22,0x06,0xb5,0x5e,0x3f,0x00,0x77,0x0d,0x60,0x36,0xfa,0xa9,0xd7,0x00,0x08,0x3a,0xc9,0x02,0x48,0xc0,0x05,0x54,0xba,0x98,0x8a,0xa8,0xf1,0x20,0x6a,0x6a,0x3d,0x43,0x61,0x80,0x4a,0x81,0xaf,0x40,0xea,0x8d,0x86,0x01,0x56,0x06,0x93,0x60,0x80,0x05,0xea,0x01,0x94,0xac,0x1b,0x11,0x80,0x19,0x45,0x41,0x44,0x0d,0x58,0x33,0x18,0xa1,0x4f,0xf3,0x06,0x1f,0x01,0x76,0x58,0x00,0xd9,0x83,0x52,0x7c,0x11,0x38,0x51,0x40,0x80,}; | ||||||
|  | const uint8_t *_I_iButtonDolphinVerySuccess_108x52[] = {_I_iButtonDolphinVerySuccess_108x52_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DolphinWait_61x59_0[] = {0x01,0x00,0x56,0x01,0x00,0x17,0xfa,0x1e,0x06,0x4f,0x84,0x06,0xe0,0x07,0x48,0x64,0x03,0x01,0x01,0x03,0x9c,0x0c,0x04,0x30,0x60,0x31,0x70,0x00,0x65,0x08,0x01,0x94,0xc0,0x06,0x51,0x00,0x5b,0x48,0x00,0x65,0x04,0x01,0x95,0x00,0x82,0xd8,0x00,0x19,0x40,0x7e,0x00,0x75,0x1f,0x88,0xe0,0x88,0x02,0x1a,0x1f,0x94,0x14,0x0e,0xbf,0x98,0x58,0x5c,0x42,0x45,0x00,0x9e,0x99,0x87,0x01,0x02,0x11,0x94,0xf2,0x2e,0x03,0x18,0x39,0x28,0x70,0x1f,0xc0,0x3e,0x42,0x00,0xe5,0x80,0xff,0xdf,0xc0,0xe5,0xf8,0x85,0xd8,0x10,0x27,0x40,0xf9,0xc2,0x63,0x88,0x12,0x82,0x6a,0x20,0x50,0x41,0xe9,0x42,0x20,0x95,0x48,0x6e,0x0c,0xfa,0x9a,0xaf,0xf9,0x90,0xe2,0x10,0x2e,0xac,0xe0,0x0e,0x98,0x29,0x52,0x11,0x13,0x23,0x15,0x3e,0x20,0x3c,0x61,0x40,0x52,0xfc,0x4f,0xe2,0x10,0x38,0x68,0x1c,0xa0,0xfc,0x08,0xbe,0x04,0x1e,0x5e,0x01,0xb9,0x03,0xc5,0x60,0x24,0xf2,0x84,0x60,0x63,0x40,0x71,0x27,0x9c,0x0e,0x2b,0x04,0x6c,0xa4,0x06,0x15,0x08,0x6c,0x99,0x8c,0xa6,0x0f,0x81,0x00,0x0c,0x08,0xf0,0x3c,0x05,0x61,0xc0,0x40,0x86,0xd0,0x30,0x78,0x80,0x0c,0xc6,0x2b,0x92,0x00,0x0d,0x51,0xf0,0x2d,0x42,0x0a,0x8e,0xaa,0x34,0x0f,0x4a,0x85,0x55,0x6e,0x20,0xf3,0xd5,0x6a,0x84,0xa2,0x66,0x2a,0x05,0xf7,0xaa,0x07,0x18,0xaf,0xfb,0x7f,0xea,0xc1,0xef,0xc0,0xe3,0xea,0x80,0xf8,0x27,0xf0,0x0a,0xc0,0x1c,0x67,0xa2,0xd1,0xb1,0xc0,0x34,0x00,0x71,0x14,0x8f,0x00,0x98,0x34,0x02,0x69,0xd0,0x37,0x90,0x16,0xf1,0x00,0x06,0xe1,0x84,0x31,0x89,0x14,0xe9,0xdc,0x40,0x38,0xa4,0xc4,0x4c,0x3c,0x1f,0x88,0x8c,0x5b,0xc3,0x01,0xbc,0x40,0x3f,0xf0,0xf6,0x71,0x0c,0x0b,0xe0,0x07,0x3c,0x0a,0xf8,0xa3,0xf0,0x03,0xb8,0xd8,0x80,0xe8,0x87,0x1b,0xa8,0x1c,0x78,0x1f,0xf8,0x0e,0x7e,0x01,0x6a,0x03,0x94,0x0f,0xfd,0xa0,0x80,0x7d,0x49,0x04,0x4d,0x12,0xc0,0xfa,0x83,0x83,0xbe,0x26,0x8d,0x02,0x05,0xd5,0xff,0xff,0xeb,0xe9,0x31,0x90,0x40,0x80,}; | ||||||
|  | const uint8_t *_I_DolphinWait_61x59[] = {_I_DolphinWait_61x59_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DolphinMafia_115x62_0[] = {0x01,0x00,0x21,0x02,0x00,0x1e,0x02,0x06,0x0e,0xcb,0x04,0x10,0x1d,0x91,0x88,0x40,0x3b,0x20,0xc0,0xec,0xc0,0x40,0x62,0x03,0xac,0x80,0x03,0xb2,0x31,0x00,0x90,0x03,0xae,0x5e,0x0e,0xcf,0xc4,0x56,0x01,0x40,0x07,0x56,0xbe,0x14,0x0e,0x2f,0xf1,0x5e,0x2a,0xa1,0xd1,0xc0,0x7c,0x3f,0xf0,0x70,0x73,0x70,0x35,0x41,0xd1,0xc0,0x7f,0xff,0xf0,0xf0,0x73,0x50,0x03,0xa4,0x0d,0x10,0x74,0x07,0x46,0x55,0xe0,0x07,0x10,0xb1,0xc3,0xa3,0x55,0xfe,0x03,0x88,0x94,0xe1,0xd1,0xd5,0x03,0x4a,0x3e,0x59,0x9e,0xaf,0xfe,0xff,0x05,0x60,0x4e,0xab,0xf5,0xff,0x95,0xb4,0xa4,0x3a,0x3f,0xd0,0xe0,0xfa,0x20,0x20,0xf8,0xd5,0xff,0xb5,0xf0,0x0f,0x88,0x3a,0x6a,0xbf,0xf8,0xaf,0x82,0x6f,0x03,0x07,0x47,0xaf,0xff,0x0a,0xfe,0x5f,0xc1,0xd3,0xf6,0xbf,0xe0,0x7f,0xfe,0xf0,0x73,0x41,0x00,0x43,0xfa,0xd7,0xf8,0x27,0xfe,0xe0,0x73,0x40,0x80,0x43,0xfe,0xab,0xfe,0x21,0xfc,0xe5,0x9b,0x05,0x48,0xea,0x3f,0xc8,0xfa,0xc4,0x66,0x07,0x44,0x0e,0x8f,0x00,0xb0,0x2b,0x31,0x07,0x0f,0x00,0x1c,0x72,0x00,0x70,0xf8,0x37,0xe5,0x81,0xff,0x89,0x08,0xf2,0x71,0x80,0x20,0xfe,0x2b,0xf0,0x5f,0xc0,0x38,0xc8,0xa5,0x60,0xc3,0x00,0xc7,0xf9,0xaf,0x81,0x2d,0x04,0x34,0x40,0xe1,0x98,0x47,0x68,0x04,0x92,0xab,0xc0,0x7e,0xb7,0xf7,0x39,0x03,0x85,0x8e,0x24,0xf1,0xc0,0x7f,0xf5,0x78,0x0f,0x53,0xb4,0xbc,0x1f,0xb8,0x1a,0x0c,0x61,0xc5,0x82,0xab,0xc0,0x3e,0xa3,0xa2,0xfc,0x07,0x46,0x09,0x60,0x19,0x8f,0x80,0xec,0x38,0x08,0x52,0x6c,0xb8,0xdc,0x28,0x7c,0x10,0x2a,0x5f,0x0f,0xfc,0x5a,0x01,0x05,0x1a,0x8e,0x02,0x02,0x1d,0x1f,0x81,0xa8,0xbe,0x13,0xf8,0x52,0x2c,0x8c,0x62,0x77,0x42,0x11,0x40,0xe0,0xca,0x93,0x8e,0x03,0x8a,0x30,0x10,0x48,0x54,0x03,0x04,0xbb,0x2c,0x00,0x0c,0x64,0x80,0xe4,0x0e,0x88,0x38,0x7c,0x10,0x04,0x09,0x48,0x83,0xac,0x1b,0x18,0xf3,0x44,0xc1,0xca,0x1d,0x15,0x40,0x8e,0x05,0x02,0x20,0xe6,0x24,0x12,0x8c,0x8b,0x05,0x21,0x07,0x24,0x14,0x08,0x73,0x80,0x19,0x78,0x43,0xb2,0xff,0x15,0x30,0xc4,0x01,0x26,0x8f,0x14,0x61,0xa9,0x8a,0x09,0x10,0x02,0x12,0x1c,0x80,0x84,0xaf,0x10,0x71,0xaa,0xc4,0x00,0x3b,0x04,0xea,0x24,0x48,0x1c,0xbd,0x8f,0xf8,0x00,0x67,0xf0,0x09,0x40,0x20,0x61,0x00,0xe4,0xf6,0x07,0x4b,0xc1,0x1f,0x07,0x14,0x40,0x1c,0x9d,0x66,0x79,0x24,0xc6,0xa0,0x0e,0x32,0x51,0xfa,0xce,0xe7,0x50,0x07,0x1c,0x80,0x30,0x58,0x0e,0xa2,0xcc,0xa0,0x19,0x00,0x71,0x42,0x13,0x27,0x40,0xf5,0x45,0x41,0xc5,0x08,0xb0,0x80,0xc6,0x18,0xf2,0x28,0x04,0x83,0xe8,0x58,0x10,0x30,0xc2,0x2c,0x40,0x91,0x89,0x3c,0x88,0x62,0x21,0xd2,0xff,0x03,0x87,0xc8,0x12,0x19,0x08,0x39,0x3e,0x83,0xb2,0x4a,0x0e,0xa2,0x0d,0xc0,0xe0,0x50,0x06,0xa7,0xe8,0x2c,0x94,0xc2,0x09,0x50,0x8c,0xce,0x20,0x34,0x70,0x71,0x41,0x3e,0x85,0xe2,0xe0,0x41,0x38,0x1e,0x28,0x3c,0x19,0xc8,0x70,0x4f,0xc1,0xdc,0xe0,0x74,0x01,0xd8,0xc6,0x24,0x00,0x82,0x81,0x7c,0x12,0xa6,0x7e,0x10,0x28,0xd8,0x22,0x00,0xe3,0xfc,0x34,0x53,0x00,0x23,0x1c,0x04,0x44,0x0e,0x50,0x10,0xeb,0x17,0xca,0x1c,0x07,0x20,}; | ||||||
|  | const uint8_t *_I_DolphinMafia_115x62[] = {_I_DolphinMafia_115x62_0}; | ||||||
|  | 
 | ||||||
| const Icon I_Certification2_119x30 = {.width=119,.height=30,.frame_count=1,.frame_rate=0,.frames=_I_Certification2_119x30}; | const Icon I_Certification2_119x30 = {.width=119,.height=30,.frame_count=1,.frame_rate=0,.frames=_I_Certification2_119x30}; | ||||||
| const Icon I_Certification1_103x23 = {.width=103,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Certification1_103x23}; | const Icon I_Certification1_103x23 = {.width=103,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Certification1_103x23}; | ||||||
| const Icon A_WatchingTV_128x64 = {.width=128,.height=64,.frame_count=4,.frame_rate=1,.frames=_A_WatchingTV_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 A_Wink_128x64 = {.width=128,.height=64,.frame_count=9,.frame_rate=1,.frames=_A_Wink_128x64}; | ||||||
| const Icon I_sub1_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_sub1_10px}; |  | ||||||
| const Icon I_ir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ir_10px}; |  | ||||||
| const Icon I_unknown_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_unknown_10px}; |  | ||||||
| const Icon I_ibutt_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ibutt_10px}; |  | ||||||
| const Icon I_Nfc_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Nfc_10px}; |  | ||||||
| const Icon I_ble_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ble_10px}; | const Icon I_ble_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ble_10px}; | ||||||
|  | const Icon I_ibutt_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ibutt_10px}; | ||||||
| const Icon I_125_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_125_10px}; | const Icon I_125_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_125_10px}; | ||||||
|  | const Icon I_sub1_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_sub1_10px}; | ||||||
| const Icon I_dir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_dir_10px}; | const Icon I_dir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_dir_10px}; | ||||||
|  | const Icon I_ir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ir_10px}; | ||||||
|  | const Icon I_Nfc_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Nfc_10px}; | ||||||
|  | const Icon I_unknown_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_unknown_10px}; | ||||||
| const Icon I_BLE_Pairing_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_BLE_Pairing_128x64}; | const Icon I_BLE_Pairing_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_BLE_Pairing_128x64}; | ||||||
| const Icon I_ButtonDown_7x4 = {.width=7,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_ButtonDown_7x4}; |  | ||||||
| const Icon I_ButtonCenter_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonCenter_7x7}; |  | ||||||
| const Icon I_ButtonLeft_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonLeft_4x7}; |  | ||||||
| const Icon I_ButtonUp_7x4 = {.width=7,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_ButtonUp_7x4}; |  | ||||||
| const Icon I_DFU_128x50 = {.width=128,.height=50,.frame_count=1,.frame_rate=0,.frames=_I_DFU_128x50}; |  | ||||||
| const Icon I_ButtonLeftSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rate=0,.frames=_I_ButtonLeftSmall_3x5}; |  | ||||||
| const Icon I_ButtonRightSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRightSmall_3x5}; | const Icon I_ButtonRightSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRightSmall_3x5}; | ||||||
|  | const Icon I_ButtonLeftSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rate=0,.frames=_I_ButtonLeftSmall_3x5}; | ||||||
|  | const Icon I_ButtonCenter_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonCenter_7x7}; | ||||||
|  | const Icon I_ButtonDown_7x4 = {.width=7,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_ButtonDown_7x4}; | ||||||
| const Icon I_ButtonRight_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRight_4x7}; | const Icon I_ButtonRight_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRight_4x7}; | ||||||
|  | const Icon I_DFU_128x50 = {.width=128,.height=50,.frame_count=1,.frame_rate=0,.frames=_I_DFU_128x50}; | ||||||
|  | const Icon I_ButtonUp_7x4 = {.width=7,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_ButtonUp_7x4}; | ||||||
| const Icon I_Warning_30x23 = {.width=30,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Warning_30x23}; | const Icon I_Warning_30x23 = {.width=30,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Warning_30x23}; | ||||||
| const Icon I_DolphinFirstStart2_59x51 = {.width=59,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart2_59x51}; | const Icon I_ButtonLeft_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonLeft_4x7}; | ||||||
| const Icon I_DolphinFirstStart5_54x49 = {.width=54,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart5_54x49}; |  | ||||||
| const Icon I_DolphinFirstStart6_58x54 = {.width=58,.height=54,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart6_58x54}; |  | ||||||
| const Icon I_Flipper_young_80x60 = {.width=80,.height=60,.frame_count=1,.frame_rate=0,.frames=_I_Flipper_young_80x60}; |  | ||||||
| const Icon I_DolphinFirstStart8_56x51 = {.width=56,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart8_56x51}; |  | ||||||
| const Icon I_DolphinFirstStart1_59x53 = {.width=59,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart1_59x53}; |  | ||||||
| const Icon I_DolphinOkay_41x43 = {.width=41,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_DolphinOkay_41x43}; |  | ||||||
| const Icon I_DolphinFirstStart3_57x48 = {.width=57,.height=48,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart3_57x48}; |  | ||||||
| const Icon I_DolphinFirstStart7_61x51 = {.width=61,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart7_61x51}; | const Icon I_DolphinFirstStart7_61x51 = {.width=61,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart7_61x51}; | ||||||
|  | const Icon I_DolphinOkay_41x43 = {.width=41,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_DolphinOkay_41x43}; | ||||||
|  | const Icon I_DolphinFirstStart5_54x49 = {.width=54,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart5_54x49}; | ||||||
|  | const Icon I_Flipper_young_80x60 = {.width=80,.height=60,.frame_count=1,.frame_rate=0,.frames=_I_Flipper_young_80x60}; | ||||||
|  | const Icon I_DolphinFirstStart2_59x51 = {.width=59,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart2_59x51}; | ||||||
|  | const Icon I_DolphinFirstStart8_56x51 = {.width=56,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart8_56x51}; | ||||||
|  | const Icon I_DolphinFirstStart3_57x48 = {.width=57,.height=48,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart3_57x48}; | ||||||
| const Icon I_DolphinFirstStart0_70x53 = {.width=70,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart0_70x53}; | const Icon I_DolphinFirstStart0_70x53 = {.width=70,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart0_70x53}; | ||||||
| const Icon I_DolphinFirstStart4_67x53 = {.width=67,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart4_67x53}; | const Icon I_DolphinFirstStart4_67x53 = {.width=67,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart4_67x53}; | ||||||
| const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17}; | const Icon I_DolphinFirstStart6_58x54 = {.width=58,.height=54,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart6_58x54}; | ||||||
| const Icon I_DoorLeft_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_70x55}; | const Icon I_DolphinFirstStart1_59x53 = {.width=59,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart1_59x53}; | ||||||
| const Icon I_DoorRight_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorRight_70x55}; | const Icon I_ArrowDownFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowDownFilled_14x15}; | ||||||
|  | const Icon I_ArrowUpEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpEmpty_14x15}; | ||||||
|  | const Icon I_ArrowUpFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpFilled_14x15}; | ||||||
|  | const Icon I_ArrowDownEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowDownEmpty_14x15}; | ||||||
| const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56}; | const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56}; | ||||||
|  | const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17}; | ||||||
| const Icon I_PassportLeft_6x47 = {.width=6,.height=47,.frame_count=1,.frame_rate=0,.frames=_I_PassportLeft_6x47}; | const Icon I_PassportLeft_6x47 = {.width=6,.height=47,.frame_count=1,.frame_rate=0,.frames=_I_PassportLeft_6x47}; | ||||||
|  | const Icon I_DoorLeft_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_70x55}; | ||||||
| const Icon I_LockPopup_100x49 = {.width=100,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_LockPopup_100x49}; | const Icon I_LockPopup_100x49 = {.width=100,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_LockPopup_100x49}; | ||||||
| const Icon I_Down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_hvr_25x27}; | const Icon I_DoorRight_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorRight_70x55}; | ||||||
| const Icon I_Vol_down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_hvr_25x27}; |  | ||||||
| const Icon I_Down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_25x27}; |  | ||||||
| const Icon I_Fill_marker_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Fill_marker_7x7}; |  | ||||||
| const Icon I_Vol_down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_25x27}; |  | ||||||
| const Icon I_Vol_up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_25x27}; |  | ||||||
| const Icon I_Up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Up_hvr_25x27}; |  | ||||||
| const Icon I_Vol_up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_hvr_25x27}; |  | ||||||
| const Icon I_IrdaLearnShort_128x31 = {.width=128,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_IrdaLearnShort_128x31}; |  | ||||||
| const Icon I_IrdaSend_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_IrdaSend_128x64}; |  | ||||||
| const Icon I_DolphinReadingSuccess_59x63 = {.width=59,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinReadingSuccess_59x63}; |  | ||||||
| const Icon I_Mute_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_hvr_25x27}; |  | ||||||
| const Icon I_Back_15x10 = {.width=15,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Back_15x10}; |  | ||||||
| const Icon I_Up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Up_25x27}; |  | ||||||
| const Icon I_IrdaArrowUp_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_IrdaArrowUp_4x8}; |  | ||||||
| const Icon I_Mute_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_25x27}; |  | ||||||
| const Icon I_Power_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_25x27}; |  | ||||||
| const Icon I_IrdaSendShort_128x34 = {.width=128,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_IrdaSendShort_128x34}; |  | ||||||
| const Icon I_IrdaArrowDown_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_IrdaArrowDown_4x8}; | const Icon I_IrdaArrowDown_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_IrdaArrowDown_4x8}; | ||||||
|  | const Icon I_Power_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_25x27}; | ||||||
|  | const Icon I_Mute_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_25x27}; | ||||||
|  | const Icon I_Down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_hvr_25x27}; | ||||||
|  | const Icon I_Vol_up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_25x27}; | ||||||
|  | const Icon I_IrdaLearnShort_128x31 = {.width=128,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_IrdaLearnShort_128x31}; | ||||||
|  | const Icon I_Up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Up_25x27}; | ||||||
|  | const Icon I_Vol_down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_hvr_25x27}; | ||||||
|  | const Icon I_Vol_down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_25x27}; | ||||||
|  | const Icon I_Vol_up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_hvr_25x27}; | ||||||
|  | const Icon I_Fill_marker_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Fill_marker_7x7}; | ||||||
|  | const Icon I_Up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Up_hvr_25x27}; | ||||||
|  | const Icon I_IrdaArrowUp_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_IrdaArrowUp_4x8}; | ||||||
|  | const Icon I_Down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_25x27}; | ||||||
|  | const Icon I_DolphinReadingSuccess_59x63 = {.width=59,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinReadingSuccess_59x63}; | ||||||
|  | const Icon I_IrdaSendShort_128x34 = {.width=128,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_IrdaSendShort_128x34}; | ||||||
| const Icon I_IrdaLearn_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_IrdaLearn_128x64}; | const Icon I_IrdaLearn_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_IrdaLearn_128x64}; | ||||||
|  | const Icon I_Mute_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_hvr_25x27}; | ||||||
|  | const Icon I_IrdaSend_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_IrdaSend_128x64}; | ||||||
| const Icon I_Power_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_hvr_25x27}; | const Icon I_Power_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_hvr_25x27}; | ||||||
|  | const Icon I_Back_15x10 = {.width=15,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Back_15x10}; | ||||||
| const Icon I_KeySaveSelected_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySaveSelected_24x11}; | const Icon I_KeySaveSelected_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySaveSelected_24x11}; | ||||||
| const Icon I_KeyBackspace_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspace_16x9}; |  | ||||||
| const Icon I_KeyBackspaceSelected_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspaceSelected_16x9}; |  | ||||||
| const Icon I_KeySave_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySave_24x11}; | const Icon I_KeySave_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySave_24x11}; | ||||||
|  | const Icon I_KeyBackspaceSelected_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspaceSelected_16x9}; | ||||||
|  | const Icon I_KeyBackspace_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspace_16x9}; | ||||||
| const Icon A_125khz_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_125khz_14}; | const Icon A_125khz_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_125khz_14}; | ||||||
| const Icon A_Bluetooth_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Bluetooth_14}; | const Icon A_Bluetooth_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Bluetooth_14}; | ||||||
| const Icon A_Debug_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_Debug_14}; | const Icon A_Debug_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_Debug_14}; | ||||||
| @ -550,47 +566,47 @@ const Icon A_Sub1ghz_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.fr | |||||||
| const Icon A_Tamagotchi_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Tamagotchi_14}; | const Icon A_Tamagotchi_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Tamagotchi_14}; | ||||||
| const Icon A_U2F_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_U2F_14}; | const Icon A_U2F_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_U2F_14}; | ||||||
| const Icon A_iButton_14 = {.width=14,.height=14,.frame_count=7,.frame_rate=3,.frames=_A_iButton_14}; | const Icon A_iButton_14 = {.width=14,.height=14,.frame_count=7,.frame_rate=3,.frames=_A_iButton_14}; | ||||||
| const Icon I_Detailed_chip_17x13 = {.width=17,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_Detailed_chip_17x13}; |  | ||||||
| const Icon I_Medium_chip_22x21 = {.width=22,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_Medium_chip_22x21}; | const Icon I_Medium_chip_22x21 = {.width=22,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_Medium_chip_22x21}; | ||||||
| const Icon I_BatteryBody_52x28 = {.width=52,.height=28,.frame_count=1,.frame_rate=0,.frames=_I_BatteryBody_52x28}; | const Icon I_Detailed_chip_17x13 = {.width=17,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_Detailed_chip_17x13}; | ||||||
| const Icon I_FaceCharging_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceCharging_29x14}; |  | ||||||
| const Icon I_Health_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Health_16x16}; | const Icon I_Health_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Health_16x16}; | ||||||
| const Icon I_Temperature_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Temperature_16x16}; | const Icon I_Voltage_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Voltage_16x16}; | ||||||
|  | const Icon I_BatteryBody_52x28 = {.width=52,.height=28,.frame_count=1,.frame_rate=0,.frames=_I_BatteryBody_52x28}; | ||||||
|  | const Icon I_FaceNormal_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceNormal_29x14}; | ||||||
|  | const Icon I_FaceCharging_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceCharging_29x14}; | ||||||
| const Icon I_Battery_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Battery_16x16}; | const Icon I_Battery_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Battery_16x16}; | ||||||
| const Icon I_FaceConfused_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceConfused_29x14}; | const Icon I_FaceConfused_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceConfused_29x14}; | ||||||
| const Icon I_FaceNormal_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceNormal_29x14}; | const Icon I_Temperature_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Temperature_16x16}; | ||||||
| const Icon I_Voltage_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Voltage_16x16}; |  | ||||||
| const Icon I_FaceNopower_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceNopower_29x14}; | const Icon I_FaceNopower_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceNopower_29x14}; | ||||||
| const Icon I_RFIDDolphinSend_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinSend_97x61}; |  | ||||||
| const Icon I_RFIDDolphinSuccess_108x57 = {.width=108,.height=57,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinSuccess_108x57}; | const Icon I_RFIDDolphinSuccess_108x57 = {.width=108,.height=57,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinSuccess_108x57}; | ||||||
| const Icon I_RFIDDolphinReceive_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinReceive_97x61}; |  | ||||||
| const Icon I_RFIDBigChip_37x36 = {.width=37,.height=36,.frame_count=1,.frame_rate=0,.frames=_I_RFIDBigChip_37x36}; | const Icon I_RFIDBigChip_37x36 = {.width=37,.height=36,.frame_count=1,.frame_rate=0,.frames=_I_RFIDBigChip_37x36}; | ||||||
| const Icon I_SDQuestion_35x43 = {.width=35,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_SDQuestion_35x43}; | const Icon I_RFIDDolphinReceive_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinReceive_97x61}; | ||||||
|  | const Icon I_RFIDDolphinSend_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinSend_97x61}; | ||||||
| const Icon I_SDError_43x35 = {.width=43,.height=35,.frame_count=1,.frame_rate=0,.frames=_I_SDError_43x35}; | const Icon I_SDError_43x35 = {.width=43,.height=35,.frame_count=1,.frame_rate=0,.frames=_I_SDError_43x35}; | ||||||
|  | const Icon I_SDQuestion_35x43 = {.width=35,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_SDQuestion_35x43}; | ||||||
| const Icon I_Cry_dolph_55x52 = {.width=55,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_Cry_dolph_55x52}; | const Icon I_Cry_dolph_55x52 = {.width=55,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_Cry_dolph_55x52}; | ||||||
| const Icon I_Background_128x11 = {.width=128,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_Background_128x11}; |  | ||||||
| const Icon I_Lock_8x8 = {.width=8,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Lock_8x8}; |  | ||||||
| const Icon I_Battery_26x8 = {.width=26,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Battery_26x8}; |  | ||||||
| const Icon I_Battery_19x8 = {.width=19,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Battery_19x8}; | const Icon I_Battery_19x8 = {.width=19,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Battery_19x8}; | ||||||
| const Icon I_USBConnected_15x8 = {.width=15,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_USBConnected_15x8}; |  | ||||||
| const Icon I_Background_128x8 = {.width=128,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Background_128x8}; |  | ||||||
| const Icon I_BadUsb_9x8 = {.width=9,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_BadUsb_9x8}; |  | ||||||
| const Icon I_BT_Pair_9x8 = {.width=9,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_BT_Pair_9x8}; |  | ||||||
| const Icon I_PlaceholderL_11x13 = {.width=11,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderL_11x13}; |  | ||||||
| const Icon I_SDcardFail_11x8 = {.width=11,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_SDcardFail_11x8}; | const Icon I_SDcardFail_11x8 = {.width=11,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_SDcardFail_11x8}; | ||||||
| const Icon I_Bluetooth_5x8 = {.width=5,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Bluetooth_5x8}; | const Icon I_Bluetooth_5x8 = {.width=5,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Bluetooth_5x8}; | ||||||
| const Icon I_PlaceholderR_30x13 = {.width=30,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderR_30x13}; | const Icon I_PlaceholderR_30x13 = {.width=30,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderR_30x13}; | ||||||
|  | const Icon I_Battery_26x8 = {.width=26,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Battery_26x8}; | ||||||
|  | const Icon I_Lock_8x8 = {.width=8,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Lock_8x8}; | ||||||
| const Icon I_SDcardMounted_11x8 = {.width=11,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_SDcardMounted_11x8}; | const Icon I_SDcardMounted_11x8 = {.width=11,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_SDcardMounted_11x8}; | ||||||
|  | const Icon I_BadUsb_9x8 = {.width=9,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_BadUsb_9x8}; | ||||||
|  | const Icon I_BT_Pair_9x8 = {.width=9,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_BT_Pair_9x8}; | ||||||
|  | const Icon I_PlaceholderL_11x13 = {.width=11,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderL_11x13}; | ||||||
|  | const Icon I_Background_128x11 = {.width=128,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_Background_128x11}; | ||||||
|  | const Icon I_Background_128x8 = {.width=128,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Background_128x8}; | ||||||
|  | const Icon I_USBConnected_15x8 = {.width=15,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_USBConnected_15x8}; | ||||||
| const Icon I_Quest_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Quest_7x8}; | const Icon I_Quest_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Quest_7x8}; | ||||||
| const Icon I_Lock_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Lock_7x8}; |  | ||||||
| const Icon I_Scanning_123x52 = {.width=123,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_Scanning_123x52}; |  | ||||||
| const Icon I_MHz_25x11 = {.width=25,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_MHz_25x11}; | const Icon I_MHz_25x11 = {.width=25,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_MHz_25x11}; | ||||||
|  | const Icon I_Scanning_123x52 = {.width=123,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_Scanning_123x52}; | ||||||
| const Icon I_Unlock_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Unlock_7x8}; | const Icon I_Unlock_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Unlock_7x8}; | ||||||
| const Icon I_iButtonKey_49x44 = {.width=49,.height=44,.frame_count=1,.frame_rate=0,.frames=_I_iButtonKey_49x44}; | const Icon I_Lock_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Lock_7x8}; | ||||||
| const Icon I_DolphinExcited_64x63 = {.width=64,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinExcited_64x63}; |  | ||||||
| const Icon I_DolphinWait_61x59 = {.width=61,.height=59,.frame_count=1,.frame_rate=0,.frames=_I_DolphinWait_61x59}; |  | ||||||
| const Icon I_iButtonDolphinVerySuccess_108x52 = {.width=108,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_iButtonDolphinVerySuccess_108x52}; |  | ||||||
| const Icon I_DolphinMafia_115x62 = {.width=115,.height=62,.frame_count=1,.frame_rate=0,.frames=_I_DolphinMafia_115x62}; |  | ||||||
| const Icon I_DolphinNice_96x59 = {.width=96,.height=59,.frame_count=1,.frame_rate=0,.frames=_I_DolphinNice_96x59}; | const Icon I_DolphinNice_96x59 = {.width=96,.height=59,.frame_count=1,.frame_rate=0,.frames=_I_DolphinNice_96x59}; | ||||||
| const Icon I_iButtonDolphinSuccess_109x60 = {.width=109,.height=60,.frame_count=1,.frame_rate=0,.frames=_I_iButtonDolphinSuccess_109x60}; | const Icon I_iButtonDolphinSuccess_109x60 = {.width=109,.height=60,.frame_count=1,.frame_rate=0,.frames=_I_iButtonDolphinSuccess_109x60}; | ||||||
|  | const Icon I_DolphinExcited_64x63 = {.width=64,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinExcited_64x63}; | ||||||
|  | const Icon I_iButtonKey_49x44 = {.width=49,.height=44,.frame_count=1,.frame_rate=0,.frames=_I_iButtonKey_49x44}; | ||||||
|  | const Icon I_iButtonDolphinVerySuccess_108x52 = {.width=108,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_iButtonDolphinVerySuccess_108x52}; | ||||||
|  | const Icon I_DolphinWait_61x59 = {.width=61,.height=59,.frame_count=1,.frame_rate=0,.frames=_I_DolphinWait_61x59}; | ||||||
|  | const Icon I_DolphinMafia_115x62 = {.width=115,.height=62,.frame_count=1,.frame_rate=0,.frames=_I_DolphinMafia_115x62}; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,66 +5,70 @@ extern const Icon I_Certification2_119x30; | |||||||
| extern const Icon I_Certification1_103x23; | extern const Icon I_Certification1_103x23; | ||||||
| extern const Icon A_WatchingTV_128x64; | extern const Icon A_WatchingTV_128x64; | ||||||
| extern const Icon A_Wink_128x64; | extern const Icon A_Wink_128x64; | ||||||
| extern const Icon I_sub1_10px; |  | ||||||
| extern const Icon I_ir_10px; |  | ||||||
| extern const Icon I_unknown_10px; |  | ||||||
| extern const Icon I_ibutt_10px; |  | ||||||
| extern const Icon I_Nfc_10px; |  | ||||||
| extern const Icon I_ble_10px; | extern const Icon I_ble_10px; | ||||||
|  | extern const Icon I_ibutt_10px; | ||||||
| extern const Icon I_125_10px; | extern const Icon I_125_10px; | ||||||
|  | extern const Icon I_sub1_10px; | ||||||
| extern const Icon I_dir_10px; | extern const Icon I_dir_10px; | ||||||
|  | extern const Icon I_ir_10px; | ||||||
|  | extern const Icon I_Nfc_10px; | ||||||
|  | extern const Icon I_unknown_10px; | ||||||
| extern const Icon I_BLE_Pairing_128x64; | extern const Icon I_BLE_Pairing_128x64; | ||||||
| extern const Icon I_ButtonDown_7x4; |  | ||||||
| extern const Icon I_ButtonCenter_7x7; |  | ||||||
| extern const Icon I_ButtonLeft_4x7; |  | ||||||
| extern const Icon I_ButtonUp_7x4; |  | ||||||
| extern const Icon I_DFU_128x50; |  | ||||||
| extern const Icon I_ButtonLeftSmall_3x5; |  | ||||||
| extern const Icon I_ButtonRightSmall_3x5; | extern const Icon I_ButtonRightSmall_3x5; | ||||||
|  | extern const Icon I_ButtonLeftSmall_3x5; | ||||||
|  | extern const Icon I_ButtonCenter_7x7; | ||||||
|  | extern const Icon I_ButtonDown_7x4; | ||||||
| extern const Icon I_ButtonRight_4x7; | extern const Icon I_ButtonRight_4x7; | ||||||
|  | extern const Icon I_DFU_128x50; | ||||||
|  | extern const Icon I_ButtonUp_7x4; | ||||||
| extern const Icon I_Warning_30x23; | extern const Icon I_Warning_30x23; | ||||||
| extern const Icon I_DolphinFirstStart2_59x51; | extern const Icon I_ButtonLeft_4x7; | ||||||
| extern const Icon I_DolphinFirstStart5_54x49; |  | ||||||
| extern const Icon I_DolphinFirstStart6_58x54; |  | ||||||
| extern const Icon I_Flipper_young_80x60; |  | ||||||
| extern const Icon I_DolphinFirstStart8_56x51; |  | ||||||
| extern const Icon I_DolphinFirstStart1_59x53; |  | ||||||
| extern const Icon I_DolphinOkay_41x43; |  | ||||||
| extern const Icon I_DolphinFirstStart3_57x48; |  | ||||||
| extern const Icon I_DolphinFirstStart7_61x51; | extern const Icon I_DolphinFirstStart7_61x51; | ||||||
|  | extern const Icon I_DolphinOkay_41x43; | ||||||
|  | extern const Icon I_DolphinFirstStart5_54x49; | ||||||
|  | extern const Icon I_Flipper_young_80x60; | ||||||
|  | extern const Icon I_DolphinFirstStart2_59x51; | ||||||
|  | extern const Icon I_DolphinFirstStart8_56x51; | ||||||
|  | extern const Icon I_DolphinFirstStart3_57x48; | ||||||
| extern const Icon I_DolphinFirstStart0_70x53; | extern const Icon I_DolphinFirstStart0_70x53; | ||||||
| extern const Icon I_DolphinFirstStart4_67x53; | extern const Icon I_DolphinFirstStart4_67x53; | ||||||
| extern const Icon I_PassportBottom_128x17; | extern const Icon I_DolphinFirstStart6_58x54; | ||||||
| extern const Icon I_DoorLeft_70x55; | extern const Icon I_DolphinFirstStart1_59x53; | ||||||
| extern const Icon I_DoorRight_70x55; | extern const Icon I_ArrowDownFilled_14x15; | ||||||
|  | extern const Icon I_ArrowUpEmpty_14x15; | ||||||
|  | extern const Icon I_ArrowUpFilled_14x15; | ||||||
|  | extern const Icon I_ArrowDownEmpty_14x15; | ||||||
| extern const Icon I_DoorLocked_10x56; | extern const Icon I_DoorLocked_10x56; | ||||||
|  | extern const Icon I_PassportBottom_128x17; | ||||||
| extern const Icon I_PassportLeft_6x47; | extern const Icon I_PassportLeft_6x47; | ||||||
|  | extern const Icon I_DoorLeft_70x55; | ||||||
| extern const Icon I_LockPopup_100x49; | extern const Icon I_LockPopup_100x49; | ||||||
| extern const Icon I_Down_hvr_25x27; | extern const Icon I_DoorRight_70x55; | ||||||
| extern const Icon I_Vol_down_hvr_25x27; |  | ||||||
| extern const Icon I_Down_25x27; |  | ||||||
| extern const Icon I_Fill_marker_7x7; |  | ||||||
| extern const Icon I_Vol_down_25x27; |  | ||||||
| extern const Icon I_Vol_up_25x27; |  | ||||||
| extern const Icon I_Up_hvr_25x27; |  | ||||||
| extern const Icon I_Vol_up_hvr_25x27; |  | ||||||
| extern const Icon I_IrdaLearnShort_128x31; |  | ||||||
| extern const Icon I_IrdaSend_128x64; |  | ||||||
| extern const Icon I_DolphinReadingSuccess_59x63; |  | ||||||
| extern const Icon I_Mute_hvr_25x27; |  | ||||||
| extern const Icon I_Back_15x10; |  | ||||||
| extern const Icon I_Up_25x27; |  | ||||||
| extern const Icon I_IrdaArrowUp_4x8; |  | ||||||
| extern const Icon I_Mute_25x27; |  | ||||||
| extern const Icon I_Power_25x27; |  | ||||||
| extern const Icon I_IrdaSendShort_128x34; |  | ||||||
| extern const Icon I_IrdaArrowDown_4x8; | extern const Icon I_IrdaArrowDown_4x8; | ||||||
|  | extern const Icon I_Power_25x27; | ||||||
|  | extern const Icon I_Mute_25x27; | ||||||
|  | extern const Icon I_Down_hvr_25x27; | ||||||
|  | extern const Icon I_Vol_up_25x27; | ||||||
|  | extern const Icon I_IrdaLearnShort_128x31; | ||||||
|  | extern const Icon I_Up_25x27; | ||||||
|  | extern const Icon I_Vol_down_hvr_25x27; | ||||||
|  | extern const Icon I_Vol_down_25x27; | ||||||
|  | extern const Icon I_Vol_up_hvr_25x27; | ||||||
|  | extern const Icon I_Fill_marker_7x7; | ||||||
|  | extern const Icon I_Up_hvr_25x27; | ||||||
|  | extern const Icon I_IrdaArrowUp_4x8; | ||||||
|  | extern const Icon I_Down_25x27; | ||||||
|  | extern const Icon I_DolphinReadingSuccess_59x63; | ||||||
|  | extern const Icon I_IrdaSendShort_128x34; | ||||||
| extern const Icon I_IrdaLearn_128x64; | extern const Icon I_IrdaLearn_128x64; | ||||||
|  | extern const Icon I_Mute_hvr_25x27; | ||||||
|  | extern const Icon I_IrdaSend_128x64; | ||||||
| extern const Icon I_Power_hvr_25x27; | extern const Icon I_Power_hvr_25x27; | ||||||
|  | extern const Icon I_Back_15x10; | ||||||
| extern const Icon I_KeySaveSelected_24x11; | extern const Icon I_KeySaveSelected_24x11; | ||||||
| extern const Icon I_KeyBackspace_16x9; |  | ||||||
| extern const Icon I_KeyBackspaceSelected_16x9; |  | ||||||
| extern const Icon I_KeySave_24x11; | extern const Icon I_KeySave_24x11; | ||||||
|  | extern const Icon I_KeyBackspaceSelected_16x9; | ||||||
|  | extern const Icon I_KeyBackspace_16x9; | ||||||
| extern const Icon A_125khz_14; | extern const Icon A_125khz_14; | ||||||
| extern const Icon A_Bluetooth_14; | extern const Icon A_Bluetooth_14; | ||||||
| extern const Icon A_Debug_14; | extern const Icon A_Debug_14; | ||||||
| @ -81,46 +85,46 @@ extern const Icon A_Sub1ghz_14; | |||||||
| extern const Icon A_Tamagotchi_14; | extern const Icon A_Tamagotchi_14; | ||||||
| extern const Icon A_U2F_14; | extern const Icon A_U2F_14; | ||||||
| extern const Icon A_iButton_14; | extern const Icon A_iButton_14; | ||||||
| extern const Icon I_Detailed_chip_17x13; |  | ||||||
| extern const Icon I_Medium_chip_22x21; | extern const Icon I_Medium_chip_22x21; | ||||||
| extern const Icon I_BatteryBody_52x28; | extern const Icon I_Detailed_chip_17x13; | ||||||
| extern const Icon I_FaceCharging_29x14; |  | ||||||
| extern const Icon I_Health_16x16; | extern const Icon I_Health_16x16; | ||||||
| extern const Icon I_Temperature_16x16; | extern const Icon I_Voltage_16x16; | ||||||
|  | extern const Icon I_BatteryBody_52x28; | ||||||
|  | extern const Icon I_FaceNormal_29x14; | ||||||
|  | extern const Icon I_FaceCharging_29x14; | ||||||
| extern const Icon I_Battery_16x16; | extern const Icon I_Battery_16x16; | ||||||
| extern const Icon I_FaceConfused_29x14; | extern const Icon I_FaceConfused_29x14; | ||||||
| extern const Icon I_FaceNormal_29x14; | extern const Icon I_Temperature_16x16; | ||||||
| extern const Icon I_Voltage_16x16; |  | ||||||
| extern const Icon I_FaceNopower_29x14; | extern const Icon I_FaceNopower_29x14; | ||||||
| extern const Icon I_RFIDDolphinSend_97x61; |  | ||||||
| extern const Icon I_RFIDDolphinSuccess_108x57; | extern const Icon I_RFIDDolphinSuccess_108x57; | ||||||
| extern const Icon I_RFIDDolphinReceive_97x61; |  | ||||||
| extern const Icon I_RFIDBigChip_37x36; | extern const Icon I_RFIDBigChip_37x36; | ||||||
| extern const Icon I_SDQuestion_35x43; | extern const Icon I_RFIDDolphinReceive_97x61; | ||||||
|  | extern const Icon I_RFIDDolphinSend_97x61; | ||||||
| extern const Icon I_SDError_43x35; | extern const Icon I_SDError_43x35; | ||||||
|  | extern const Icon I_SDQuestion_35x43; | ||||||
| extern const Icon I_Cry_dolph_55x52; | extern const Icon I_Cry_dolph_55x52; | ||||||
| extern const Icon I_Background_128x11; |  | ||||||
| extern const Icon I_Lock_8x8; |  | ||||||
| extern const Icon I_Battery_26x8; |  | ||||||
| extern const Icon I_Battery_19x8; | extern const Icon I_Battery_19x8; | ||||||
| extern const Icon I_USBConnected_15x8; |  | ||||||
| extern const Icon I_Background_128x8; |  | ||||||
| extern const Icon I_BadUsb_9x8; |  | ||||||
| extern const Icon I_BT_Pair_9x8; |  | ||||||
| extern const Icon I_PlaceholderL_11x13; |  | ||||||
| extern const Icon I_SDcardFail_11x8; | extern const Icon I_SDcardFail_11x8; | ||||||
| extern const Icon I_Bluetooth_5x8; | extern const Icon I_Bluetooth_5x8; | ||||||
| extern const Icon I_PlaceholderR_30x13; | extern const Icon I_PlaceholderR_30x13; | ||||||
|  | extern const Icon I_Battery_26x8; | ||||||
|  | extern const Icon I_Lock_8x8; | ||||||
| extern const Icon I_SDcardMounted_11x8; | extern const Icon I_SDcardMounted_11x8; | ||||||
|  | extern const Icon I_BadUsb_9x8; | ||||||
|  | extern const Icon I_BT_Pair_9x8; | ||||||
|  | extern const Icon I_PlaceholderL_11x13; | ||||||
|  | extern const Icon I_Background_128x11; | ||||||
|  | extern const Icon I_Background_128x8; | ||||||
|  | extern const Icon I_USBConnected_15x8; | ||||||
| extern const Icon I_Quest_7x8; | extern const Icon I_Quest_7x8; | ||||||
| extern const Icon I_Lock_7x8; |  | ||||||
| extern const Icon I_Scanning_123x52; |  | ||||||
| extern const Icon I_MHz_25x11; | extern const Icon I_MHz_25x11; | ||||||
|  | extern const Icon I_Scanning_123x52; | ||||||
| extern const Icon I_Unlock_7x8; | extern const Icon I_Unlock_7x8; | ||||||
| extern const Icon I_iButtonKey_49x44; | extern const Icon I_Lock_7x8; | ||||||
| extern const Icon I_DolphinExcited_64x63; |  | ||||||
| extern const Icon I_DolphinWait_61x59; |  | ||||||
| extern const Icon I_iButtonDolphinVerySuccess_108x52; |  | ||||||
| extern const Icon I_DolphinMafia_115x62; |  | ||||||
| extern const Icon I_DolphinNice_96x59; | extern const Icon I_DolphinNice_96x59; | ||||||
| extern const Icon I_iButtonDolphinSuccess_109x60; | extern const Icon I_iButtonDolphinSuccess_109x60; | ||||||
|  | extern const Icon I_DolphinExcited_64x63; | ||||||
|  | extern const Icon I_iButtonKey_49x44; | ||||||
|  | extern const Icon I_iButtonDolphinVerySuccess_108x52; | ||||||
|  | extern const Icon I_DolphinWait_61x59; | ||||||
|  | extern const Icon I_DolphinMafia_115x62; | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowDownEmpty_14x15.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowDownEmpty_14x15.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 654 B | 
							
								
								
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowDownFilled_14x15.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowDownFilled_14x15.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 669 B | 
							
								
								
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowUpEmpty_14x15.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowUpEmpty_14x15.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowUpFilled_14x15.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/icons/GPIO/ArrowUpFilled_14x15.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.5 KiB | 
| @ -1,12 +1,11 @@ | |||||||
| #include "log.h" | #include "log.h" | ||||||
| #include <stm32wbxx_hal.h> |  | ||||||
| #include "check.h" | #include "check.h" | ||||||
| #include <cmsis_os2.h> | #include <cmsis_os2.h> | ||||||
|  | #include <furi-hal.h> | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     FuriLogLevel log_level; |     FuriLogLevel log_level; | ||||||
|     FuriLogPrint print; |     FuriLogPuts puts; | ||||||
|     FuriLogVPrint vprint; |  | ||||||
|     FuriLogTimestamp timetamp; |     FuriLogTimestamp timetamp; | ||||||
|     osMutexId_t mutex; |     osMutexId_t mutex; | ||||||
| } FuriLogParams; | } FuriLogParams; | ||||||
| @ -16,8 +15,7 @@ static FuriLogParams furi_log; | |||||||
| void furi_log_init() { | void furi_log_init() { | ||||||
|     // Set default logging parameters
 |     // Set default logging parameters
 | ||||||
|     furi_log.log_level = FURI_LOG_LEVEL; |     furi_log.log_level = FURI_LOG_LEVEL; | ||||||
|     furi_log.print = printf; |     furi_log.puts = furi_hal_console_puts; | ||||||
|     furi_log.vprint = vprintf; |  | ||||||
|     furi_log.timetamp = HAL_GetTick; |     furi_log.timetamp = HAL_GetTick; | ||||||
|     furi_log.mutex = osMutexNew(NULL); |     furi_log.mutex = osMutexNew(NULL); | ||||||
| } | } | ||||||
| @ -25,10 +23,22 @@ void furi_log_init() { | |||||||
| void furi_log_print(FuriLogLevel level, const char* format, ...) { | void furi_log_print(FuriLogLevel level, const char* format, ...) { | ||||||
|     va_list args; |     va_list args; | ||||||
|     va_start(args, format); |     va_start(args, format); | ||||||
|     if(level <= furi_log.log_level) { |     if(level <= furi_log.log_level && osMutexAcquire(furi_log.mutex, osWaitForever) == osOK) { | ||||||
|         osMutexAcquire(furi_log.mutex, osWaitForever); |         string_t string; | ||||||
|         furi_log.print("%lu ", furi_log.timetamp()); | 
 | ||||||
|         furi_log.vprint(format, args); |         // Timestamp
 | ||||||
|  |         string_init_printf(string, "%lu ", furi_log.timetamp()); | ||||||
|  |         furi_log.puts(string_get_cstr(string)); | ||||||
|  |         string_clear(string); | ||||||
|  | 
 | ||||||
|  |         va_list args; | ||||||
|  |         va_start(args, format); | ||||||
|  |         string_init_vprintf(string, format, args); | ||||||
|  |         va_end(args); | ||||||
|  | 
 | ||||||
|  |         furi_log.puts(string_get_cstr(string)); | ||||||
|  |         string_clear(string); | ||||||
|  | 
 | ||||||
|         osMutexRelease(furi_log.mutex); |         osMutexRelease(furi_log.mutex); | ||||||
|     } |     } | ||||||
|     va_end(args); |     va_end(args); | ||||||
| @ -42,16 +52,12 @@ FuriLogLevel furi_log_get_level(void) { | |||||||
|     return furi_log.log_level; |     return furi_log.log_level; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_log_set_print(FuriLogPrint print, FuriLogVPrint vprint) { | void furi_log_set_puts(FuriLogPuts puts) { | ||||||
|     furi_assert(print); |     furi_assert(puts); | ||||||
|     furi_assert(vprint); |     furi_log.puts = puts; | ||||||
| 
 |  | ||||||
|     furi_log.print = print; |  | ||||||
|     furi_log.vprint = vprint; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_log_set_timestamp(FuriLogTimestamp timestamp) { | void furi_log_set_timestamp(FuriLogTimestamp timestamp) { | ||||||
|     furi_assert(timestamp); |     furi_assert(timestamp); | ||||||
| 
 |  | ||||||
|     furi_log.timetamp = timestamp; |     furi_log.timetamp = timestamp; | ||||||
| } | } | ||||||
|  | |||||||
| @ -30,8 +30,7 @@ extern "C" { | |||||||
| #define FURI_LOG_CLR_D FURI_LOG_CLR(FURI_LOG_CLR_BLUE) | #define FURI_LOG_CLR_D FURI_LOG_CLR(FURI_LOG_CLR_BLUE) | ||||||
| #define FURI_LOG_CLR_V | #define FURI_LOG_CLR_V | ||||||
| 
 | 
 | ||||||
| typedef int (*FuriLogPrint)(const char*, ...); | typedef void (*FuriLogPuts)(const char* data); | ||||||
| typedef int (*FuriLogVPrint)(const char*, va_list); |  | ||||||
| typedef uint32_t (*FuriLogTimestamp)(void); | typedef uint32_t (*FuriLogTimestamp)(void); | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
| @ -47,7 +46,7 @@ void furi_log_init(); | |||||||
| void furi_log_print(FuriLogLevel level, const char* format, ...); | void furi_log_print(FuriLogLevel level, const char* format, ...); | ||||||
| void furi_log_set_level(FuriLogLevel level); | void furi_log_set_level(FuriLogLevel level); | ||||||
| FuriLogLevel furi_log_get_level(); | FuriLogLevel furi_log_get_level(); | ||||||
| void furi_log_set_print(FuriLogPrint print, FuriLogVPrint vprint); | void furi_log_set_puts(FuriLogPuts puts); | ||||||
| void furi_log_set_timestamp(FuriLogTimestamp timestamp); | void furi_log_set_timestamp(FuriLogTimestamp timestamp); | ||||||
| 
 | 
 | ||||||
| #define FURI_LOG_FORMAT(log_letter, tag, format) \ | #define FURI_LOG_FORMAT(log_letter, tag, format) \ | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #include "furi-hal-version.h" | #include "furi-hal-version.h" | ||||||
| #include "furi-hal-usb_i.h" | #include "furi-hal-usb_i.h" | ||||||
|  | #include "furi-hal-usb.h" | ||||||
| #include "furi-hal-usb-cdc_i.h" | #include "furi-hal-usb-cdc_i.h" | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| 
 | 
 | ||||||
| @ -347,7 +348,7 @@ static const struct CdcConfigDescriptorDual cdc_cfg_desc_dual = { | |||||||
| static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {}; | static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {}; | ||||||
| static uint8_t cdc_ctrl_line_state[IF_NUM_MAX]; | static uint8_t cdc_ctrl_line_state[IF_NUM_MAX]; | ||||||
| 
 | 
 | ||||||
| static void cdc_init(usbd_device* dev, struct UsbInterface* intf); | static void cdc_init(usbd_device* dev, UsbInterface* intf); | ||||||
| static void cdc_deinit(usbd_device *dev); | static void cdc_deinit(usbd_device *dev); | ||||||
| static void cdc_on_wakeup(usbd_device *dev); | static void cdc_on_wakeup(usbd_device *dev); | ||||||
| static void cdc_on_suspend(usbd_device *dev); | static void cdc_on_suspend(usbd_device *dev); | ||||||
| @ -355,10 +356,12 @@ static void cdc_on_suspend(usbd_device *dev); | |||||||
| static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg); | static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg); | ||||||
| static usbd_respond cdc_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback); | static usbd_respond cdc_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback); | ||||||
| static usbd_device* usb_dev; | static usbd_device* usb_dev; | ||||||
| static struct UsbInterface* cdc_if_cur = NULL; | static UsbInterface* cdc_if_cur = NULL; | ||||||
|  | static bool connected = false; | ||||||
| static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL}; | static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL}; | ||||||
|  | static void* cb_ctx[IF_NUM_MAX]; | ||||||
| 
 | 
 | ||||||
| struct UsbInterface usb_cdc_single = { | UsbInterface usb_cdc_single = { | ||||||
|     .init = cdc_init, |     .init = cdc_init, | ||||||
|     .deinit = cdc_deinit, |     .deinit = cdc_deinit, | ||||||
|     .wakeup = cdc_on_wakeup, |     .wakeup = cdc_on_wakeup, | ||||||
| @ -373,7 +376,7 @@ struct UsbInterface usb_cdc_single = { | |||||||
|     .cfg_descr = (void*)&cdc_cfg_desc_single, |     .cfg_descr = (void*)&cdc_cfg_desc_single, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct UsbInterface usb_cdc_dual = { | UsbInterface usb_cdc_dual = { | ||||||
|     .init = cdc_init, |     .init = cdc_init, | ||||||
|     .deinit = cdc_deinit, |     .deinit = cdc_deinit, | ||||||
|     .wakeup = cdc_on_wakeup, |     .wakeup = cdc_on_wakeup, | ||||||
| @ -388,7 +391,7 @@ struct UsbInterface usb_cdc_dual = { | |||||||
|     .cfg_descr = (void*)&cdc_cfg_desc_dual, |     .cfg_descr = (void*)&cdc_cfg_desc_dual, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void cdc_init(usbd_device* dev, struct UsbInterface* intf) { | static void cdc_init(usbd_device* dev, UsbInterface* intf) { | ||||||
|     usb_dev = dev; |     usb_dev = dev; | ||||||
|     cdc_if_cur = intf; |     cdc_if_cur = intf; | ||||||
|      |      | ||||||
| @ -428,21 +431,35 @@ static void cdc_deinit(usbd_device *dev) { | |||||||
|     cdc_if_cur = NULL; |     cdc_if_cur = NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb) { | void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context) { | ||||||
|     if (if_num < 2) |     furi_assert(if_num < IF_NUM_MAX); | ||||||
|  | 
 | ||||||
|  |     if (callbacks[if_num] != NULL) { | ||||||
|  |         if (callbacks[if_num]->state_callback != NULL) { | ||||||
|  |             if (connected == true) | ||||||
|  |                 callbacks[if_num]->state_callback(cb_ctx[if_num], 0); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     callbacks[if_num] = cb; |     callbacks[if_num] = cb; | ||||||
|  |     cb_ctx[if_num] = context; | ||||||
|  | 
 | ||||||
|  |     if (callbacks[if_num] != NULL) { | ||||||
|  |         if (callbacks[if_num]->state_callback != NULL) { | ||||||
|  |             if (connected == true) | ||||||
|  |                 callbacks[if_num]->state_callback(cb_ctx[if_num], 1); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) { | struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) { | ||||||
|     if (if_num < 2) |     furi_assert(if_num < IF_NUM_MAX); | ||||||
|     return &cdc_config[if_num]; |     return &cdc_config[if_num]; | ||||||
|     return NULL; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) { | uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) { | ||||||
|     if (if_num < 2) |     furi_assert(if_num < IF_NUM_MAX); | ||||||
|     return cdc_ctrl_line_state[if_num]; |     return cdc_ctrl_line_state[if_num]; | ||||||
|     return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) { | void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) { | ||||||
| @ -462,20 +479,22 @@ int32_t furi_hal_cdc_receive(uint8_t if_num, uint8_t* buf, uint16_t max_len) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void cdc_on_wakeup(usbd_device *dev) { | static void cdc_on_wakeup(usbd_device *dev) { | ||||||
|  |     connected = true; | ||||||
|     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { |     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { | ||||||
|         if (callbacks[i] != NULL) { |         if (callbacks[i] != NULL) { | ||||||
|             if (callbacks[i]->state_callback != NULL) |             if (callbacks[i]->state_callback != NULL) | ||||||
|                 callbacks[i]->state_callback(1); |                 callbacks[i]->state_callback(cb_ctx[i], 1); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void cdc_on_suspend(usbd_device *dev) { | static void cdc_on_suspend(usbd_device *dev) { | ||||||
|  |     connected = false; | ||||||
|     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { |     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { | ||||||
|         cdc_ctrl_line_state[i] = 0; |         cdc_ctrl_line_state[i] = 0; | ||||||
|         if (callbacks[i] != NULL) { |         if (callbacks[i] != NULL) { | ||||||
|             if (callbacks[i]->state_callback != NULL) |             if (callbacks[i]->state_callback != NULL) | ||||||
|                 callbacks[i]->state_callback(0); |                 callbacks[i]->state_callback(cb_ctx[i], 0); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -489,7 +508,7 @@ static void cdc_rx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) { | |||||||
|      |      | ||||||
|     if (callbacks[if_num] != NULL) { |     if (callbacks[if_num] != NULL) { | ||||||
|         if (callbacks[if_num]->rx_ep_callback != NULL) |         if (callbacks[if_num]->rx_ep_callback != NULL) | ||||||
|             callbacks[if_num]->rx_ep_callback(); |             callbacks[if_num]->rx_ep_callback(cb_ctx[if_num]); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -502,7 +521,7 @@ static void cdc_tx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) { | |||||||
|      |      | ||||||
|     if (callbacks[if_num] != NULL) { |     if (callbacks[if_num] != NULL) { | ||||||
|         if (callbacks[if_num]->tx_ep_callback != NULL) |         if (callbacks[if_num]->tx_ep_callback != NULL) | ||||||
|             callbacks[if_num]->tx_ep_callback(); |             callbacks[if_num]->tx_ep_callback(cb_ctx[if_num]); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -590,14 +609,14 @@ static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_cal | |||||||
|             if (callbacks[if_num] != NULL) { |             if (callbacks[if_num] != NULL) { | ||||||
|                 cdc_ctrl_line_state[if_num] = req->wValue; |                 cdc_ctrl_line_state[if_num] = req->wValue; | ||||||
|                 if (callbacks[if_num]->ctrl_line_callback != NULL) |                 if (callbacks[if_num]->ctrl_line_callback != NULL) | ||||||
|                     callbacks[if_num]->ctrl_line_callback(cdc_ctrl_line_state[if_num]); |                     callbacks[if_num]->ctrl_line_callback(cb_ctx[if_num], cdc_ctrl_line_state[if_num]); | ||||||
|             } |             } | ||||||
|             return usbd_ack; |             return usbd_ack; | ||||||
|         case USB_CDC_SET_LINE_CODING: |         case USB_CDC_SET_LINE_CODING: | ||||||
|             memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0])); |             memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0])); | ||||||
|             if (callbacks[if_num] != NULL) { |             if (callbacks[if_num] != NULL) { | ||||||
|                 if (callbacks[if_num]->config_callback != NULL) |                 if (callbacks[if_num]->config_callback != NULL) | ||||||
|                     callbacks[if_num]->config_callback(&cdc_config[if_num]); |                     callbacks[if_num]->config_callback(cb_ctx[if_num], &cdc_config[if_num]); | ||||||
|             } |             } | ||||||
|             return usbd_ack; |             return usbd_ack; | ||||||
|         case USB_CDC_GET_LINE_CODING: |         case USB_CDC_GET_LINE_CODING: | ||||||
|  | |||||||
| @ -6,14 +6,14 @@ | |||||||
| #define CDC_DATA_SZ 64 | #define CDC_DATA_SZ 64 | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     void (*tx_ep_callback)(void); |     void (*tx_ep_callback)(void* context); | ||||||
|     void (*rx_ep_callback)(void); |     void (*rx_ep_callback)(void* context); | ||||||
|     void (*state_callback)(uint8_t state); |     void (*state_callback)(void* context, uint8_t state); | ||||||
|     void (*ctrl_line_callback)(uint8_t state); |     void (*ctrl_line_callback)(void* context, uint8_t state); | ||||||
|     void (*config_callback)(struct usb_cdc_line_coding* config); |     void (*config_callback)(void* context, struct usb_cdc_line_coding* config); | ||||||
| } CdcCallbacks; | } CdcCallbacks; | ||||||
| 
 | 
 | ||||||
| void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb); | void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context); | ||||||
| 
 | 
 | ||||||
| struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num); | struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #include "furi-hal-version.h" | #include "furi-hal-version.h" | ||||||
| #include "furi-hal-usb_i.h" | #include "furi-hal-usb_i.h" | ||||||
|  | #include "furi-hal-usb.h" | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| 
 | 
 | ||||||
| #include "usb.h" | #include "usb.h" | ||||||
| @ -182,7 +183,7 @@ static struct HidReport { | |||||||
|     struct HidReportMouse mouse; |     struct HidReportMouse mouse; | ||||||
| } __attribute__((packed)) hid_report; | } __attribute__((packed)) hid_report; | ||||||
| 
 | 
 | ||||||
| static void hid_init(usbd_device* dev, struct UsbInterface* intf); | static void hid_init(usbd_device* dev, UsbInterface* intf); | ||||||
| static void hid_deinit(usbd_device *dev); | static void hid_deinit(usbd_device *dev); | ||||||
| static void hid_on_wakeup(usbd_device *dev); | static void hid_on_wakeup(usbd_device *dev); | ||||||
| static void hid_on_suspend(usbd_device *dev); | static void hid_on_suspend(usbd_device *dev); | ||||||
| @ -254,7 +255,7 @@ bool furi_hal_hid_mouse_scroll(int8_t delta) { | |||||||
|     return state; |     return state; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct UsbInterface usb_hid = { | UsbInterface usb_hid = { | ||||||
|     .init = hid_init, |     .init = hid_init, | ||||||
|     .deinit = hid_deinit, |     .deinit = hid_deinit, | ||||||
|     .wakeup = hid_on_wakeup, |     .wakeup = hid_on_wakeup, | ||||||
| @ -269,7 +270,7 @@ struct UsbInterface usb_hid = { | |||||||
|     .cfg_descr = (void*)&hid_cfg_desc, |     .cfg_descr = (void*)&hid_cfg_desc, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void hid_init(usbd_device* dev, struct UsbInterface* intf) { | static void hid_init(usbd_device* dev, UsbInterface* intf) { | ||||||
|     if (hid_semaphore == NULL) |     if (hid_semaphore == NULL) | ||||||
|         hid_semaphore = osSemaphoreNew(1, 1, NULL); |         hid_semaphore = osSemaphoreNew(1, 1, NULL); | ||||||
|     usb_dev = dev; |     usb_dev = dev; | ||||||
|  | |||||||
| @ -9,17 +9,8 @@ | |||||||
| 
 | 
 | ||||||
| #define USB_RECONNECT_DELAY 500 | #define USB_RECONNECT_DELAY 500 | ||||||
| 
 | 
 | ||||||
| extern struct UsbInterface usb_cdc_single; | static UsbInterface* usb_if_cur; | ||||||
| extern struct UsbInterface usb_cdc_dual; | static UsbInterface* usb_if_next; | ||||||
| extern struct UsbInterface usb_hid; |  | ||||||
| 
 |  | ||||||
| static struct UsbInterface* const usb_if_modes[UsbModesNum] = { |  | ||||||
|     NULL, |  | ||||||
|     &usb_cdc_single, |  | ||||||
|     &usb_cdc_dual, |  | ||||||
|     &usb_hid, |  | ||||||
|     NULL,//&usb_hid_u2f,
 |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| static const struct usb_string_descriptor dev_lang_desc = USB_ARRAY_DESC(USB_LANGID_ENG_US); | static const struct usb_string_descriptor dev_lang_desc = USB_ARRAY_DESC(USB_LANGID_ENG_US); | ||||||
| 
 | 
 | ||||||
| @ -32,8 +23,6 @@ static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep); | |||||||
| 
 | 
 | ||||||
| struct UsbCfg{ | struct UsbCfg{ | ||||||
|     osTimerId_t reconnect_tmr; |     osTimerId_t reconnect_tmr; | ||||||
|     UsbMode mode_cur; |  | ||||||
|     UsbMode mode_next; |  | ||||||
|     bool enabled; |     bool enabled; | ||||||
|     bool connected; |     bool connected; | ||||||
| } usb_config; | } usb_config; | ||||||
| @ -69,30 +58,30 @@ void furi_hal_usb_init(void) { | |||||||
|     FURI_LOG_I(TAG, "Init OK"); |     FURI_LOG_I(TAG, "Init OK"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_usb_set_config(UsbMode new_mode) { | void furi_hal_usb_set_config(UsbInterface* new_if) { | ||||||
|     if (new_mode != usb_config.mode_cur) { |     if (new_if != usb_if_cur) { | ||||||
|         if (usb_config.enabled) { |         if (usb_config.enabled) { | ||||||
|             usb_config.mode_next = new_mode; |             usb_if_next = new_if; | ||||||
|             if (usb_config.reconnect_tmr == NULL) |             if (usb_config.reconnect_tmr == NULL) | ||||||
|                 usb_config.reconnect_tmr = osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL); |                 usb_config.reconnect_tmr = osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL); | ||||||
|             furi_hal_usb_disable(); |             furi_hal_usb_disable(); | ||||||
|             osTimerStart(usb_config.reconnect_tmr, USB_RECONNECT_DELAY); |             osTimerStart(usb_config.reconnect_tmr, USB_RECONNECT_DELAY); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             if (usb_if_modes[usb_config.mode_cur] != NULL) |             if (usb_if_cur != NULL) | ||||||
|                 usb_if_modes[usb_config.mode_cur]->deinit(&udev); |                 usb_if_cur->deinit(&udev); | ||||||
|             if (usb_if_modes[new_mode] != NULL) { |             if (new_if != NULL) { | ||||||
|                 usb_if_modes[new_mode]->init(&udev, usb_if_modes[new_mode]); |                 new_if->init(&udev, new_if); | ||||||
|                 FURI_LOG_I(TAG, "USB mode change %u -> %u", usb_config.mode_cur, new_mode); |                 FURI_LOG_I(TAG, "USB mode change"); | ||||||
|                 usb_config.enabled = true; |                 usb_config.enabled = true; | ||||||
|                 usb_config.mode_cur = new_mode; |                 usb_if_cur = new_if; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| UsbMode furi_hal_usb_get_config() { | UsbInterface* furi_hal_usb_get_config() { | ||||||
|     return usb_config.mode_cur; |     return usb_if_cur; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_usb_disable() { | void furi_hal_usb_disable() { | ||||||
| @ -105,7 +94,7 @@ void furi_hal_usb_disable() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_usb_enable() { | void furi_hal_usb_enable() { | ||||||
|     if ((!usb_config.enabled) && (usb_if_modes[usb_config.mode_cur] != NULL)) { |     if ((!usb_config.enabled) && (usb_if_cur != NULL)) { | ||||||
|         usbd_connect(&udev, true); |         usbd_connect(&udev, true); | ||||||
|         usb_config.enabled = true; |         usb_config.enabled = true; | ||||||
|         FURI_LOG_I(TAG, "USB Enable"); |         FURI_LOG_I(TAG, "USB Enable"); | ||||||
| @ -113,7 +102,7 @@ void furi_hal_usb_enable() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void furi_hal_usb_tmr_cb(void* context) { | static void furi_hal_usb_tmr_cb(void* context) { | ||||||
|     furi_hal_usb_set_config(usb_config.mode_next); |     furi_hal_usb_set_config(usb_if_next); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Get device / configuration descriptors */ | /* Get device / configuration descriptors */ | ||||||
| @ -122,26 +111,26 @@ static usbd_respond usb_descriptor_get (usbd_ctlreq *req, void **address, uint16 | |||||||
|     const uint8_t dnumber = req->wValue & 0xFF; |     const uint8_t dnumber = req->wValue & 0xFF; | ||||||
|     const void* desc; |     const void* desc; | ||||||
|     uint16_t len = 0; |     uint16_t len = 0; | ||||||
|     if (usb_if_modes[usb_config.mode_cur] == NULL) |     if (usb_if_cur == NULL) | ||||||
|         return usbd_fail; |         return usbd_fail; | ||||||
| 
 | 
 | ||||||
|     switch (dtype) { |     switch (dtype) { | ||||||
|     case USB_DTYPE_DEVICE: |     case USB_DTYPE_DEVICE: | ||||||
|         desc = usb_if_modes[usb_config.mode_cur]->dev_descr; |         desc = usb_if_cur->dev_descr; | ||||||
|         break; |         break; | ||||||
|     case USB_DTYPE_CONFIGURATION: |     case USB_DTYPE_CONFIGURATION: | ||||||
|         desc = usb_if_modes[usb_config.mode_cur]->cfg_descr; |         desc = usb_if_cur->cfg_descr; | ||||||
|         len = ((struct usb_string_descriptor*)(usb_if_modes[usb_config.mode_cur]->cfg_descr))->wString[0]; |         len = ((struct usb_string_descriptor*)(usb_if_cur->cfg_descr))->wString[0]; | ||||||
|         break; |         break; | ||||||
|     case USB_DTYPE_STRING: |     case USB_DTYPE_STRING: | ||||||
|         if (dnumber == UsbDevLang) { |         if (dnumber == UsbDevLang) { | ||||||
|             desc = &dev_lang_desc; |             desc = &dev_lang_desc; | ||||||
|         } else if (dnumber == UsbDevManuf) { |         } else if (dnumber == UsbDevManuf) { | ||||||
|             desc = usb_if_modes[usb_config.mode_cur]->str_manuf_descr; |             desc = usb_if_cur->str_manuf_descr; | ||||||
|         } else if (dnumber == UsbDevProduct) { |         } else if (dnumber == UsbDevProduct) { | ||||||
|             desc = usb_if_modes[usb_config.mode_cur]->str_prod_descr; |             desc = usb_if_cur->str_prod_descr; | ||||||
|         } else if (dnumber == UsbDevSerial) { |         } else if (dnumber == UsbDevSerial) { | ||||||
|             desc = usb_if_modes[usb_config.mode_cur]->str_serial_descr; |             desc = usb_if_cur->str_serial_descr; | ||||||
|         } else  |         } else  | ||||||
|             return usbd_fail; |             return usbd_fail; | ||||||
|         break; |         break; | ||||||
| @ -160,15 +149,15 @@ static usbd_respond usb_descriptor_get (usbd_ctlreq *req, void **address, uint16 | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | ||||||
|     if ((usb_if_modes[usb_config.mode_cur] != NULL) && (usb_config.connected == true)) { |     if ((usb_if_cur != NULL) && (usb_config.connected == true)) { | ||||||
|         usb_config.connected = false; |         usb_config.connected = false; | ||||||
|         usb_if_modes[usb_config.mode_cur]->suspend(&udev); |         usb_if_cur->suspend(&udev); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | ||||||
|     if ((usb_if_modes[usb_config.mode_cur] != NULL) && (usb_config.connected == false)) { |     if ((usb_if_cur != NULL) && (usb_config.connected == false)) { | ||||||
|         usb_config.connected = true; |         usb_config.connected = true; | ||||||
|         usb_if_modes[usb_config.mode_cur]->wakeup(&udev); |         usb_if_cur->wakeup(&udev); | ||||||
|     }  |     }  | ||||||
| } | } | ||||||
|  | |||||||
| @ -11,18 +11,3 @@ enum UsbDevDescStr{ | |||||||
|     UsbDevProduct   = 2, |     UsbDevProduct   = 2, | ||||||
|     UsbDevSerial    = 3, |     UsbDevSerial    = 3, | ||||||
| }; | }; | ||||||
| 
 |  | ||||||
| struct UsbInterface { |  | ||||||
|     void (*init)(usbd_device *dev, struct UsbInterface* intf); |  | ||||||
|     void (*deinit)(usbd_device *dev); |  | ||||||
|     void (*wakeup)(usbd_device *dev); |  | ||||||
|     void (*suspend)(usbd_device *dev);     |  | ||||||
| 
 |  | ||||||
|     struct usb_device_descriptor* dev_descr; |  | ||||||
| 
 |  | ||||||
|     void* str_manuf_descr; |  | ||||||
|     void* str_prod_descr; |  | ||||||
|     void* str_serial_descr; |  | ||||||
| 
 |  | ||||||
|     void* cfg_descr; |  | ||||||
| }; |  | ||||||
|  | |||||||
| @ -13,17 +13,17 @@ | |||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     VcpEvtReserved      = (1 << 0), // Reserved for StreamBuffer internal event
 |     VcpEvtReserved      = (1 << 0), // Reserved for StreamBuffer internal event
 | ||||||
|     VcpEvtConnect       = (1 << 1), |     VcpEvtEnable        = (1 << 1), | ||||||
|     VcpEvtDisconnect    = (1 << 2), |     VcpEvtDisable       = (1 << 2), | ||||||
|     VcpEvtEnable        = (1 << 3), |     VcpEvtConnect       = (1 << 3), | ||||||
|     VcpEvtDisable       = (1 << 4), |     VcpEvtDisconnect    = (1 << 4), | ||||||
|     VcpEvtRx            = (1 << 5), |     VcpEvtStreamRx      = (1 << 5), | ||||||
|     VcpEvtTx            = (1 << 6), |     VcpEvtRx            = (1 << 6), | ||||||
|     VcpEvtStreamRx      = (1 << 7), |     VcpEvtStreamTx      = (1 << 7), | ||||||
|     VcpEvtStreamTx      = (1 << 8), |     VcpEvtTx            = (1 << 8), | ||||||
| } WorkerEvtFlags; | } WorkerEvtFlags; | ||||||
| 
 | 
 | ||||||
| #define VCP_THREAD_FLAG_ALL (VcpEvtConnect | VcpEvtDisconnect | VcpEvtEnable | VcpEvtDisable | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | VcpEvtStreamTx) | #define VCP_THREAD_FLAG_ALL (VcpEvtEnable | VcpEvtDisable | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | VcpEvtStreamTx) | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     FuriThread* thread; |     FuriThread* thread; | ||||||
| @ -37,10 +37,10 @@ typedef struct { | |||||||
| } FuriHalVcp; | } FuriHalVcp; | ||||||
| 
 | 
 | ||||||
| static int32_t vcp_worker(void* context); | static int32_t vcp_worker(void* context); | ||||||
| static void vcp_on_cdc_tx_complete(); | static void vcp_on_cdc_tx_complete(void* context); | ||||||
| static void vcp_on_cdc_rx(); | static void vcp_on_cdc_rx(void* context); | ||||||
| static void vcp_state_callback(uint8_t state); | static void vcp_state_callback(void* context, uint8_t state); | ||||||
| static void vcp_on_cdc_control_line(uint8_t state); | static void vcp_on_cdc_control_line(void* context, uint8_t state); | ||||||
| 
 | 
 | ||||||
| static CdcCallbacks cdc_cb = { | static CdcCallbacks cdc_cb = { | ||||||
|     vcp_on_cdc_tx_complete, |     vcp_on_cdc_tx_complete, | ||||||
| @ -76,93 +76,19 @@ static int32_t vcp_worker(void* context) { | |||||||
|     bool tx_idle = false; |     bool tx_idle = false; | ||||||
|     size_t missed_rx = 0; |     size_t missed_rx = 0; | ||||||
| 
 | 
 | ||||||
|     furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb); |     furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL); | ||||||
| 
 | 
 | ||||||
|     while (1) { |     while (1) { | ||||||
|         uint32_t flags = osThreadFlagsWait(VCP_THREAD_FLAG_ALL, osFlagsWaitAny, osWaitForever); |         uint32_t flags = osThreadFlagsWait(VCP_THREAD_FLAG_ALL, osFlagsWaitAny, osWaitForever); | ||||||
|         furi_assert((flags & osFlagsError) == 0); |         furi_assert((flags & osFlagsError) == 0); | ||||||
| 
 | 
 | ||||||
|         // New data received
 |  | ||||||
|         if((flags & VcpEvtStreamRx) && enabled && missed_rx > 0) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP StreamRx\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { |  | ||||||
|                 flags |= VcpEvtRx; |  | ||||||
|                 missed_rx--; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Rx buffer was read, maybe there is enough space for new data?
 |  | ||||||
|         if((flags & VcpEvtRx)) { |  | ||||||
|             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { |  | ||||||
|                 int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|                 furi_hal_console_printf("VCP Rx %d\r\n", len); |  | ||||||
| #endif |  | ||||||
|                 if (len > 0) { |  | ||||||
|                     furi_check(xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) == len); |  | ||||||
|                 } |  | ||||||
|             } else { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|                 furi_hal_console_puts("VCP Rx missed\r\n"); |  | ||||||
| #endif |  | ||||||
|                 missed_rx++; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // New data in Tx buffer
 |  | ||||||
|         if((flags & VcpEvtStreamTx) && enabled) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP StreamTx\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (tx_idle) { |  | ||||||
|                 flags |= VcpEvtTx; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // CDC write transfer done
 |  | ||||||
|         if((flags & VcpEvtTx) && enabled) { |  | ||||||
|             size_t len = xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_printf("VCP Tx %d\r\n", len); |  | ||||||
| #endif |  | ||||||
|             if (len > 0) { // Some data left in Tx buffer. Sending it now
 |  | ||||||
|                 tx_idle = false; |  | ||||||
|                 furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len); |  | ||||||
|             } else { // There is nothing to send. Set flag to start next transfer instantly
 |  | ||||||
|                 tx_idle = true; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // VCP session opened
 |  | ||||||
|         if((flags & VcpEvtConnect) && enabled) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP Connect\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (vcp->connected == false) { |  | ||||||
|                 vcp->connected = true; |  | ||||||
|                 xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // VCP session closed
 |  | ||||||
|         if((flags & VcpEvtDisconnect) && enabled) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP Disconnect\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (vcp->connected == true) { |  | ||||||
|                 vcp->connected = false; |  | ||||||
|                 xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // VCP enabled
 |         // VCP enabled
 | ||||||
|         if((flags & VcpEvtEnable) && !enabled){ |         if((flags & VcpEvtEnable) && !enabled){ | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|             furi_hal_console_puts("VCP Enable\r\n"); |             FURI_LOG_D(TAG, "Enable"); | ||||||
| #endif             | #endif             | ||||||
|             furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb); |             flags |= VcpEvtTx; | ||||||
|  |             furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL); | ||||||
|             enabled = true; |             enabled = true; | ||||||
|             furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); // flush Rx buffer
 |             furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); // flush Rx buffer
 | ||||||
|             if (furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) { |             if (furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) { | ||||||
| @ -174,12 +100,89 @@ static int32_t vcp_worker(void* context) { | |||||||
|         // VCP disabled
 |         // VCP disabled
 | ||||||
|         if((flags & VcpEvtDisable) && enabled) { |         if((flags & VcpEvtDisable) && enabled) { | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG             | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|             furi_hal_console_puts("VCP Disable\r\n"); |             FURI_LOG_D(TAG, "Disable"); | ||||||
| #endif             | #endif             | ||||||
|             enabled = false; |             enabled = false; | ||||||
|             vcp->connected = false; |             vcp->connected = false; | ||||||
|  |             xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); | ||||||
|             xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); |             xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         // VCP session opened
 | ||||||
|  |         if((flags & VcpEvtConnect) && enabled) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "Connect"); | ||||||
|  | #endif             | ||||||
|  |             if (vcp->connected == false) { | ||||||
|  |                 vcp->connected = true; | ||||||
|  |                 xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // VCP session closed
 | ||||||
|  |         if((flags & VcpEvtDisconnect) && enabled) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "Disconnect"); | ||||||
|  | #endif             | ||||||
|  |             if (vcp->connected == true) { | ||||||
|  |                 vcp->connected = false; | ||||||
|  |                 xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); | ||||||
|  |                 xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Rx buffer was read, maybe there is enough space for new data?
 | ||||||
|  |         if((flags & VcpEvtStreamRx) && enabled && missed_rx > 0) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |             FURI_LOG_D(TAG, "StreamRx"); | ||||||
|  | #endif | ||||||
|  |             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { | ||||||
|  |                 flags |= VcpEvtRx; | ||||||
|  |                 missed_rx--; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // New data received
 | ||||||
|  |         if((flags & VcpEvtRx)) { | ||||||
|  |             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { | ||||||
|  |                 int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG                 | ||||||
|  |                 FURI_LOG_D(TAG, "Rx %d", len); | ||||||
|  | #endif                 | ||||||
|  |                 if (len > 0) { | ||||||
|  |                     furi_check(xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) == len); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG                 | ||||||
|  |                 FURI_LOG_D(TAG, "Rx missed"); | ||||||
|  | #endif                 | ||||||
|  |                 missed_rx++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // New data in Tx buffer
 | ||||||
|  |         if((flags & VcpEvtStreamTx) && enabled) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "StreamTx"); | ||||||
|  | #endif             | ||||||
|  |             if (tx_idle) { | ||||||
|  |                 flags |= VcpEvtTx; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // CDC write transfer done
 | ||||||
|  |         if((flags & VcpEvtTx) && enabled) { | ||||||
|  |             size_t len = xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "Tx %d", len); | ||||||
|  | #endif             | ||||||
|  |             if (len > 0) { // Some data left in Tx buffer. Sending it now
 | ||||||
|  |                 tx_idle = false; | ||||||
|  |                 furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len); | ||||||
|  |             } else { // There is nothing to send. Set flag to start next transfer instantly
 | ||||||
|  |                 tx_idle = true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| @ -196,6 +199,10 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo | |||||||
|     furi_assert(vcp); |     furi_assert(vcp); | ||||||
|     furi_assert(buffer); |     furi_assert(buffer); | ||||||
| 
 | 
 | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "rx %u start", size); | ||||||
|  | #endif     | ||||||
|  | 
 | ||||||
|     size_t rx_cnt = 0; |     size_t rx_cnt = 0; | ||||||
| 
 | 
 | ||||||
|     while (size > 0) { |     while (size > 0) { | ||||||
| @ -204,6 +211,9 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo | |||||||
|             batch_size = VCP_RX_BUF_SIZE; |             batch_size = VCP_RX_BUF_SIZE; | ||||||
| 
 | 
 | ||||||
|         size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout); |         size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG         | ||||||
|  |         FURI_LOG_D(TAG, "%u ", batch_size); | ||||||
|  | #endif         | ||||||
|         if (len == 0) |         if (len == 0) | ||||||
|             break; |             break; | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamRx); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamRx); | ||||||
| @ -211,6 +221,10 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo | |||||||
|         buffer += len; |         buffer += len; | ||||||
|         rx_cnt += len; |         rx_cnt += len; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "rx %u end", size); | ||||||
|  | #endif     | ||||||
|     return rx_cnt; |     return rx_cnt; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -223,34 +237,40 @@ void furi_hal_vcp_tx(const uint8_t* buffer, size_t size) { | |||||||
|     furi_assert(vcp); |     furi_assert(vcp); | ||||||
|     furi_assert(buffer); |     furi_assert(buffer); | ||||||
| 
 | 
 | ||||||
|     while (size > 0) { | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "tx %u start", size); | ||||||
|  | #endif     | ||||||
|  | 
 | ||||||
|  |     while (size > 0 && vcp->connected) { | ||||||
|         size_t batch_size = size; |         size_t batch_size = size; | ||||||
|         if (batch_size > VCP_TX_BUF_SIZE) |         if (batch_size > USB_CDC_PKT_LEN) | ||||||
|             batch_size = VCP_TX_BUF_SIZE; |             batch_size = USB_CDC_PKT_LEN; | ||||||
| 
 | 
 | ||||||
|         xStreamBufferSend(vcp->tx_stream, buffer, batch_size, osWaitForever); |         xStreamBufferSend(vcp->tx_stream, buffer, batch_size, osWaitForever); | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamTx); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamTx); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |         FURI_LOG_D(TAG, "%u ", batch_size); | ||||||
|  | #endif         | ||||||
| 
 | 
 | ||||||
|         size -= batch_size; |         size -= batch_size; | ||||||
|         buffer += batch_size; |         buffer += batch_size; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "tx %u end", size); | ||||||
|  | #endif     | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_state_callback(uint8_t state) { | static void vcp_state_callback(void* context, uint8_t state) { | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|     furi_hal_console_puts("VCP State\r\n"); |  | ||||||
| #endif |  | ||||||
|     if (state == 0) { |     if (state == 0) { | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_control_line(uint8_t state) { | static void vcp_on_cdc_control_line(void* context, uint8_t state) { | ||||||
|     // bit 0: DTR state, bit 1: RTS state
 |     // bit 0: DTR state, bit 1: RTS state
 | ||||||
|     bool dtr = state & (1 << 0); |     bool dtr = state & (1 << 0); | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG | 
 | ||||||
|     furi_hal_console_puts("VCP CtrlLine\r\n"); |  | ||||||
| #endif |  | ||||||
|     if (dtr == true) { |     if (dtr == true) { | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtConnect); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtConnect); | ||||||
|     } else { |     } else { | ||||||
| @ -258,12 +278,12 @@ static void vcp_on_cdc_control_line(uint8_t state) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_rx() { | static void vcp_on_cdc_rx(void* context) { | ||||||
|     uint32_t ret = osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtRx); |     uint32_t ret = osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtRx); | ||||||
|     furi_assert((ret & osFlagsError) == 0); |     furi_assert((ret & osFlagsError) == 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_tx_complete() { | static void vcp_on_cdc_tx_complete(void* context) { | ||||||
|     osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtTx); |     osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtTx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -271,4 +291,3 @@ bool furi_hal_vcp_is_connected(void) { | |||||||
|     furi_assert(vcp); |     furi_assert(vcp); | ||||||
|     return vcp->connected; |     return vcp->connected; | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -40,7 +40,7 @@ void furi_hal_init() { | |||||||
| 
 | 
 | ||||||
|     // VCP + USB
 |     // VCP + USB
 | ||||||
|     furi_hal_usb_init(); |     furi_hal_usb_init(); | ||||||
|     furi_hal_usb_set_config(UsbModeVcpSingle); |     furi_hal_usb_set_config(&usb_cdc_single); | ||||||
|     furi_hal_vcp_init(); |     furi_hal_vcp_init(); | ||||||
|     FURI_LOG_I(TAG, "USB OK"); |     FURI_LOG_I(TAG, "USB OK"); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #include "furi-hal-version.h" | #include "furi-hal-version.h" | ||||||
| #include "furi-hal-usb_i.h" | #include "furi-hal-usb_i.h" | ||||||
|  | #include "furi-hal-usb.h" | ||||||
| #include "furi-hal-usb-cdc_i.h" | #include "furi-hal-usb-cdc_i.h" | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| 
 | 
 | ||||||
| @ -347,7 +348,7 @@ static const struct CdcConfigDescriptorDual cdc_cfg_desc_dual = { | |||||||
| static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {}; | static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {}; | ||||||
| static uint8_t cdc_ctrl_line_state[IF_NUM_MAX]; | static uint8_t cdc_ctrl_line_state[IF_NUM_MAX]; | ||||||
| 
 | 
 | ||||||
| static void cdc_init(usbd_device* dev, struct UsbInterface* intf); | static void cdc_init(usbd_device* dev, UsbInterface* intf); | ||||||
| static void cdc_deinit(usbd_device *dev); | static void cdc_deinit(usbd_device *dev); | ||||||
| static void cdc_on_wakeup(usbd_device *dev); | static void cdc_on_wakeup(usbd_device *dev); | ||||||
| static void cdc_on_suspend(usbd_device *dev); | static void cdc_on_suspend(usbd_device *dev); | ||||||
| @ -355,10 +356,12 @@ static void cdc_on_suspend(usbd_device *dev); | |||||||
| static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg); | static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg); | ||||||
| static usbd_respond cdc_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback); | static usbd_respond cdc_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback); | ||||||
| static usbd_device* usb_dev; | static usbd_device* usb_dev; | ||||||
| static struct UsbInterface* cdc_if_cur = NULL; | static UsbInterface* cdc_if_cur = NULL; | ||||||
|  | static bool connected = false; | ||||||
| static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL}; | static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL}; | ||||||
|  | static void* cb_ctx[IF_NUM_MAX]; | ||||||
| 
 | 
 | ||||||
| struct UsbInterface usb_cdc_single = { | UsbInterface usb_cdc_single = { | ||||||
|     .init = cdc_init, |     .init = cdc_init, | ||||||
|     .deinit = cdc_deinit, |     .deinit = cdc_deinit, | ||||||
|     .wakeup = cdc_on_wakeup, |     .wakeup = cdc_on_wakeup, | ||||||
| @ -373,7 +376,7 @@ struct UsbInterface usb_cdc_single = { | |||||||
|     .cfg_descr = (void*)&cdc_cfg_desc_single, |     .cfg_descr = (void*)&cdc_cfg_desc_single, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct UsbInterface usb_cdc_dual = { | UsbInterface usb_cdc_dual = { | ||||||
|     .init = cdc_init, |     .init = cdc_init, | ||||||
|     .deinit = cdc_deinit, |     .deinit = cdc_deinit, | ||||||
|     .wakeup = cdc_on_wakeup, |     .wakeup = cdc_on_wakeup, | ||||||
| @ -388,7 +391,7 @@ struct UsbInterface usb_cdc_dual = { | |||||||
|     .cfg_descr = (void*)&cdc_cfg_desc_dual, |     .cfg_descr = (void*)&cdc_cfg_desc_dual, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void cdc_init(usbd_device* dev, struct UsbInterface* intf) { | static void cdc_init(usbd_device* dev, UsbInterface* intf) { | ||||||
|     usb_dev = dev; |     usb_dev = dev; | ||||||
|     cdc_if_cur = intf; |     cdc_if_cur = intf; | ||||||
|      |      | ||||||
| @ -428,21 +431,35 @@ static void cdc_deinit(usbd_device *dev) { | |||||||
|     cdc_if_cur = NULL; |     cdc_if_cur = NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb) { | void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context) { | ||||||
|     if (if_num < 2) |     furi_assert(if_num < IF_NUM_MAX); | ||||||
|  | 
 | ||||||
|  |     if (callbacks[if_num] != NULL) { | ||||||
|  |         if (callbacks[if_num]->state_callback != NULL) { | ||||||
|  |             if (connected == true) | ||||||
|  |                 callbacks[if_num]->state_callback(cb_ctx[if_num], 0); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     callbacks[if_num] = cb; |     callbacks[if_num] = cb; | ||||||
|  |     cb_ctx[if_num] = context; | ||||||
|  | 
 | ||||||
|  |     if (callbacks[if_num] != NULL) { | ||||||
|  |         if (callbacks[if_num]->state_callback != NULL) { | ||||||
|  |             if (connected == true) | ||||||
|  |                 callbacks[if_num]->state_callback(cb_ctx[if_num], 1); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) { | struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) { | ||||||
|     if (if_num < 2) |     furi_assert(if_num < IF_NUM_MAX); | ||||||
|     return &cdc_config[if_num]; |     return &cdc_config[if_num]; | ||||||
|     return NULL; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) { | uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) { | ||||||
|     if (if_num < 2) |     furi_assert(if_num < IF_NUM_MAX); | ||||||
|     return cdc_ctrl_line_state[if_num]; |     return cdc_ctrl_line_state[if_num]; | ||||||
|     return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) { | void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) { | ||||||
| @ -462,20 +479,22 @@ int32_t furi_hal_cdc_receive(uint8_t if_num, uint8_t* buf, uint16_t max_len) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void cdc_on_wakeup(usbd_device *dev) { | static void cdc_on_wakeup(usbd_device *dev) { | ||||||
|  |     connected = true; | ||||||
|     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { |     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { | ||||||
|         if (callbacks[i] != NULL) { |         if (callbacks[i] != NULL) { | ||||||
|             if (callbacks[i]->state_callback != NULL) |             if (callbacks[i]->state_callback != NULL) | ||||||
|                 callbacks[i]->state_callback(1); |                 callbacks[i]->state_callback(cb_ctx[i], 1); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void cdc_on_suspend(usbd_device *dev) { | static void cdc_on_suspend(usbd_device *dev) { | ||||||
|  |     connected = false; | ||||||
|     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { |     for (uint8_t i = 0; i < IF_NUM_MAX; i++) { | ||||||
|         cdc_ctrl_line_state[i] = 0; |         cdc_ctrl_line_state[i] = 0; | ||||||
|         if (callbacks[i] != NULL) { |         if (callbacks[i] != NULL) { | ||||||
|             if (callbacks[i]->state_callback != NULL) |             if (callbacks[i]->state_callback != NULL) | ||||||
|                 callbacks[i]->state_callback(0); |                 callbacks[i]->state_callback(cb_ctx[i], 0); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -489,7 +508,7 @@ static void cdc_rx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) { | |||||||
|      |      | ||||||
|     if (callbacks[if_num] != NULL) { |     if (callbacks[if_num] != NULL) { | ||||||
|         if (callbacks[if_num]->rx_ep_callback != NULL) |         if (callbacks[if_num]->rx_ep_callback != NULL) | ||||||
|             callbacks[if_num]->rx_ep_callback(); |             callbacks[if_num]->rx_ep_callback(cb_ctx[if_num]); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -502,7 +521,7 @@ static void cdc_tx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) { | |||||||
|      |      | ||||||
|     if (callbacks[if_num] != NULL) { |     if (callbacks[if_num] != NULL) { | ||||||
|         if (callbacks[if_num]->tx_ep_callback != NULL) |         if (callbacks[if_num]->tx_ep_callback != NULL) | ||||||
|             callbacks[if_num]->tx_ep_callback(); |             callbacks[if_num]->tx_ep_callback(cb_ctx[if_num]); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -590,14 +609,14 @@ static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_cal | |||||||
|             if (callbacks[if_num] != NULL) { |             if (callbacks[if_num] != NULL) { | ||||||
|                 cdc_ctrl_line_state[if_num] = req->wValue; |                 cdc_ctrl_line_state[if_num] = req->wValue; | ||||||
|                 if (callbacks[if_num]->ctrl_line_callback != NULL) |                 if (callbacks[if_num]->ctrl_line_callback != NULL) | ||||||
|                     callbacks[if_num]->ctrl_line_callback(cdc_ctrl_line_state[if_num]); |                     callbacks[if_num]->ctrl_line_callback(cb_ctx[if_num], cdc_ctrl_line_state[if_num]); | ||||||
|             } |             } | ||||||
|             return usbd_ack; |             return usbd_ack; | ||||||
|         case USB_CDC_SET_LINE_CODING: |         case USB_CDC_SET_LINE_CODING: | ||||||
|             memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0])); |             memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0])); | ||||||
|             if (callbacks[if_num] != NULL) { |             if (callbacks[if_num] != NULL) { | ||||||
|                 if (callbacks[if_num]->config_callback != NULL) |                 if (callbacks[if_num]->config_callback != NULL) | ||||||
|                     callbacks[if_num]->config_callback(&cdc_config[if_num]); |                     callbacks[if_num]->config_callback(cb_ctx[if_num], &cdc_config[if_num]); | ||||||
|             } |             } | ||||||
|             return usbd_ack; |             return usbd_ack; | ||||||
|         case USB_CDC_GET_LINE_CODING: |         case USB_CDC_GET_LINE_CODING: | ||||||
|  | |||||||
| @ -6,14 +6,14 @@ | |||||||
| #define CDC_DATA_SZ 64 | #define CDC_DATA_SZ 64 | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     void (*tx_ep_callback)(void); |     void (*tx_ep_callback)(void* context); | ||||||
|     void (*rx_ep_callback)(void); |     void (*rx_ep_callback)(void* context); | ||||||
|     void (*state_callback)(uint8_t state); |     void (*state_callback)(void* context, uint8_t state); | ||||||
|     void (*ctrl_line_callback)(uint8_t state); |     void (*ctrl_line_callback)(void* context, uint8_t state); | ||||||
|     void (*config_callback)(struct usb_cdc_line_coding* config); |     void (*config_callback)(void* context, struct usb_cdc_line_coding* config); | ||||||
| } CdcCallbacks; | } CdcCallbacks; | ||||||
| 
 | 
 | ||||||
| void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb); | void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context); | ||||||
| 
 | 
 | ||||||
| struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num); | struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #include "furi-hal-version.h" | #include "furi-hal-version.h" | ||||||
| #include "furi-hal-usb_i.h" | #include "furi-hal-usb_i.h" | ||||||
|  | #include "furi-hal-usb.h" | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| 
 | 
 | ||||||
| #include "usb.h" | #include "usb.h" | ||||||
| @ -182,7 +183,7 @@ static struct HidReport { | |||||||
|     struct HidReportMouse mouse; |     struct HidReportMouse mouse; | ||||||
| } __attribute__((packed)) hid_report; | } __attribute__((packed)) hid_report; | ||||||
| 
 | 
 | ||||||
| static void hid_init(usbd_device* dev, struct UsbInterface* intf); | static void hid_init(usbd_device* dev, UsbInterface* intf); | ||||||
| static void hid_deinit(usbd_device *dev); | static void hid_deinit(usbd_device *dev); | ||||||
| static void hid_on_wakeup(usbd_device *dev); | static void hid_on_wakeup(usbd_device *dev); | ||||||
| static void hid_on_suspend(usbd_device *dev); | static void hid_on_suspend(usbd_device *dev); | ||||||
| @ -254,7 +255,7 @@ bool furi_hal_hid_mouse_scroll(int8_t delta) { | |||||||
|     return state; |     return state; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct UsbInterface usb_hid = { | UsbInterface usb_hid = { | ||||||
|     .init = hid_init, |     .init = hid_init, | ||||||
|     .deinit = hid_deinit, |     .deinit = hid_deinit, | ||||||
|     .wakeup = hid_on_wakeup, |     .wakeup = hid_on_wakeup, | ||||||
| @ -269,7 +270,7 @@ struct UsbInterface usb_hid = { | |||||||
|     .cfg_descr = (void*)&hid_cfg_desc, |     .cfg_descr = (void*)&hid_cfg_desc, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void hid_init(usbd_device* dev, struct UsbInterface* intf) { | static void hid_init(usbd_device* dev, UsbInterface* intf) { | ||||||
|     if (hid_semaphore == NULL) |     if (hid_semaphore == NULL) | ||||||
|         hid_semaphore = osSemaphoreNew(1, 1, NULL); |         hid_semaphore = osSemaphoreNew(1, 1, NULL); | ||||||
|     usb_dev = dev; |     usb_dev = dev; | ||||||
|  | |||||||
| @ -9,17 +9,8 @@ | |||||||
| 
 | 
 | ||||||
| #define USB_RECONNECT_DELAY 500 | #define USB_RECONNECT_DELAY 500 | ||||||
| 
 | 
 | ||||||
| extern struct UsbInterface usb_cdc_single; | static UsbInterface* usb_if_cur; | ||||||
| extern struct UsbInterface usb_cdc_dual; | static UsbInterface* usb_if_next; | ||||||
| extern struct UsbInterface usb_hid; |  | ||||||
| 
 |  | ||||||
| static struct UsbInterface* const usb_if_modes[UsbModesNum] = { |  | ||||||
|     NULL, |  | ||||||
|     &usb_cdc_single, |  | ||||||
|     &usb_cdc_dual, |  | ||||||
|     &usb_hid, |  | ||||||
|     NULL,//&usb_hid_u2f,
 |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| static const struct usb_string_descriptor dev_lang_desc = USB_ARRAY_DESC(USB_LANGID_ENG_US); | static const struct usb_string_descriptor dev_lang_desc = USB_ARRAY_DESC(USB_LANGID_ENG_US); | ||||||
| 
 | 
 | ||||||
| @ -32,8 +23,6 @@ static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep); | |||||||
| 
 | 
 | ||||||
| struct UsbCfg{ | struct UsbCfg{ | ||||||
|     osTimerId_t reconnect_tmr; |     osTimerId_t reconnect_tmr; | ||||||
|     UsbMode mode_cur; |  | ||||||
|     UsbMode mode_next; |  | ||||||
|     bool enabled; |     bool enabled; | ||||||
|     bool connected; |     bool connected; | ||||||
| } usb_config; | } usb_config; | ||||||
| @ -69,30 +58,30 @@ void furi_hal_usb_init(void) { | |||||||
|     FURI_LOG_I(TAG, "Init OK"); |     FURI_LOG_I(TAG, "Init OK"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_usb_set_config(UsbMode new_mode) { | void furi_hal_usb_set_config(UsbInterface* new_if) { | ||||||
|     if (new_mode != usb_config.mode_cur) { |     if (new_if != usb_if_cur) { | ||||||
|         if (usb_config.enabled) { |         if (usb_config.enabled) { | ||||||
|             usb_config.mode_next = new_mode; |             usb_if_next = new_if; | ||||||
|             if (usb_config.reconnect_tmr == NULL) |             if (usb_config.reconnect_tmr == NULL) | ||||||
|                 usb_config.reconnect_tmr = osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL); |                 usb_config.reconnect_tmr = osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL); | ||||||
|             furi_hal_usb_disable(); |             furi_hal_usb_disable(); | ||||||
|             osTimerStart(usb_config.reconnect_tmr, USB_RECONNECT_DELAY); |             osTimerStart(usb_config.reconnect_tmr, USB_RECONNECT_DELAY); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             if (usb_if_modes[usb_config.mode_cur] != NULL) |             if (usb_if_cur != NULL) | ||||||
|                 usb_if_modes[usb_config.mode_cur]->deinit(&udev); |                 usb_if_cur->deinit(&udev); | ||||||
|             if (usb_if_modes[new_mode] != NULL) { |             if (new_if != NULL) { | ||||||
|                 usb_if_modes[new_mode]->init(&udev, usb_if_modes[new_mode]); |                 new_if->init(&udev, new_if); | ||||||
|                 FURI_LOG_I(TAG, "USB mode change %u -> %u", usb_config.mode_cur, new_mode); |                 FURI_LOG_I(TAG, "USB mode change"); | ||||||
|                 usb_config.enabled = true; |                 usb_config.enabled = true; | ||||||
|                 usb_config.mode_cur = new_mode; |                 usb_if_cur = new_if; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| UsbMode furi_hal_usb_get_config() { | UsbInterface* furi_hal_usb_get_config() { | ||||||
|     return usb_config.mode_cur; |     return usb_if_cur; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_usb_disable() { | void furi_hal_usb_disable() { | ||||||
| @ -105,7 +94,7 @@ void furi_hal_usb_disable() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void furi_hal_usb_enable() { | void furi_hal_usb_enable() { | ||||||
|     if ((!usb_config.enabled) && (usb_if_modes[usb_config.mode_cur] != NULL)) { |     if ((!usb_config.enabled) && (usb_if_cur != NULL)) { | ||||||
|         usbd_connect(&udev, true); |         usbd_connect(&udev, true); | ||||||
|         usb_config.enabled = true; |         usb_config.enabled = true; | ||||||
|         FURI_LOG_I(TAG, "USB Enable"); |         FURI_LOG_I(TAG, "USB Enable"); | ||||||
| @ -113,7 +102,7 @@ void furi_hal_usb_enable() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void furi_hal_usb_tmr_cb(void* context) { | static void furi_hal_usb_tmr_cb(void* context) { | ||||||
|     furi_hal_usb_set_config(usb_config.mode_next); |     furi_hal_usb_set_config(usb_if_next); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Get device / configuration descriptors */ | /* Get device / configuration descriptors */ | ||||||
| @ -122,26 +111,26 @@ static usbd_respond usb_descriptor_get (usbd_ctlreq *req, void **address, uint16 | |||||||
|     const uint8_t dnumber = req->wValue & 0xFF; |     const uint8_t dnumber = req->wValue & 0xFF; | ||||||
|     const void* desc; |     const void* desc; | ||||||
|     uint16_t len = 0; |     uint16_t len = 0; | ||||||
|     if (usb_if_modes[usb_config.mode_cur] == NULL) |     if (usb_if_cur == NULL) | ||||||
|         return usbd_fail; |         return usbd_fail; | ||||||
| 
 | 
 | ||||||
|     switch (dtype) { |     switch (dtype) { | ||||||
|     case USB_DTYPE_DEVICE: |     case USB_DTYPE_DEVICE: | ||||||
|         desc = usb_if_modes[usb_config.mode_cur]->dev_descr; |         desc = usb_if_cur->dev_descr; | ||||||
|         break; |         break; | ||||||
|     case USB_DTYPE_CONFIGURATION: |     case USB_DTYPE_CONFIGURATION: | ||||||
|         desc = usb_if_modes[usb_config.mode_cur]->cfg_descr; |         desc = usb_if_cur->cfg_descr; | ||||||
|         len = ((struct usb_string_descriptor*)(usb_if_modes[usb_config.mode_cur]->cfg_descr))->wString[0]; |         len = ((struct usb_string_descriptor*)(usb_if_cur->cfg_descr))->wString[0]; | ||||||
|         break; |         break; | ||||||
|     case USB_DTYPE_STRING: |     case USB_DTYPE_STRING: | ||||||
|         if (dnumber == UsbDevLang) { |         if (dnumber == UsbDevLang) { | ||||||
|             desc = &dev_lang_desc; |             desc = &dev_lang_desc; | ||||||
|         } else if (dnumber == UsbDevManuf) { |         } else if (dnumber == UsbDevManuf) { | ||||||
|             desc = usb_if_modes[usb_config.mode_cur]->str_manuf_descr; |             desc = usb_if_cur->str_manuf_descr; | ||||||
|         } else if (dnumber == UsbDevProduct) { |         } else if (dnumber == UsbDevProduct) { | ||||||
|             desc = usb_if_modes[usb_config.mode_cur]->str_prod_descr; |             desc = usb_if_cur->str_prod_descr; | ||||||
|         } else if (dnumber == UsbDevSerial) { |         } else if (dnumber == UsbDevSerial) { | ||||||
|             desc = usb_if_modes[usb_config.mode_cur]->str_serial_descr; |             desc = usb_if_cur->str_serial_descr; | ||||||
|         } else  |         } else  | ||||||
|             return usbd_fail; |             return usbd_fail; | ||||||
|         break; |         break; | ||||||
| @ -160,15 +149,15 @@ static usbd_respond usb_descriptor_get (usbd_ctlreq *req, void **address, uint16 | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | ||||||
|     if ((usb_if_modes[usb_config.mode_cur] != NULL) && (usb_config.connected == true)) { |     if ((usb_if_cur != NULL) && (usb_config.connected == true)) { | ||||||
|         usb_config.connected = false; |         usb_config.connected = false; | ||||||
|         usb_if_modes[usb_config.mode_cur]->suspend(&udev); |         usb_if_cur->suspend(&udev); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep) { | ||||||
|     if ((usb_if_modes[usb_config.mode_cur] != NULL) && (usb_config.connected == false)) { |     if ((usb_if_cur != NULL) && (usb_config.connected == false)) { | ||||||
|         usb_config.connected = true; |         usb_config.connected = true; | ||||||
|         usb_if_modes[usb_config.mode_cur]->wakeup(&udev); |         usb_if_cur->wakeup(&udev); | ||||||
|     }  |     }  | ||||||
| } | } | ||||||
|  | |||||||
| @ -11,18 +11,3 @@ enum UsbDevDescStr{ | |||||||
|     UsbDevProduct   = 2, |     UsbDevProduct   = 2, | ||||||
|     UsbDevSerial    = 3, |     UsbDevSerial    = 3, | ||||||
| }; | }; | ||||||
| 
 |  | ||||||
| struct UsbInterface { |  | ||||||
|     void (*init)(usbd_device *dev, struct UsbInterface* intf); |  | ||||||
|     void (*deinit)(usbd_device *dev); |  | ||||||
|     void (*wakeup)(usbd_device *dev); |  | ||||||
|     void (*suspend)(usbd_device *dev);     |  | ||||||
| 
 |  | ||||||
|     struct usb_device_descriptor* dev_descr; |  | ||||||
| 
 |  | ||||||
|     void* str_manuf_descr; |  | ||||||
|     void* str_prod_descr; |  | ||||||
|     void* str_serial_descr; |  | ||||||
| 
 |  | ||||||
|     void* cfg_descr; |  | ||||||
| }; |  | ||||||
|  | |||||||
| @ -13,17 +13,17 @@ | |||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     VcpEvtReserved      = (1 << 0), // Reserved for StreamBuffer internal event
 |     VcpEvtReserved      = (1 << 0), // Reserved for StreamBuffer internal event
 | ||||||
|     VcpEvtConnect       = (1 << 1), |     VcpEvtEnable        = (1 << 1), | ||||||
|     VcpEvtDisconnect    = (1 << 2), |     VcpEvtDisable       = (1 << 2), | ||||||
|     VcpEvtEnable        = (1 << 3), |     VcpEvtConnect       = (1 << 3), | ||||||
|     VcpEvtDisable       = (1 << 4), |     VcpEvtDisconnect    = (1 << 4), | ||||||
|     VcpEvtRx            = (1 << 5), |     VcpEvtStreamRx      = (1 << 5), | ||||||
|     VcpEvtTx            = (1 << 6), |     VcpEvtRx            = (1 << 6), | ||||||
|     VcpEvtStreamRx      = (1 << 7), |     VcpEvtStreamTx      = (1 << 7), | ||||||
|     VcpEvtStreamTx      = (1 << 8), |     VcpEvtTx            = (1 << 8), | ||||||
| } WorkerEvtFlags; | } WorkerEvtFlags; | ||||||
| 
 | 
 | ||||||
| #define VCP_THREAD_FLAG_ALL (VcpEvtConnect | VcpEvtDisconnect | VcpEvtEnable | VcpEvtDisable | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | VcpEvtStreamTx) | #define VCP_THREAD_FLAG_ALL (VcpEvtEnable | VcpEvtDisable | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | VcpEvtStreamTx) | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     FuriThread* thread; |     FuriThread* thread; | ||||||
| @ -37,10 +37,10 @@ typedef struct { | |||||||
| } FuriHalVcp; | } FuriHalVcp; | ||||||
| 
 | 
 | ||||||
| static int32_t vcp_worker(void* context); | static int32_t vcp_worker(void* context); | ||||||
| static void vcp_on_cdc_tx_complete(); | static void vcp_on_cdc_tx_complete(void* context); | ||||||
| static void vcp_on_cdc_rx(); | static void vcp_on_cdc_rx(void* context); | ||||||
| static void vcp_state_callback(uint8_t state); | static void vcp_state_callback(void* context, uint8_t state); | ||||||
| static void vcp_on_cdc_control_line(uint8_t state); | static void vcp_on_cdc_control_line(void* context, uint8_t state); | ||||||
| 
 | 
 | ||||||
| static CdcCallbacks cdc_cb = { | static CdcCallbacks cdc_cb = { | ||||||
|     vcp_on_cdc_tx_complete, |     vcp_on_cdc_tx_complete, | ||||||
| @ -76,93 +76,19 @@ static int32_t vcp_worker(void* context) { | |||||||
|     bool tx_idle = false; |     bool tx_idle = false; | ||||||
|     size_t missed_rx = 0; |     size_t missed_rx = 0; | ||||||
| 
 | 
 | ||||||
|     furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb); |     furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL); | ||||||
| 
 | 
 | ||||||
|     while (1) { |     while (1) { | ||||||
|         uint32_t flags = osThreadFlagsWait(VCP_THREAD_FLAG_ALL, osFlagsWaitAny, osWaitForever); |         uint32_t flags = osThreadFlagsWait(VCP_THREAD_FLAG_ALL, osFlagsWaitAny, osWaitForever); | ||||||
|         furi_assert((flags & osFlagsError) == 0); |         furi_assert((flags & osFlagsError) == 0); | ||||||
| 
 | 
 | ||||||
|         // New data received
 |  | ||||||
|         if((flags & VcpEvtStreamRx) && enabled && missed_rx > 0) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP StreamRx\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { |  | ||||||
|                 flags |= VcpEvtRx; |  | ||||||
|                 missed_rx--; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Rx buffer was read, maybe there is enough space for new data?
 |  | ||||||
|         if((flags & VcpEvtRx)) { |  | ||||||
|             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { |  | ||||||
|                 int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|                 furi_hal_console_printf("VCP Rx %d\r\n", len); |  | ||||||
| #endif |  | ||||||
|                 if (len > 0) { |  | ||||||
|                     furi_check(xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) == len); |  | ||||||
|                 } |  | ||||||
|             } else { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|                 furi_hal_console_puts("VCP Rx missed\r\n"); |  | ||||||
| #endif |  | ||||||
|                 missed_rx++; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // New data in Tx buffer
 |  | ||||||
|         if((flags & VcpEvtStreamTx) && enabled) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP StreamTx\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (tx_idle) { |  | ||||||
|                 flags |= VcpEvtTx; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // CDC write transfer done
 |  | ||||||
|         if((flags & VcpEvtTx) && enabled) { |  | ||||||
|             size_t len = xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_printf("VCP Tx %d\r\n", len); |  | ||||||
| #endif |  | ||||||
|             if (len > 0) { // Some data left in Tx buffer. Sending it now
 |  | ||||||
|                 tx_idle = false; |  | ||||||
|                 furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len); |  | ||||||
|             } else { // There is nothing to send. Set flag to start next transfer instantly
 |  | ||||||
|                 tx_idle = true; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // VCP session opened
 |  | ||||||
|         if((flags & VcpEvtConnect) && enabled) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP Connect\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (vcp->connected == false) { |  | ||||||
|                 vcp->connected = true; |  | ||||||
|                 xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // VCP session closed
 |  | ||||||
|         if((flags & VcpEvtDisconnect) && enabled) { |  | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|             furi_hal_console_puts("VCP Disconnect\r\n"); |  | ||||||
| #endif |  | ||||||
|             if (vcp->connected == true) { |  | ||||||
|                 vcp->connected = false; |  | ||||||
|                 xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // VCP enabled
 |         // VCP enabled
 | ||||||
|         if((flags & VcpEvtEnable) && !enabled){ |         if((flags & VcpEvtEnable) && !enabled){ | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|             furi_hal_console_puts("VCP Enable\r\n"); |             FURI_LOG_D(TAG, "Enable"); | ||||||
| #endif             | #endif             | ||||||
|             furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb); |             flags |= VcpEvtTx; | ||||||
|  |             furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL); | ||||||
|             enabled = true; |             enabled = true; | ||||||
|             furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); // flush Rx buffer
 |             furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); // flush Rx buffer
 | ||||||
|             if (furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) { |             if (furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) { | ||||||
| @ -174,12 +100,89 @@ static int32_t vcp_worker(void* context) { | |||||||
|         // VCP disabled
 |         // VCP disabled
 | ||||||
|         if((flags & VcpEvtDisable) && enabled) { |         if((flags & VcpEvtDisable) && enabled) { | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG             | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|             furi_hal_console_puts("VCP Disable\r\n"); |             FURI_LOG_D(TAG, "Disable"); | ||||||
| #endif             | #endif             | ||||||
|             enabled = false; |             enabled = false; | ||||||
|             vcp->connected = false; |             vcp->connected = false; | ||||||
|  |             xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); | ||||||
|             xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); |             xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         // VCP session opened
 | ||||||
|  |         if((flags & VcpEvtConnect) && enabled) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "Connect"); | ||||||
|  | #endif             | ||||||
|  |             if (vcp->connected == false) { | ||||||
|  |                 vcp->connected = true; | ||||||
|  |                 xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // VCP session closed
 | ||||||
|  |         if((flags & VcpEvtDisconnect) && enabled) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "Disconnect"); | ||||||
|  | #endif             | ||||||
|  |             if (vcp->connected == true) { | ||||||
|  |                 vcp->connected = false; | ||||||
|  |                 xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); | ||||||
|  |                 xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Rx buffer was read, maybe there is enough space for new data?
 | ||||||
|  |         if((flags & VcpEvtStreamRx) && enabled && missed_rx > 0) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |             FURI_LOG_D(TAG, "StreamRx"); | ||||||
|  | #endif | ||||||
|  |             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { | ||||||
|  |                 flags |= VcpEvtRx; | ||||||
|  |                 missed_rx--; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // New data received
 | ||||||
|  |         if((flags & VcpEvtRx)) { | ||||||
|  |             if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) { | ||||||
|  |                 int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG                 | ||||||
|  |                 FURI_LOG_D(TAG, "Rx %d", len); | ||||||
|  | #endif                 | ||||||
|  |                 if (len > 0) { | ||||||
|  |                     furi_check(xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) == len); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG                 | ||||||
|  |                 FURI_LOG_D(TAG, "Rx missed"); | ||||||
|  | #endif                 | ||||||
|  |                 missed_rx++; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // New data in Tx buffer
 | ||||||
|  |         if((flags & VcpEvtStreamTx) && enabled) { | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "StreamTx"); | ||||||
|  | #endif             | ||||||
|  |             if (tx_idle) { | ||||||
|  |                 flags |= VcpEvtTx; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // CDC write transfer done
 | ||||||
|  |         if((flags & VcpEvtTx) && enabled) { | ||||||
|  |             size_t len = xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG             | ||||||
|  |             FURI_LOG_D(TAG, "Tx %d", len); | ||||||
|  | #endif             | ||||||
|  |             if (len > 0) { // Some data left in Tx buffer. Sending it now
 | ||||||
|  |                 tx_idle = false; | ||||||
|  |                 furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len); | ||||||
|  |             } else { // There is nothing to send. Set flag to start next transfer instantly
 | ||||||
|  |                 tx_idle = true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| @ -196,6 +199,10 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo | |||||||
|     furi_assert(vcp); |     furi_assert(vcp); | ||||||
|     furi_assert(buffer); |     furi_assert(buffer); | ||||||
| 
 | 
 | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "rx %u start", size); | ||||||
|  | #endif     | ||||||
|  | 
 | ||||||
|     size_t rx_cnt = 0; |     size_t rx_cnt = 0; | ||||||
| 
 | 
 | ||||||
|     while (size > 0) { |     while (size > 0) { | ||||||
| @ -204,6 +211,9 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo | |||||||
|             batch_size = VCP_RX_BUF_SIZE; |             batch_size = VCP_RX_BUF_SIZE; | ||||||
| 
 | 
 | ||||||
|         size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout); |         size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG         | ||||||
|  |         FURI_LOG_D(TAG, "%u ", batch_size); | ||||||
|  | #endif         | ||||||
|         if (len == 0) |         if (len == 0) | ||||||
|             break; |             break; | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamRx); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamRx); | ||||||
| @ -211,6 +221,10 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo | |||||||
|         buffer += len; |         buffer += len; | ||||||
|         rx_cnt += len; |         rx_cnt += len; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "rx %u end", size); | ||||||
|  | #endif     | ||||||
|     return rx_cnt; |     return rx_cnt; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -223,34 +237,40 @@ void furi_hal_vcp_tx(const uint8_t* buffer, size_t size) { | |||||||
|     furi_assert(vcp); |     furi_assert(vcp); | ||||||
|     furi_assert(buffer); |     furi_assert(buffer); | ||||||
| 
 | 
 | ||||||
|     while (size > 0) { | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "tx %u start", size); | ||||||
|  | #endif     | ||||||
|  | 
 | ||||||
|  |     while (size > 0 && vcp->connected) { | ||||||
|         size_t batch_size = size; |         size_t batch_size = size; | ||||||
|         if (batch_size > VCP_TX_BUF_SIZE) |         if (batch_size > USB_CDC_PKT_LEN) | ||||||
|             batch_size = VCP_TX_BUF_SIZE; |             batch_size = USB_CDC_PKT_LEN; | ||||||
| 
 | 
 | ||||||
|         xStreamBufferSend(vcp->tx_stream, buffer, batch_size, osWaitForever); |         xStreamBufferSend(vcp->tx_stream, buffer, batch_size, osWaitForever); | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamTx); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamTx); | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |         FURI_LOG_D(TAG, "%u ", batch_size); | ||||||
|  | #endif         | ||||||
| 
 | 
 | ||||||
|         size -= batch_size; |         size -= batch_size; | ||||||
|         buffer += batch_size; |         buffer += batch_size; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | #ifdef FURI_HAL_USB_VCP_DEBUG | ||||||
|  |     FURI_LOG_D(TAG, "tx %u end", size); | ||||||
|  | #endif     | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_state_callback(uint8_t state) { | static void vcp_state_callback(void* context, uint8_t state) { | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG |  | ||||||
|     furi_hal_console_puts("VCP State\r\n"); |  | ||||||
| #endif |  | ||||||
|     if (state == 0) { |     if (state == 0) { | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_control_line(uint8_t state) { | static void vcp_on_cdc_control_line(void* context, uint8_t state) { | ||||||
|     // bit 0: DTR state, bit 1: RTS state
 |     // bit 0: DTR state, bit 1: RTS state
 | ||||||
|     bool dtr = state & (1 << 0); |     bool dtr = state & (1 << 0); | ||||||
| #ifdef FURI_HAL_USB_VCP_DEBUG | 
 | ||||||
|     furi_hal_console_puts("VCP CtrlLine\r\n"); |  | ||||||
| #endif |  | ||||||
|     if (dtr == true) { |     if (dtr == true) { | ||||||
|         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtConnect); |         osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtConnect); | ||||||
|     } else { |     } else { | ||||||
| @ -258,12 +278,12 @@ static void vcp_on_cdc_control_line(uint8_t state) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_rx() { | static void vcp_on_cdc_rx(void* context) { | ||||||
|     uint32_t ret = osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtRx); |     uint32_t ret = osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtRx); | ||||||
|     furi_assert((ret & osFlagsError) == 0); |     furi_assert((ret & osFlagsError) == 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vcp_on_cdc_tx_complete() { | static void vcp_on_cdc_tx_complete(void* context) { | ||||||
|     osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtTx); |     osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtTx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -271,4 +291,3 @@ bool furi_hal_vcp_is_connected(void) { | |||||||
|     furi_assert(vcp); |     furi_assert(vcp); | ||||||
|     return vcp->connected; |     return vcp->connected; | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -40,7 +40,7 @@ void furi_hal_init() { | |||||||
| 
 | 
 | ||||||
|     // VCP + USB
 |     // VCP + USB
 | ||||||
|     furi_hal_usb_init(); |     furi_hal_usb_init(); | ||||||
|     furi_hal_usb_set_config(UsbModeVcpSingle); |     furi_hal_usb_set_config(&usb_cdc_single); | ||||||
|     furi_hal_vcp_init(); |     furi_hal_vcp_init(); | ||||||
|     FURI_LOG_I(TAG, "USB OK"); |     FURI_LOG_I(TAG, "USB OK"); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,16 +2,27 @@ | |||||||
| 
 | 
 | ||||||
| #include "usb.h" | #include "usb.h" | ||||||
| 
 | 
 | ||||||
| /** USB device modes */ | typedef struct UsbInterface UsbInterface; | ||||||
| typedef enum { |  | ||||||
|     UsbModeNone, |  | ||||||
|     UsbModeVcpSingle, |  | ||||||
|     UsbModeVcpDual, |  | ||||||
|     UsbModeHid, |  | ||||||
|     UsbModeU2F, |  | ||||||
| 
 | 
 | ||||||
|     UsbModesNum, | struct UsbInterface { | ||||||
| } UsbMode; |     void (*init)(usbd_device *dev, UsbInterface* intf); | ||||||
|  |     void (*deinit)(usbd_device *dev); | ||||||
|  |     void (*wakeup)(usbd_device *dev); | ||||||
|  |     void (*suspend)(usbd_device *dev); | ||||||
|  | 
 | ||||||
|  |     struct usb_device_descriptor* dev_descr; | ||||||
|  | 
 | ||||||
|  |     void* str_manuf_descr; | ||||||
|  |     void* str_prod_descr; | ||||||
|  |     void* str_serial_descr; | ||||||
|  | 
 | ||||||
|  |     void* cfg_descr; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** USB device interface modes */ | ||||||
|  | extern UsbInterface usb_cdc_single; | ||||||
|  | extern UsbInterface usb_cdc_dual; | ||||||
|  | extern UsbInterface usb_hid; | ||||||
| 
 | 
 | ||||||
| /** USB device low-level initialization
 | /** USB device low-level initialization
 | ||||||
|  */ |  */ | ||||||
| @ -21,13 +32,13 @@ void furi_hal_usb_init(); | |||||||
|  * |  * | ||||||
|  * @param      mode new USB device mode |  * @param      mode new USB device mode | ||||||
|  */ |  */ | ||||||
| void furi_hal_usb_set_config(UsbMode mode); | void furi_hal_usb_set_config(UsbInterface* new_if); | ||||||
| 
 | 
 | ||||||
| /** Get USB device configuration
 | /** Get USB device configuration
 | ||||||
|  * |  * | ||||||
|  * @return    current USB device mode |  * @return    current USB device mode | ||||||
|  */ |  */ | ||||||
| UsbMode furi_hal_usb_get_config(); | UsbInterface* furi_hal_usb_get_config(); | ||||||
| 
 | 
 | ||||||
| /** Disable USB device
 | /** Disable USB device
 | ||||||
|  */ |  */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Nikolay Minaylov
						Nikolay Minaylov