diff --git a/applications/about/about.c b/applications/about/about.c index 96be75a1..08734592 100644 --- a/applications/about/about.c +++ b/applications/about/about.c @@ -1,45 +1,225 @@ #include #include +#include +#include +#include +#include +#include + +typedef DialogMessageButton (*AboutDialogScreen)(DialogsApp* dialogs, DialogMessage* message); + +static DialogMessageButton product_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + + const char* screen_header = "Product: Flipper Zero\n" + "Model: FZ.1\n"; + const char* screen_text = "FCC ID: 2A2V6-FZ\n" + "IC ID: 27624-FZ"; + + dialog_message_set_header(message, screen_header, 0, 0, AlignLeft, AlignTop); + dialog_message_set_text(message, screen_text, 0, 26, AlignLeft, AlignTop); + result = dialog_message_show(dialogs, message); + dialog_message_set_header(message, NULL, 0, 0, AlignLeft, AlignTop); + dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + + return result; +} + +static DialogMessageButton address_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + + const char* screen_text = "Flipper Devices Inc\n" + "Suite B #551, 2803\n" + "Philadelphia Pike, Claymont\n" + "DE, USA 19703\n"; + + dialog_message_set_text(message, screen_text, 0, 0, AlignLeft, AlignTop); + result = dialog_message_show(dialogs, message); + dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + + return result; +} + +static DialogMessageButton compliance_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + + const char* screen_text = "For all compliance\n" + "certificates please visit\n" + "www.flipp.dev/compliance"; + + dialog_message_set_text(message, screen_text, 0, 0, AlignLeft, AlignTop); + result = dialog_message_show(dialogs, message); + dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + + return result; +} + +static DialogMessageButton icon1_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + + dialog_message_set_icon(message, &I_Certification1_103x23, 12, 12); + result = dialog_message_show(dialogs, message); + dialog_message_set_icon(message, NULL, 0, 0); + + return result; +} + +static DialogMessageButton icon2_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + + dialog_message_set_icon(message, &I_Certification2_119x30, 4, 9); + result = dialog_message_show(dialogs, message); + dialog_message_set_icon(message, NULL, 0, 0); + + return result; +} + +static DialogMessageButton hw_version_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + string_t buffer; + string_init(buffer); + const char* my_name = furi_hal_version_get_name_ptr(); + + string_cat_printf( + buffer, + "%d.F%dB%dC%d %s\n", + furi_hal_version_get_hw_version(), + furi_hal_version_get_hw_target(), + furi_hal_version_get_hw_body(), + furi_hal_version_get_hw_connect(), + my_name ? my_name : "Unknown"); + + dialog_message_set_header(message, "HW Version info:", 0, 0, AlignLeft, AlignTop); + dialog_message_set_text(message, string_get_cstr(buffer), 0, 13, AlignLeft, AlignTop); + result = dialog_message_show(dialogs, message); + dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + dialog_message_set_header(message, NULL, 0, 0, AlignLeft, AlignTop); + string_clear(buffer); + + return result; +} + +static DialogMessageButton fw_version_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + string_t buffer; + string_init(buffer); + const Version* ver = furi_hal_version_get_firmware_version(); + + if(!ver) { + string_cat_printf(buffer, "No info\n"); + } else { + string_cat_printf( + buffer, + "%s [%s]\n%s [%s]\n[%s] %s", + version_get_version(ver), + version_get_builddate(ver), + version_get_githash(ver), + version_get_gitbranchnum(ver), + version_get_target(ver), + version_get_gitbranch(ver)); + } + + dialog_message_set_header(message, "FW Version info:", 0, 0, AlignLeft, AlignTop); + dialog_message_set_text(message, string_get_cstr(buffer), 0, 13, AlignLeft, AlignTop); + result = dialog_message_show(dialogs, message); + dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + dialog_message_set_header(message, NULL, 0, 0, AlignLeft, AlignTop); + string_clear(buffer); + + return result; +} + +static DialogMessageButton boot_version_screen(DialogsApp* dialogs, DialogMessage* message) { + DialogMessageButton result; + string_t buffer; + string_init(buffer); + const Version* ver = furi_hal_version_get_boot_version(); + + if(!ver) { + string_cat_printf(buffer, "No info\n"); + } else { + string_cat_printf( + buffer, + "%s [%s]\n%s [%s]\n[%s] %s", + version_get_version(ver), + version_get_builddate(ver), + version_get_githash(ver), + version_get_gitbranchnum(ver), + version_get_target(ver), + version_get_gitbranch(ver)); + } + + dialog_message_set_header(message, "Boot Version info:", 0, 0, AlignLeft, AlignTop); + dialog_message_set_text(message, string_get_cstr(buffer), 0, 13, AlignLeft, AlignTop); + result = dialog_message_show(dialogs, message); + dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + dialog_message_set_header(message, NULL, 0, 0, AlignLeft, AlignTop); + string_clear(buffer); + + return result; +} + +const AboutDialogScreen about_screens[] = { + product_screen, + compliance_screen, + address_screen, + icon1_screen, + icon2_screen, + hw_version_screen, + fw_version_screen, + boot_version_screen}; + +const size_t about_screens_count = sizeof(about_screens) / sizeof(AboutDialogScreen); int32_t about_settings_app(void* p) { - const char* first_screen_text = "Product: Flipper Zero\n" - "Model: FZ.1\n" - "FCC ID: 2A2V6-FZIC\n" - "ID: 27624-FZ"; - - const char* second_screen_text = "Flipper Devices Inc\n" - "Suite B #551, 2803\n" - "Philadelphia Pike, Claymont\n" - "DE, USA 19703\n"; - - const char* third_screen_text = "For all compliance\n" - "certificates please visit\n" - "www.flipp.dev/compliance"; - DialogsApp* dialogs = furi_record_open("dialogs"); DialogMessage* message = dialog_message_alloc(); - do { - dialog_message_set_buttons(message, NULL, NULL, "Next"); + Gui* gui = furi_record_open("gui"); + ViewDispatcher* view_dispatcher = view_dispatcher_alloc(); + EmptyScreen* empty_screen = empty_screen_alloc(); + const uint32_t empty_screen_index = 0; - dialog_message_set_text(message, first_screen_text, 0, 0, AlignLeft, AlignTop); - if(dialog_message_show(dialogs, message) != DialogMessageButtonRight) break; + size_t screen_index = 0; + DialogMessageButton screen_result; - dialog_message_set_text(message, second_screen_text, 0, 0, AlignLeft, AlignTop); - if(dialog_message_show(dialogs, message) != DialogMessageButtonRight) break; + // draw empty screen to prevent menu flickering + view_dispatcher_add_view( + view_dispatcher, empty_screen_index, empty_screen_get_view(empty_screen)); + view_dispatcher_attach_to_gui(view_dispatcher, gui, ViewDispatcherTypeFullscreen); + view_dispatcher_switch_to_view(view_dispatcher, empty_screen_index); - dialog_message_set_text(message, third_screen_text, 0, 0, AlignLeft, AlignTop); - if(dialog_message_show(dialogs, message) != DialogMessageButtonRight) break; + while(1) { + if(screen_index >= about_screens_count - 1) { + dialog_message_set_buttons(message, "Back", NULL, NULL); + } else { + dialog_message_set_buttons(message, "Back", NULL, "Next"); + } - dialog_message_set_text(message, NULL, 0, 0, AlignLeft, AlignTop); + screen_result = about_screens[screen_index](dialogs, message); - dialog_message_set_icon(message, &I_Certification_128x64, 0, 0); - dialog_message_set_buttons(message, NULL, NULL, NULL); - dialog_message_show(dialogs, message); - } while(false); + if(screen_result == DialogMessageButtonLeft) { + if(screen_index <= 0) { + break; + } else { + screen_index--; + } + } else if(screen_result == DialogMessageButtonRight) { + if(screen_index < about_screens_count) { + screen_index++; + } + } else if(screen_result == DialogMessageButtonBack) { + break; + } + } dialog_message_free(message); furi_record_close("dialogs"); + view_dispatcher_remove_view(view_dispatcher, empty_screen_index); + view_dispatcher_free(view_dispatcher); + empty_screen_free(empty_screen); + furi_record_close("gui"); + return 0; } \ No newline at end of file diff --git a/applications/gpio-tester/gpio-tester.c b/applications/gpio-tester/gpio-tester.c index c088a195..e994ad73 100644 --- a/applications/gpio-tester/gpio-tester.c +++ b/applications/gpio-tester/gpio-tester.c @@ -18,6 +18,7 @@ static const GpioItem GPIO_PINS[] = { {"1.7: PC3", &gpio_ext_pc3}, {"2.7: PC1", &gpio_ext_pc1}, {"2.8: PC0", &gpio_ext_pc0}, + {"*.*: ALL", NULL}, }; static const size_t GPIO_PINS_COUNT = sizeof(GPIO_PINS) / sizeof(GPIO_PINS[0]); @@ -49,8 +50,20 @@ static void gpio_test_input_callback(InputEvent* input_event, void* ctx) { static void gpio_test_configure_pins(GpioMode mode) { for(size_t i = 0; i < GPIO_PINS_COUNT; i++) { + if(!GPIO_PINS[i].pin) continue; hal_gpio_write(GPIO_PINS[i].pin, false); - hal_gpio_init(GPIO_PINS[i].pin, mode, GpioPullNo, GpioSpeedLow); + hal_gpio_init(GPIO_PINS[i].pin, mode, GpioPullNo, GpioSpeedVeryHigh); + } +} + +static void gpio_test_set_pin(uint8_t index, bool level) { + if(GPIO_PINS[index].pin) { + hal_gpio_write(GPIO_PINS[index].pin, level); + } else { + for(size_t i = 0; i < GPIO_PINS_COUNT; i++) { + if(!GPIO_PINS[i].pin) continue; + hal_gpio_write(GPIO_PINS[i].pin, level); + } } } @@ -117,10 +130,10 @@ int32_t gpio_test_app(void* p) { } else { if(event.key == InputKeyOk) { if(event.type == InputTypePress) { - hal_gpio_write(GPIO_PINS[gpio_test->gpio_index].pin, true); + gpio_test_set_pin(gpio_test->gpio_index, true); notification_message(gpio_test->notification, &sequence_set_green_255); } else if(event.type == InputTypeRelease) { - hal_gpio_write(GPIO_PINS[gpio_test->gpio_index].pin, false); + gpio_test_set_pin(gpio_test->gpio_index, false); notification_message(gpio_test->notification, &sequence_reset_green); } } diff --git a/applications/gui/modules/empty_screen.c b/applications/gui/modules/empty_screen.c new file mode 100644 index 00000000..a887786d --- /dev/null +++ b/applications/gui/modules/empty_screen.c @@ -0,0 +1,34 @@ +#include "empty_screen.h" +#include + +struct EmptyScreen { + View* view; +}; + +static void empty_screen_view_draw_callback(Canvas* canvas, void* _model) { + canvas_clear(canvas); +} + +static bool empty_screen_view_input_callback(InputEvent* event, void* context) { + return false; +} + +EmptyScreen* empty_screen_alloc() { + EmptyScreen* empty_screen = furi_alloc(sizeof(EmptyScreen)); + empty_screen->view = view_alloc(); + view_set_context(empty_screen->view, empty_screen); + view_set_draw_callback(empty_screen->view, empty_screen_view_draw_callback); + view_set_input_callback(empty_screen->view, empty_screen_view_input_callback); + return empty_screen; +} + +void empty_screen_free(EmptyScreen* empty_screen) { + furi_assert(empty_screen); + view_free(empty_screen->view); + free(empty_screen); +} + +View* empty_screen_get_view(EmptyScreen* empty_screen) { + furi_assert(empty_screen); + return empty_screen->view; +} \ No newline at end of file diff --git a/applications/gui/modules/empty_screen.h b/applications/gui/modules/empty_screen.h new file mode 100644 index 00000000..a0b56219 --- /dev/null +++ b/applications/gui/modules/empty_screen.h @@ -0,0 +1,29 @@ +#pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Empty screen anonymous structure */ +typedef struct EmptyScreen EmptyScreen; + +/* Allocate and initialize empty screen + * This empty screen used to ask simple questions like Yes/ + */ +EmptyScreen* empty_screen_alloc(); + +/* Deinitialize and free empty screen + * @param empty_screen - Empty screen instance + */ +void empty_screen_free(EmptyScreen* empty_screen); + +/* Get empty screen view + * @param empty_screen - Empty screen instance + * @return View instance that can be used for embedding + */ +View* empty_screen_get_view(EmptyScreen* empty_screen); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/assets/compiled/assets_icons.c b/assets/compiled/assets_icons.c index b759a421..60397cad 100644 --- a/assets/compiled/assets_icons.c +++ b/assets/compiled/assets_icons.c @@ -2,8 +2,11 @@ #include -const uint8_t _I_Certification_128x64_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF1,0x8F,0x1F,0x00,0xE0,0x01,0x00,0x0F,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0xF8,0xF1,0x8F,0x1F,0x00,0xF8,0x01,0xC0,0x0F,0xC0,0x7F,0xF8,0x3F,0x00,0x00,0x00,0xF8,0x71,0x8E,0x1F,0x00,0xFE,0x01,0xF0,0x0F,0xC0,0x3F,0x1E,0xF0,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0x00,0x3F,0x00,0xF8,0x01,0xC0,0x00,0x07,0xC0,0x01,0x00,0x00,0x38,0x70,0x8E,0x03,0x80,0x0F,0x00,0x7C,0x00,0xC0,0x80,0x03,0x80,0x03,0x00,0x00,0x38,0x70,0x8E,0x03,0xC0,0x03,0x00,0x1E,0x00,0xC0,0x80,0xC1,0x07,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xC0,0x01,0x00,0x0E,0x00,0xC0,0xC0,0xF0,0x1F,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xE0,0x01,0x00,0x0F,0x00,0xC0,0xC0,0x38,0x38,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xE0,0x00,0x00,0x07,0x00,0xC0,0x60,0x18,0x10,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xE0,0x00,0x00,0x07,0x00,0xC0,0x60,0x0C,0x00,0x00,0x00,0x00,0xF8,0xF1,0x8F,0x03,0xE0,0x00,0x00,0xFF,0x03,0xC0,0x7F,0x0C,0x00,0x00,0x00,0x00,0xF8,0xF1,0x8F,0x03,0xE0,0x00,0x00,0xFF,0x03,0xC0,0x7F,0x0C,0x00,0x00,0x00,0x00,0xF8,0xF1,0x8F,0x03,0xE0,0x00,0x00,0xFF,0x03,0xC0,0x60,0x0C,0x00,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xE0,0x00,0x00,0x07,0x00,0xC0,0x60,0x0C,0x00,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xE0,0x00,0x00,0x07,0x00,0xC0,0x60,0x18,0x10,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xE0,0x01,0x00,0x0F,0x00,0xC0,0xC0,0x38,0x38,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xC0,0x01,0x00,0x0E,0x00,0xC0,0xC0,0xF0,0x1F,0x00,0x00,0x00,0x38,0x70,0x8E,0x03,0xC0,0x03,0x00,0x1E,0x00,0xC0,0x80,0xC1,0x07,0x03,0x00,0x00,0x38,0x70,0x8E,0x03,0x80,0x0F,0x00,0x7C,0x00,0xC0,0x80,0x03,0x80,0x03,0x00,0x00,0x38,0x70,0x8E,0x03,0x00,0x3F,0x00,0xF8,0x01,0xC0,0x00,0x07,0xC0,0x01,0x00,0x00,0xF8,0x71,0x8E,0x1F,0x00,0xFE,0x01,0xF0,0x0F,0xC0,0x00,0x1E,0xF0,0x00,0x00,0x00,0xF8,0x71,0x8E,0x1F,0x00,0xF8,0x01,0xC0,0x0F,0x40,0x00,0xF8,0x3F,0x00,0x00,0x00,0xF8,0x71,0x8E,0x1F,0x00,0xE0,0x01,0x00,0x0F,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xFC,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x03,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xF0,0x07,0x00,0xC0,0x00,0x60,0x00,0x18,0x98,0xC1,0x01,0x00,0xF0,0x01,0x00,0x00,0x0C,0x18,0x00,0x80,0xFF,0x3F,0x00,0x18,0x98,0xE1,0x00,0x00,0xF8,0x03,0x00,0x00,0x03,0x60,0x00,0x00,0x01,0x10,0x00,0x18,0x98,0x79,0x00,0x00,0x1C,0x07,0x00,0x80,0x00,0x80,0x00,0x00,0x03,0x18,0x00,0x18,0x98,0x1D,0x00,0x00,0x0C,0x06,0x00,0x40,0x00,0x00,0x01,0x00,0x05,0x14,0x00,0x18,0x98,0x0F,0x00,0x00,0x0E,0x0E,0x00,0x40,0x00,0x00,0x01,0x00,0xE9,0x13,0x00,0x18,0x98,0x0F,0x00,0x00,0x07,0x1C,0x00,0x20,0xC0,0x00,0x02,0x00,0x11,0x11,0x00,0x18,0x98,0x1D,0x00,0x80,0xF3,0x39,0x00,0x20,0xB8,0x00,0x02,0x00,0xA2,0x08,0x00,0x18,0x98,0x79,0x00,0x80,0x09,0x32,0x00,0x10,0x87,0xC0,0x07,0x00,0x42,0x08,0x00,0xF8,0x9F,0xE1,0x00,0xC0,0x05,0x70,0x00,0xF0,0x80,0x38,0x00,0x00,0xA2,0x08,0x00,0xF0,0x8F,0xC1,0x01,0xE0,0x02,0xE8,0x00,0x10,0x80,0x07,0x00,0x00,0x12,0x09,0x00,0x00,0x00,0x00,0x00,0x70,0x01,0xD4,0x01,0x10,0x00,0x00,0x00,0x00,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x30,0x11,0x92,0x01,0x10,0xFE,0x3F,0x00,0x00,0x04,0x04,0x00,0xF0,0x1F,0xFF,0x00,0x38,0x11,0x91,0x03,0x10,0xFE,0x3F,0x00,0x00,0x06,0x0C,0x00,0xF8,0x9F,0xFF,0x01,0x1C,0xA1,0x10,0x07,0x10,0x00,0x00,0x00,0x00,0x05,0x1E,0x00,0x18,0x80,0x81,0x01,0x0E,0x61,0x10,0x0E,0x20,0xFE,0x3F,0x02,0x80,0x04,0x31,0x00,0x18,0x80,0x81,0x01,0x06,0x02,0x08,0x0C,0x20,0xFE,0x3F,0x02,0x40,0x04,0x55,0x00,0x18,0x80,0x81,0x01,0x07,0x04,0x04,0x1C,0x40,0xC0,0x01,0x01,0x20,0xF8,0x91,0x00,0x18,0x80,0xFF,0x81,0x03,0x08,0x02,0x38,0x40,0xC0,0x01,0x01,0x10,0x00,0x0E,0x01,0x18,0x80,0xFF,0x81,0x01,0xF0,0x01,0x30,0x80,0xC0,0x81,0x00,0x08,0x00,0x00,0x02,0x18,0x80,0x81,0x81,0x03,0x00,0x00,0x38,0x00,0x03,0x60,0x00,0x00,0x00,0x00,0x00,0xF8,0x9F,0x81,0x01,0xFF,0xFF,0xFF,0x1F,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0xF0,0x9F,0x81,0x01,0xFE,0xFF,0xFF,0x0F,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; -const uint8_t *_I_Certification_128x64[] = {_I_Certification_128x64_0}; +const uint8_t _I_Certification1_103x23_0[] = {0x3F,0xFE,0xF1,0x03,0x00,0x3C,0x00,0xE0,0x01,0x00,0x00,0xFC,0x01,0x3F,0xFE,0xF1,0x03,0x00,0x3F,0x00,0xF8,0x01,0xF8,0x0F,0xFF,0x07,0x3F,0xCE,0xF1,0x03,0xC0,0x3F,0x00,0xFE,0x01,0xF8,0xC7,0x03,0x1E,0x07,0xCE,0x71,0x00,0xE0,0x07,0x00,0x3F,0x00,0x18,0xE0,0x00,0x38,0x07,0xCE,0x71,0x00,0xF0,0x01,0x80,0x0F,0x00,0x18,0x70,0x00,0x70,0x07,0xCE,0x71,0x00,0x78,0x00,0xC0,0x03,0x00,0x18,0x30,0xF8,0x00,0x07,0xCE,0x71,0x00,0x38,0x00,0xC0,0x01,0x00,0x18,0x18,0xFE,0x03,0x07,0xCE,0x71,0x00,0x3C,0x00,0xE0,0x01,0x00,0x18,0x18,0x07,0x07,0x07,0xCE,0x71,0x00,0x1C,0x00,0xE0,0x00,0x00,0x18,0x0C,0x03,0x02,0x07,0xCE,0x71,0x00,0x1C,0x00,0xE0,0x00,0x00,0x18,0x8C,0x01,0x00,0x3F,0xFE,0x71,0x00,0x1C,0x00,0xE0,0x7F,0x00,0xF8,0x8F,0x01,0x00,0x3F,0xFE,0x71,0x00,0x1C,0x00,0xE0,0x7F,0x00,0xF8,0x8F,0x01,0x00,0x3F,0xFE,0x71,0x00,0x1C,0x00,0xE0,0x7F,0x00,0x18,0x8C,0x01,0x00,0x07,0xCE,0x71,0x00,0x1C,0x00,0xE0,0x00,0x00,0x18,0x8C,0x01,0x00,0x07,0xCE,0x71,0x00,0x1C,0x00,0xE0,0x00,0x00,0x18,0x0C,0x03,0x02,0x07,0xCE,0x71,0x00,0x3C,0x00,0xE0,0x01,0x00,0x18,0x18,0x07,0x07,0x07,0xCE,0x71,0x00,0x38,0x00,0xC0,0x01,0x00,0x18,0x18,0xFE,0x03,0x07,0xCE,0x71,0x00,0x78,0x00,0xC0,0x03,0x00,0x18,0x30,0xF8,0x60,0x07,0xCE,0x71,0x00,0xF0,0x01,0x80,0x0F,0x00,0x18,0x70,0x00,0x70,0x07,0xCE,0x71,0x00,0xE0,0x07,0x00,0x3F,0x00,0x18,0xE0,0x00,0x38,0x3F,0xCE,0xF1,0x03,0xC0,0x3F,0x00,0xFE,0x01,0x18,0xC0,0x03,0x1E,0x3F,0xCE,0xF1,0x03,0x00,0x3F,0x00,0xF8,0x01,0x08,0x00,0xFF,0x07,0x3F,0xCE,0xF1,0x03,0x00,0x3C,0x00,0xE0,0x01,0x00,0x00,0xFC,0x01,}; +const uint8_t *_I_Certification1_103x23[] = {_I_Certification1_103x23_0}; + +const uint8_t _I_Certification2_119x30_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0xFF,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xFE,0x00,0x00,0x18,0x00,0x0C,0x03,0x33,0x38,0x00,0x00,0x3E,0x00,0x00,0x80,0x01,0x03,0x00,0xF0,0xFF,0x07,0x03,0x33,0x1C,0x00,0x00,0x7F,0x00,0x00,0x60,0x00,0x0C,0x00,0x20,0x00,0x02,0x03,0x33,0x0F,0x00,0x80,0xE3,0x00,0x00,0x10,0x00,0x10,0x00,0x60,0x00,0x03,0x03,0xB3,0x03,0x00,0x80,0xC1,0x00,0x00,0x08,0x00,0x20,0x00,0xA0,0x80,0x02,0x03,0xF3,0x01,0x00,0xC0,0xC1,0x01,0x00,0x08,0x00,0x20,0x00,0x20,0x7D,0x02,0x03,0xF3,0x01,0x00,0xE0,0x80,0x03,0x00,0x04,0x18,0x40,0x00,0x20,0x22,0x02,0x03,0xB3,0x03,0x00,0x70,0x3E,0x07,0x00,0x04,0x17,0x40,0x00,0x40,0x14,0x01,0x03,0x33,0x0F,0x00,0x30,0x41,0x06,0x00,0xE2,0x10,0xF8,0x00,0x40,0x08,0x01,0xFF,0x33,0x1C,0x00,0xB8,0x00,0x0E,0x00,0x1E,0x10,0x07,0x00,0x40,0x14,0x01,0xFE,0x31,0x38,0x00,0x5C,0x00,0x1D,0x00,0x02,0xF0,0x00,0x00,0x40,0x22,0x01,0x00,0x00,0x00,0x00,0x2E,0x80,0x3A,0x00,0x02,0x00,0x00,0x00,0x40,0x41,0x01,0x00,0x00,0x00,0x00,0x26,0x42,0x32,0x00,0xC2,0xFF,0x07,0x00,0x80,0x80,0x00,0xFE,0xE3,0x1F,0x00,0x27,0x22,0x72,0x00,0xC2,0xFF,0x07,0x00,0xC0,0x80,0x01,0xFF,0xF3,0x3F,0x80,0x23,0x14,0xE2,0x00,0x02,0x00,0x00,0x00,0xA0,0xC0,0x03,0x03,0x30,0x30,0xC0,0x21,0x0C,0xC2,0x01,0xC4,0xFF,0x47,0x00,0x90,0x20,0x06,0x03,0x30,0x30,0xC0,0x40,0x00,0x81,0x01,0xC4,0xFF,0x47,0x00,0x88,0xA0,0x0A,0x03,0x30,0x30,0xE0,0x80,0x80,0x80,0x03,0x08,0x38,0x20,0x00,0x04,0x3F,0x12,0x03,0xF0,0x3F,0x70,0x00,0x41,0x00,0x07,0x08,0x38,0x20,0x00,0x02,0xC0,0x21,0x03,0xF0,0x3F,0x30,0x00,0x3E,0x00,0x06,0x10,0x38,0x10,0x00,0x01,0x00,0x40,0x03,0x30,0x30,0x70,0x00,0x00,0x00,0x07,0x60,0x00,0x0C,0x00,0x00,0x00,0x00,0xFF,0x33,0x30,0xE0,0xFF,0xFF,0xFF,0x03,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0xFE,0x33,0x30,0xC0,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,}; +const uint8_t *_I_Certification2_119x30[] = {_I_Certification2_119x30_0}; const uint8_t _A_WatchingTV_128x64_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x40,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x11,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x60,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x11,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x09,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x20,0x0A,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x20,0x11,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x40,0x00,0xA0,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x50,0x40,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x30,0x80,0x7F,0xE0,0x00,0x00,0x80,0x03,0x80,0x0F,0x20,0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x80,0x9F,0x00,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x18,0x00,0x00,0x80,0x00,0x00,0x80,0x03,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x40,0x00,0x00,0x80,0x03,0xE0,0x3F,0x60,0x00,0x00,0x00,0x00,0x08,0x24,0x00,0x00,0x40,0x00,0x00,0xC0,0x01,0x20,0x67,0x40,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x47,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0xC0,0x53,0xC1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x03,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0x00,0xF0,0x00,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0xF8,0x0F,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD0,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xA8,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x78,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0x0C,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0x81,0x01,0x1E,0x60,0x00,0x06,0xD4,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0x20,0x00,0x03,0x00,0x10,0x00,0x03,0xA8,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x20,0x00,0x0F,0x00,0x2E,0x80,0x01,0x50,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x05,0x40,0x01,0xA8,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x02,0xA0,0x00,0x50,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x01,0xD0,0x00,0xE8,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0x40,0xAA,0x02,0x00,0xAA,0x00,0x18,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x00,0x00,0x00,0x55,0x00,0x04,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0x80,0x6A,0x00,0x02,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x40,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA0,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD0,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0x00,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x40,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x54,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0x80,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x0D,0x00,0x00,0x50,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0x2A,0x00,0x80,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,}; const uint8_t _A_WatchingTV_128x64_1[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xA0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0xE0,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x55,0x75,0x00,0x00,0x00,0x00,0x02,0x00,0xA0,0x10,0x00,0x00,0x00,0x00,0x00,0xA0,0xAA,0xAA,0x00,0x00,0x00,0x00,0x04,0x00,0x50,0x09,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x50,0x01,0x00,0x00,0x00,0x08,0x00,0xB0,0x05,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0xA0,0x02,0x00,0x00,0x00,0x10,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x05,0x00,0x00,0x00,0x10,0x00,0xB0,0x07,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x0A,0x00,0x00,0x00,0x20,0x00,0x50,0x09,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1A,0x00,0x00,0x00,0x80,0x00,0x58,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x00,0x28,0xC0,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x01,0x38,0x00,0x00,0x83,0x03,0x00,0x80,0x03,0x80,0x0F,0x30,0x00,0x00,0x00,0x00,0x02,0x18,0x00,0x00,0xFC,0x02,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x18,0x00,0x00,0x00,0x02,0x00,0x80,0x03,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x00,0x01,0x00,0x80,0x03,0xE0,0xBF,0x60,0x00,0x00,0x00,0x00,0x08,0x24,0x00,0x00,0x80,0x00,0x00,0xC0,0x01,0xE0,0x67,0x51,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x40,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x47,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0xC0,0x53,0xD1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0xF0,0xFF,0x03,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD4,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xAA,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x7A,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0xAD,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0xD5,0x01,0x1E,0x60,0x80,0x56,0xD5,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0xA0,0xAA,0x03,0x00,0x50,0x40,0x83,0xAA,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x60,0x40,0x0F,0x00,0x2E,0xA0,0x01,0x55,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x15,0x50,0x01,0xAA,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x0A,0xA8,0x00,0x55,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x05,0xD5,0x00,0xEA,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0xC0,0xAA,0xAA,0x82,0xAA,0x00,0x1D,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x55,0x05,0x40,0x55,0x00,0x06,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0xA0,0x6A,0x00,0x03,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x50,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA8,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD5,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x50,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xAA,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x40,0x55,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0xA8,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x1D,0x00,0x40,0x55,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,}; @@ -453,7 +456,8 @@ const uint8_t *_I_iButtonDolphinVerySuccess_108x52[] = {_I_iButtonDolphinVerySuc const uint8_t _I_iButtonKey_49x44_0[] = {0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x80,0x01,0x00,0x01,0x00,0x00,0x00,0x60,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0x00,0x00,0x0C,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0xC0,0x00,0x00,0x08,0x00,0x00,0x00,0x30,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0xC0,0x00,0x00,0x00,0xF0,0x0F,0x00,0x20,0x00,0x00,0x00,0x0C,0x30,0x00,0x10,0x00,0x00,0x00,0x03,0x40,0x00,0x0C,0x00,0x00,0x80,0x00,0x80,0x00,0x02,0x00,0x00,0x40,0x00,0x80,0x01,0x01,0x00,0x00,0x20,0x00,0x80,0x83,0x00,0x00,0x00,0x10,0x00,0x80,0x47,0x00,0x00,0x00,0x08,0x00,0x80,0x4F,0x00,0x00,0x00,0x04,0x00,0xC0,0x4F,0x00,0x00,0x00,0x04,0x00,0x40,0x4F,0x00,0x00,0x00,0x02,0x00,0xC0,0x4E,0x00,0x00,0x00,0x02,0x00,0x60,0x45,0x00,0x00,0x00,0x01,0x00,0xA0,0x46,0x00,0x00,0x00,0x01,0x00,0x30,0x45,0x00,0x00,0x00,0x01,0x00,0x98,0x42,0x00,0x00,0x00,0x01,0x00,0x0C,0x22,0x00,0x00,0x00,0x01,0x00,0x02,0x21,0x00,0x00,0x00,0x01,0x00,0x81,0x11,0x00,0x00,0x00,0x03,0xC0,0xC0,0x10,0x00,0x00,0x00,0x06,0x78,0x40,0x08,0x00,0x00,0x00,0xFC,0x0F,0x20,0x04,0x00,0x00,0x00,0x78,0x55,0x11,0x02,0x00,0x00,0x00,0xF0,0x0A,0x0E,0x01,0x00,0x00,0x00,0xE0,0xD5,0x83,0x00,0x00,0x00,0x00,0xC0,0x7F,0x40,0x00,0x00,0x00,0x00,0x80,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,}; const uint8_t *_I_iButtonKey_49x44[] = {_I_iButtonKey_49x44_0}; -const Icon I_Certification_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_Certification_128x64}; +const Icon I_Certification1_103x23 = {.width=103,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Certification1_103x23}; +const Icon I_Certification2_119x30 = {.width=119,.height=30,.frame_count=1,.frame_rate=0,.frames=_I_Certification2_119x30}; const Icon A_WatchingTV_128x64 = {.width=128,.height=64,.frame_count=5,.frame_rate=10,.frames=_A_WatchingTV_128x64}; const Icon A_Wink_128x64 = {.width=128,.height=64,.frame_count=9,.frame_rate=10,.frames=_A_Wink_128x64}; const Icon I_125_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_125_10px}; diff --git a/assets/compiled/assets_icons.h b/assets/compiled/assets_icons.h index ef7c619e..84a05900 100644 --- a/assets/compiled/assets_icons.h +++ b/assets/compiled/assets_icons.h @@ -1,7 +1,8 @@ #pragma once #include -extern const Icon I_Certification_128x64; +extern const Icon I_Certification1_103x23; +extern const Icon I_Certification2_119x30; extern const Icon A_WatchingTV_128x64; extern const Icon A_Wink_128x64; extern const Icon I_125_10px; diff --git a/assets/icons/About/Certification1_103x23.png b/assets/icons/About/Certification1_103x23.png new file mode 100644 index 00000000..4713dc35 Binary files /dev/null and b/assets/icons/About/Certification1_103x23.png differ diff --git a/assets/icons/About/Certification2_119x30.png b/assets/icons/About/Certification2_119x30.png new file mode 100644 index 00000000..8b01b0d1 Binary files /dev/null and b/assets/icons/About/Certification2_119x30.png differ diff --git a/assets/icons/About/Certification_128x64.png b/assets/icons/About/Certification_128x64.png deleted file mode 100644 index 1dbb183c..00000000 Binary files a/assets/icons/About/Certification_128x64.png and /dev/null differ diff --git a/firmware/targets/f6/furi-hal/furi-hal-os-timer.h b/firmware/targets/f6/furi-hal/furi-hal-os-timer.h index f210b539..8b7752e8 100644 --- a/firmware/targets/f6/furi-hal/furi-hal-os-timer.h +++ b/firmware/targets/f6/furi-hal/furi-hal-os-timer.h @@ -20,6 +20,7 @@ static inline void furi_hal_os_timer_init() { } static inline void furi_hal_os_timer_continuous(uint32_t count) { + count--; // Enable timer LL_LPTIM_Enable(FURI_HAL_OS_TIMER); while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER)); @@ -33,6 +34,7 @@ static inline void furi_hal_os_timer_continuous(uint32_t count) { } static inline void furi_hal_os_timer_single(uint32_t count) { + count--; // Enable timer LL_LPTIM_Enable(FURI_HAL_OS_TIMER); while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER)); diff --git a/firmware/targets/f7/furi-hal/furi-hal-os-timer.h b/firmware/targets/f7/furi-hal/furi-hal-os-timer.h index f210b539..8b7752e8 100644 --- a/firmware/targets/f7/furi-hal/furi-hal-os-timer.h +++ b/firmware/targets/f7/furi-hal/furi-hal-os-timer.h @@ -20,6 +20,7 @@ static inline void furi_hal_os_timer_init() { } static inline void furi_hal_os_timer_continuous(uint32_t count) { + count--; // Enable timer LL_LPTIM_Enable(FURI_HAL_OS_TIMER); while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER)); @@ -33,6 +34,7 @@ static inline void furi_hal_os_timer_continuous(uint32_t count) { } static inline void furi_hal_os_timer_single(uint32_t count) { + count--; // Enable timer LL_LPTIM_Enable(FURI_HAL_OS_TIMER); while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER)); diff --git a/lib/irda/encoder_decoder/sirc/irda_encoder_sirc.c b/lib/irda/encoder_decoder/sirc/irda_encoder_sirc.c index ca98e830..d1d3b0de 100644 --- a/lib/irda/encoder_decoder/sirc/irda_encoder_sirc.c +++ b/lib/irda/encoder_decoder/sirc/irda_encoder_sirc.c @@ -36,8 +36,7 @@ void irda_encoder_sirc_reset(void* encoder_ptr, const IrdaMessage* message) { IrdaStatus irda_encoder_sirc_encode_repeat(IrdaCommonEncoder* encoder, uint32_t* duration, bool* level) { furi_assert(encoder); - uint32_t timings_in_message = 1 + 2 + encoder->bits_to_encode * 2 - 1; - furi_assert(encoder->timings_encoded == timings_in_message); + furi_assert(encoder->timings_encoded == (1 + 2 + encoder->bits_to_encode * 2 - 1)); furi_assert(encoder->timings_sum < IRDA_SIRC_REPEAT_PERIOD); *duration = IRDA_SIRC_REPEAT_PERIOD - encoder->timings_sum;