diff options
author | SG <who.just.the.doctor@gmail.com> | 2021-09-24 14:56:27 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-24 14:56:27 +0300 |
commit | 1448b9cf669b92d1d1ea1bf0aea4f5034e2d129f (patch) | |
tree | 5c5bbe79d438cc128f3e36a40130090126f5a208 /applications/about | |
parent | 0ff677b1743705c59c2ccd8405ff91273ea7d8fd (diff) |
[FL-1819][FL-1848] About: hw, fw, boot version screens. Misc corrections of the About screens. (#719)
* About: hw, fw, boot version screens
* About: fix comment
* FuriHal: proper ARR in OS tick timer
* GpioTester: all pins on/off option
* Irda: fix release build
* Format sources
Co-authored-by: あく <alleteam@gmail.com>
Diffstat (limited to 'applications/about')
-rw-r--r-- | applications/about/about.c | 230 |
1 files changed, 205 insertions, 25 deletions
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 <furi.h> #include <dialogs/dialogs.h> +#include <gui/gui.h> +#include <gui/view_dispatcher.h> +#include <gui/modules/empty_screen.h> +#include <m-string.h> +#include <furi-hal-version.h> -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"; +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; - const char* second_screen_text = "Flipper Devices Inc\n" - "Suite B #551, 2803\n" - "Philadelphia Pike, Claymont\n" - "DE, USA 19703\n"; + dialog_message_set_icon(message, &I_Certification2_119x30, 4, 9); + result = dialog_message_show(dialogs, message); + dialog_message_set_icon(message, NULL, 0, 0); - const char* third_screen_text = "For all compliance\n" - "certificates please visit\n" - "www.flipp.dev/compliance"; + 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) { 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 |