From 0f7a65dceb2aee5ab40f6d338fb24eef72165b4c Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Sun, 19 Feb 2023 23:22:58 +0000 Subject: [PATCH 01/12] Name changer in xfw app misc + small app fixes --- .../services/namechangersrv/namechangersrv.c | 9 +-- .../services/namechangersrv/namechangersrv.h | 1 + .../scenes/xtreme_app_scene_config.h | 1 + .../xtreme_app/scenes/xtreme_app_scene_misc.c | 32 +++++++++- .../scenes/xtreme_app_scene_misc_rename.c | 54 ++++++++++++++++ applications/settings/xtreme_app/xtreme_app.c | 63 ++++++++++++++----- applications/settings/xtreme_app/xtreme_app.h | 16 +++-- 7 files changed, 147 insertions(+), 29 deletions(-) create mode 100644 applications/settings/xtreme_app/scenes/xtreme_app_scene_misc_rename.c diff --git a/applications/services/namechangersrv/namechangersrv.c b/applications/services/namechangersrv/namechangersrv.c index e62b39c01..f866fa41a 100644 --- a/applications/services/namechangersrv/namechangersrv.c +++ b/applications/services/namechangersrv/namechangersrv.c @@ -13,8 +13,6 @@ void namechanger_on_system_start() { FuriString* NAMEHEADER; NAMEHEADER = furi_string_alloc_set("Flipper Name File"); - FuriString* filepath; - filepath = furi_string_alloc_set("/ext/dolphin/name.txt"); bool result = false; @@ -22,7 +20,7 @@ void namechanger_on_system_start() { data = furi_string_alloc(); do { - if(!flipper_format_file_open_existing(file, furi_string_get_cstr(filepath))) { + if(!flipper_format_file_open_existing(file, NAMECHANGER_PATH)) { break; } @@ -59,7 +57,7 @@ void namechanger_on_system_start() { do { // Open file for write - if(!flipper_format_file_open_always(file, furi_string_get_cstr(filepath))) { + if(!flipper_format_file_open_always(file, NAMECHANGER_PATH)) { break; } @@ -109,7 +107,7 @@ void namechanger_on_system_start() { do { // Open file for write - if(!flipper_format_file_open_always(file, furi_string_get_cstr(filepath))) { + if(!flipper_format_file_open_always(file, NAMECHANGER_PATH)) { break; } @@ -161,7 +159,6 @@ void namechanger_on_system_start() { furi_string_free(data); - furi_string_free(filepath); furi_record_close(RECORD_STORAGE); } } diff --git a/applications/services/namechangersrv/namechangersrv.h b/applications/services/namechangersrv/namechangersrv.h index c5014355b..d440b19bc 100644 --- a/applications/services/namechangersrv/namechangersrv.h +++ b/applications/services/namechangersrv/namechangersrv.h @@ -5,5 +5,6 @@ #define NAMECHANGER_TEXT_STORE_SIZE 9 #define NAMECHANGER_HEADER "Flipper Name File" +#define NAMECHANGER_PATH EXT_PATH("dolphin/name.txt") #define TAG "NameChangerSRV" diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/settings/xtreme_app/scenes/xtreme_app_scene_config.h index 36d587b02..1a7871afc 100644 --- a/applications/settings/xtreme_app/scenes/xtreme_app_scene_config.h +++ b/applications/settings/xtreme_app/scenes/xtreme_app_scene_config.h @@ -4,3 +4,4 @@ ADD_SCENE(xtreme_app, statusbar, Statusbar) ADD_SCENE(xtreme_app, protocols, Protocols) ADD_SCENE(xtreme_app, dolphin, Dolphin) ADD_SCENE(xtreme_app, misc, Misc) +ADD_SCENE(xtreme_app, misc_rename, MiscRename) diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc.c index 13a703879..cdd3c1622 100644 --- a/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -1,5 +1,15 @@ #include "../xtreme_app.h" +enum VarItemListIndex { + VarItemListIndexSortDirsFirst, + VarItemListIndexChangeDeviceName, +}; + +void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + static void xtreme_app_scene_misc_sort_folders_before_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); @@ -23,15 +33,31 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); - variable_item_list_set_selected_item(var_item_list, 0); + variable_item_list_add(var_item_list, "Change Device Name", 0, NULL, app); + + variable_item_list_set_enter_callback(var_item_list, xtreme_app_scene_misc_var_item_list_callback, app); + + variable_item_list_set_selected_item(var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneMisc)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } bool xtreme_app_scene_misc_on_event(void* context, SceneManagerEvent event) { - UNUSED(context); - UNUSED(event); + XtremeApp* app = context; bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneMisc, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexChangeDeviceName: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneMiscRename); + break; + default: + break; + } + } + return consumed; } diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc_rename.c b/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc_rename.c new file mode 100644 index 000000000..6ff05ab8a --- /dev/null +++ b/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc_rename.c @@ -0,0 +1,54 @@ +#include "../xtreme_app.h" + +enum TextInputIndex { + TextInputIndexResult, +}; + +static void xtreme_app_scene_misc_rename_text_input_callback(void* context) { + XtremeApp* app = context; + + app->save_name = true; + app->require_reboot = true; + view_dispatcher_send_custom_event( + app->view_dispatcher, TextInputIndexResult); +} + +void xtreme_app_scene_misc_rename_on_enter(void* context) { + XtremeApp* app = context; + TextInput* text_input = app->text_input; + + text_input_set_header_text(text_input, "Leave empty for default"); + + text_input_set_result_callback( + text_input, + xtreme_app_scene_misc_rename_text_input_callback, + app, + app->device_name, + NAMECHANGER_TEXT_STORE_SIZE, + true); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewTextInput); +} + +bool xtreme_app_scene_misc_rename_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + consumed = true; + switch(event.event) { + case TextInputIndexResult: + scene_manager_previous_scene(app->scene_manager); + break; + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_misc_rename_on_exit(void* context) { + XtremeApp* app = context; + text_input_reset(app->text_input); +} diff --git a/applications/settings/xtreme_app/xtreme_app.c b/applications/settings/xtreme_app/xtreme_app.c index a10485855..872f0e90a 100644 --- a/applications/settings/xtreme_app/xtreme_app.c +++ b/applications/settings/xtreme_app/xtreme_app.c @@ -16,6 +16,18 @@ static bool xtreme_app_back_event_callback(void* context) { XtremeApp* app = context; if(!scene_manager_has_previous_scene(app->scene_manager, XtremeAppSceneStart)) { + Storage* storage = furi_record_open(RECORD_STORAGE); + + if(app->save_subghz) { + FlipperFormat* subghz_range = flipper_format_file_alloc(storage); + if(flipper_format_file_open_existing(subghz_range, "/ext/subghz/assets/extend_range.txt")) { + flipper_format_insert_or_update_bool( + subghz_range, "use_ext_range_at_own_risk", &app->subghz_extend, 1); + flipper_format_insert_or_update_bool( + subghz_range, "ignore_default_tx_region", &app->subghz_bypass, 1); + } + flipper_format_free(subghz_range); + } if(app->save_level) { Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); @@ -26,17 +38,27 @@ static bool xtreme_app_back_event_callback(void* context) { furi_record_close(RECORD_DOLPHIN); } - if(app->save_subghz) { - Storage* storage = furi_record_open(RECORD_STORAGE); - FlipperFormat* subghz_range = flipper_format_file_alloc(storage); - if(flipper_format_file_open_existing(subghz_range, "/ext/subghz/assets/extend_range.txt")) { - flipper_format_insert_or_update_bool( - subghz_range, "use_ext_range_at_own_risk", &app->subghz_extend, 1); - flipper_format_insert_or_update_bool( - subghz_range, "ignore_default_tx_region", &app->subghz_bypass, 1); + if(app->save_name) { + if(strcmp(app->device_name, "") == 0) { + storage_simply_remove(storage, NAMECHANGER_PATH); + } else { + FlipperFormat* file = flipper_format_file_alloc(storage); + + do { + if(!flipper_format_file_open_always(file, NAMECHANGER_PATH)) break; + + if(!flipper_format_write_header_cstr(file, NAMECHANGER_HEADER, 1)) break; + + if(!flipper_format_write_comment_cstr(file, "Changing the value below will change your FlipperZero device name.")) break; + if(!flipper_format_write_comment_cstr(file, "Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) break; + if(!flipper_format_write_comment_cstr(file, "It cannot contain any other characters.")) break; + + if(!flipper_format_write_string_cstr(file, "Name", app->device_name)) break; + + } while(0); + + flipper_format_free(file); } - flipper_format_free(subghz_range); - furi_record_close(RECORD_STORAGE); } if(app->save_settings) { @@ -54,6 +76,7 @@ static bool xtreme_app_back_event_callback(void* context) { return true; } + furi_record_close(RECORD_STORAGE); } return scene_manager_handle_back_event(app->scene_manager); @@ -83,6 +106,12 @@ XtremeApp* xtreme_app_alloc() { XtremeAppViewVarItemList, variable_item_list_get_view(app->var_item_list)); + app->text_input = text_input_alloc(); + view_dispatcher_add_view( + app->view_dispatcher, + XtremeAppViewTextInput, + text_input_get_view(app->text_input)); + app->popup = popup_alloc(); view_dispatcher_add_view(app->view_dispatcher, XtremeAppViewPopup, popup_get_view(app->popup)); @@ -90,11 +119,6 @@ XtremeApp* xtreme_app_alloc() { XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); - DolphinStats stats = dolphin_stats(dolphin); - app->dolphin_level = stats.level; - furi_record_close(RECORD_DOLPHIN); - Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* subghz_range = flipper_format_file_alloc(storage); app->subghz_extend = false; @@ -105,6 +129,13 @@ XtremeApp* xtreme_app_alloc() { } flipper_format_free(subghz_range); + Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); + DolphinStats stats = dolphin_stats(dolphin); + app->dolphin_level = stats.level; + furi_record_close(RECORD_DOLPHIN); + + strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); + app->asset_pack = 0; asset_packs_init(app->asset_packs); File* folder = storage_file_alloc(storage); @@ -148,6 +179,8 @@ void xtreme_app_free(XtremeApp* app) { // Gui modules view_dispatcher_remove_view(app->view_dispatcher, XtremeAppViewVarItemList); variable_item_list_free(app->var_item_list); + view_dispatcher_remove_view(app->view_dispatcher, XtremeAppViewTextInput); + text_input_free(app->text_input); view_dispatcher_remove_view(app->view_dispatcher, XtremeAppViewPopup); popup_free(app->popup); diff --git a/applications/settings/xtreme_app/xtreme_app.h b/applications/settings/xtreme_app/xtreme_app.h index 7f2d1a5bc..f4e1f6d3d 100644 --- a/applications/settings/xtreme_app/xtreme_app.h +++ b/applications/settings/xtreme_app/xtreme_app.h @@ -7,8 +7,10 @@ #include #include #include +#include #include #include +#include #include "scenes/xtreme_app_scene.h" #include "dolphin/helpers/dolphin_state.h" #include "dolphin/dolphin.h" @@ -25,20 +27,24 @@ typedef struct { SceneManager* scene_manager; ViewDispatcher* view_dispatcher; VariableItemList* var_item_list; + TextInput* text_input; Popup* popup; - int dolphin_level; bool subghz_extend; bool subghz_bypass; - bool save_settings; - bool require_reboot; - bool save_subghz; - bool save_level; + int dolphin_level; + char device_name[NAMECHANGER_TEXT_STORE_SIZE]; uint asset_pack; asset_packs_t asset_packs; FuriString* version_tag; + bool save_subghz; + bool save_level; + bool save_name; + bool save_settings; + bool require_reboot; } XtremeApp; typedef enum { XtremeAppViewVarItemList, + XtremeAppViewTextInput, XtremeAppViewPopup, } XtremeAppView; From 1ef497df6ddbaa2ec4f7a87f4f3f604745518709 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Sun, 19 Feb 2023 23:25:22 +0000 Subject: [PATCH 02/12] Remove old namechanger app --- .../plugins/namechanger/application.fam | 13 -- .../namechanger/icons/DolphinNice_96x59.png | Bin 2459 -> 0 bytes .../plugins/namechanger/icons/MarioBlock.png | Bin 4616 -> 0 bytes .../namechanger/icons/namechanger_10px.png | Bin 1611 -> 0 bytes .../plugins/namechanger/namechanger.c | 162 ------------------ .../plugins/namechanger/namechanger.h | 49 ------ .../plugins/namechanger/namechanger_10px.png | Bin 1611 -> 0 bytes .../namechanger/namechanger_custom_event.h | 6 - .../namechanger/scenes/namechanger_scene.c | 30 ---- .../namechanger/scenes/namechanger_scene.h | 29 ---- .../scenes/namechanger_scene_change.c | 56 ------ .../scenes/namechanger_scene_change_success.c | 50 ------ .../scenes/namechanger_scene_config.h | 5 - .../scenes/namechanger_scene_revert.c | 53 ------ .../scenes/namechanger_scene_revert_success.c | 54 ------ .../scenes/namechanger_scene_start.c | 58 ------- 16 files changed, 565 deletions(-) delete mode 100644 applications/plugins/namechanger/application.fam delete mode 100644 applications/plugins/namechanger/icons/DolphinNice_96x59.png delete mode 100644 applications/plugins/namechanger/icons/MarioBlock.png delete mode 100644 applications/plugins/namechanger/icons/namechanger_10px.png delete mode 100644 applications/plugins/namechanger/namechanger.c delete mode 100644 applications/plugins/namechanger/namechanger.h delete mode 100644 applications/plugins/namechanger/namechanger_10px.png delete mode 100644 applications/plugins/namechanger/namechanger_custom_event.h delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene.c delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene.h delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene_change.c delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene_change_success.c delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene_config.h delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene_revert.c delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene_revert_success.c delete mode 100644 applications/plugins/namechanger/scenes/namechanger_scene_start.c diff --git a/applications/plugins/namechanger/application.fam b/applications/plugins/namechanger/application.fam deleted file mode 100644 index 704b643c5..000000000 --- a/applications/plugins/namechanger/application.fam +++ /dev/null @@ -1,13 +0,0 @@ -App( - appid="NameChanger", - name="Name Changer", - apptype=FlipperAppType.EXTERNAL, - entry_point="namechanger_app", - cdefines=["APP_NAMECHANGER"], - requires=["gui", "storage"], - stack_size=2 * 1024, - order=90, - fap_icon="namechanger_10px.png", - fap_category="Tools", - fap_icon_assets="icons", -) diff --git a/applications/plugins/namechanger/icons/DolphinNice_96x59.png b/applications/plugins/namechanger/icons/DolphinNice_96x59.png deleted file mode 100644 index a299d3630239b4486e249cc501872bed5996df3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2459 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 I=KY7S0iJXAHUIzs diff --git a/applications/plugins/namechanger/namechanger.c b/applications/plugins/namechanger/namechanger.c deleted file mode 100644 index 17abcea72..000000000 --- a/applications/plugins/namechanger/namechanger.c +++ /dev/null @@ -1,162 +0,0 @@ -#include "namechanger.h" -#include "scenes/namechanger_scene.h" - -#include -#include - -bool namechanger_custom_event_callback(void* context, uint32_t event) { - furi_assert(context); - NameChanger* namechanger = context; - return scene_manager_handle_custom_event(namechanger->scene_manager, event); -} - -bool namechanger_back_event_callback(void* context) { - furi_assert(context); - NameChanger* namechanger = context; - return scene_manager_handle_back_event(namechanger->scene_manager); -} - -NameChanger* namechanger_alloc() { - NameChanger* namechanger = malloc(sizeof(NameChanger)); - - namechanger->scene_manager = scene_manager_alloc(&namechanger_scene_handlers, namechanger); - - namechanger->view_dispatcher = view_dispatcher_alloc(); - view_dispatcher_enable_queue(namechanger->view_dispatcher); - view_dispatcher_set_event_callback_context(namechanger->view_dispatcher, namechanger); - view_dispatcher_set_custom_event_callback( - namechanger->view_dispatcher, namechanger_custom_event_callback); - view_dispatcher_set_navigation_event_callback( - namechanger->view_dispatcher, namechanger_back_event_callback); - - namechanger->gui = furi_record_open(RECORD_GUI); - namechanger->storage = furi_record_open(RECORD_STORAGE); - - namechanger->submenu = submenu_alloc(); - view_dispatcher_add_view( - namechanger->view_dispatcher, - NameChangerViewSubmenu, - submenu_get_view(namechanger->submenu)); - - namechanger->text_input = text_input_alloc(); - view_dispatcher_add_view( - namechanger->view_dispatcher, - NameChangerViewTextInput, - text_input_get_view(namechanger->text_input)); - - namechanger->popup = popup_alloc(); - view_dispatcher_add_view( - namechanger->view_dispatcher, NameChangerViewPopup, popup_get_view(namechanger->popup)); - - namechanger->widget = widget_alloc(); - view_dispatcher_add_view( - namechanger->view_dispatcher, NameChangerViewWidget, widget_get_view(namechanger->widget)); - - return namechanger; -} - -void namechanger_free(NameChanger* namechanger) { - furi_assert(namechanger); - - view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewWidget); - widget_free(namechanger->widget); - view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewPopup); - popup_free(namechanger->popup); - - view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewTextInput); - text_input_free(namechanger->text_input); - - view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewSubmenu); - submenu_free(namechanger->submenu); - - view_dispatcher_free(namechanger->view_dispatcher); - scene_manager_free(namechanger->scene_manager); - - furi_record_close(RECORD_STORAGE); - - furi_record_close(RECORD_GUI); - - free(namechanger); -} - -void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...) { - va_list args; - va_start(args, text); - - vsnprintf(namechanger->text_store, NAMECHANGER_TEXT_STORE_SIZE, text, args); - - va_end(args); -} - -int32_t namechanger_app() { - NameChanger* namechanger = namechanger_alloc(); - - view_dispatcher_attach_to_gui( - namechanger->view_dispatcher, namechanger->gui, ViewDispatcherTypeFullscreen); - scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneStart); - - view_dispatcher_run(namechanger->view_dispatcher); - - namechanger_free(namechanger); - return 0; -} - -bool namechanger_name_write(NameChanger* namechanger, char* name) { - FuriString* file_path = furi_string_alloc(); - furi_string_set(file_path, "/ext/dolphin/name.txt"); - - bool result = false; - - //If name is not "eraseerase" (set by Revert) then write name to file - //otherwise, remove name.txt - - if(strcmp(name, "eraseerase") != 0) { - //save - FlipperFormat* file = flipper_format_file_alloc(namechanger->storage); - - do { - // Open file for write - if(!flipper_format_file_open_always(file, furi_string_get_cstr(file_path))) { - break; - } - - // Write header - if(!flipper_format_write_header_cstr(file, NAMECHANGER_HEADER, 1)) { - break; - } - - // Write comments - if(!flipper_format_write_comment_cstr( - file, "Changing the value below will change your FlipperZero device name.")) { - break; - } - - if(!flipper_format_write_comment_cstr( - file, - "Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) { - break; - } - - if(!flipper_format_write_comment_cstr( - file, "It cannot contain any other characters.")) { - break; - } - - if(!flipper_format_write_string_cstr(file, "Name", name)) { - break; - } - - result = true; - } while(false); - - flipper_format_free(file); - - if(!result) { - FURI_LOG_E(TAG, "Cannot save name file."); - } - } else { - result = storage_simply_remove(namechanger->storage, furi_string_get_cstr(file_path)); - } - - return result; -} \ No newline at end of file diff --git a/applications/plugins/namechanger/namechanger.h b/applications/plugins/namechanger/namechanger.h deleted file mode 100644 index e3355db1d..000000000 --- a/applications/plugins/namechanger/namechanger.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include "namechanger_custom_event.h" -#include "scenes/namechanger_scene.h" - -#define NAMECHANGER_TEXT_STORE_SIZE 9 -#define NAMECHANGER_HEADER "Flipper Name File" - -#define TAG "NameChanger" - -typedef struct { - SceneManager* scene_manager; - ViewDispatcher* view_dispatcher; - - Gui* gui; - Storage* storage; - - char text_store[NAMECHANGER_TEXT_STORE_SIZE + 1]; - - Submenu* submenu; - TextInput* text_input; - Popup* popup; - Widget* widget; -} NameChanger; - -typedef enum { - NameChangerViewSubmenu, - NameChangerViewTextInput, - NameChangerViewPopup, - NameChangerViewWidget, -} NameChangerView; - -bool namechanger_make_app_folder(NameChanger* namechanger); -bool namechanger_name_write(NameChanger* namechanger, char* name); -void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...); diff --git a/applications/plugins/namechanger/namechanger_10px.png b/applications/plugins/namechanger/namechanger_10px.png deleted file mode 100644 index 60facf25e0e1615f2c3606324af8d7aa29d04a17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1611 zcmcIkzi-<{6s7|dNZn*fQNZX#T$TjL@wY0G2%9>VV=E|K!%-S_%kl0g5f*t2dA1~v z*#ZPG0whaOphLF|ow{Z4lBHYw2XyMzrCZuD?<9&1ip22}g1kHOzWd(ye(*io-PyXh z`uVD+X%~Cj-94DqdiDG{7|-nv{(|Y_V*9&F(?0oBJuBMxKdfomN57{1fgD6%2UKJR zVItt+WJSdWAEnzzCBJjD)2B!K)Mx0% zm-_W-00bGAM4x8kyb7ivn)3#*R-a9z&mnR@MC;0+K8SYp4N-EvZP=JvmZi6SgEQj9 zZgNd`EXOu&xIJt;folbxqt_P#b0tfHz3#2r7`%mOBxMnp=43K4CaxjMp=tZRZ(5G& zI2aJPn&pyAab8_sGIV)G%e0WG$aTd?VsRit1X341WJN=pS9P2qV&;?-rfpctrzJ3o zPKRb$gRbP}Ay}#PzLmJ@&kAnt@k$(&ly4sLTwY!pW3)M29F*g^r;M6>%rk&hAk1z| z6(b=U2nlxShE!INufYK!s18U(_uV6gZj)1syM8mhCd!PF#Y0Hm4*p z=CSL09wCgk+Do=?$`pPbGJca)sbawBQrd|V*1^oS+nBYy1e4gaG2xEww_9!EC7_DY zAQ5Fopia_^47pk4L!|$wW0HoGMjS{_N&W&>i9}9F$=8Pv>Gu|w`7ZGlIXqqZ*%JQ&rPpDl zBa#m}bWRf~XH3;%7D+MxpRf7e8|`QbhaRVvO?QQtra$u>s7vU+uU=hx37z{&ue;t~ zdq)2~US0c5TS?hxqvyZh{c3F>e|j>wu=VZjU;cPHyKv%Z=%3>U#^WFVRPDaExzqjm I=KY7S0iJXAHUIzs diff --git a/applications/plugins/namechanger/namechanger_custom_event.h b/applications/plugins/namechanger/namechanger_custom_event.h deleted file mode 100644 index 3485c870b..000000000 --- a/applications/plugins/namechanger/namechanger_custom_event.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -enum NameChangerCustomEvent { - NameChangerCustomEventBack, - NameChangerCustomEventTextEditResult, -}; diff --git a/applications/plugins/namechanger/scenes/namechanger_scene.c b/applications/plugins/namechanger/scenes/namechanger_scene.c deleted file mode 100644 index 82f96e466..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "namechanger_scene.h" - -// Generate scene on_enter handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, -void (*const namechanger_on_enter_handlers[])(void*) = { -#include "namechanger_scene_config.h" -}; -#undef ADD_SCENE - -// Generate scene on_event handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, -bool (*const namechanger_on_event_handlers[])(void* context, SceneManagerEvent event) = { -#include "namechanger_scene_config.h" -}; -#undef ADD_SCENE - -// Generate scene on_exit handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, -void (*const namechanger_on_exit_handlers[])(void* context) = { -#include "namechanger_scene_config.h" -}; -#undef ADD_SCENE - -// Initialize scene handlers configuration structure -const SceneManagerHandlers namechanger_scene_handlers = { - .on_enter_handlers = namechanger_on_enter_handlers, - .on_event_handlers = namechanger_on_event_handlers, - .on_exit_handlers = namechanger_on_exit_handlers, - .scene_num = NameChangerSceneNum, -}; diff --git a/applications/plugins/namechanger/scenes/namechanger_scene.h b/applications/plugins/namechanger/scenes/namechanger_scene.h deleted file mode 100644 index 42071ab98..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -// Generate scene id and total number -#define ADD_SCENE(prefix, name, id) NameChangerScene##id, -typedef enum { -#include "namechanger_scene_config.h" - NameChangerSceneNum, -} NameChangerScene; -#undef ADD_SCENE - -extern const SceneManagerHandlers namechanger_scene_handlers; - -// Generate scene on_enter handlers declaration -#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); -#include "namechanger_scene_config.h" -#undef ADD_SCENE - -// Generate scene on_event handlers declaration -#define ADD_SCENE(prefix, name, id) \ - bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); -#include "namechanger_scene_config.h" -#undef ADD_SCENE - -// Generate scene on_exit handlers declaration -#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); -#include "namechanger_scene_config.h" -#undef ADD_SCENE diff --git a/applications/plugins/namechanger/scenes/namechanger_scene_change.c b/applications/plugins/namechanger/scenes/namechanger_scene_change.c deleted file mode 100644 index 32977d51a..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene_change.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "../namechanger.h" - -static void namechanger_scene_change_text_input_callback(void* context) { - NameChanger* namechanger = context; - - view_dispatcher_send_custom_event( - namechanger->view_dispatcher, NameChangerCustomEventTextEditResult); -} - -void namechanger_scene_change_on_enter(void* context) { - NameChanger* namechanger = context; - TextInput* text_input = namechanger->text_input; - - namechanger_text_store_set(namechanger, "%s", furi_hal_version_get_name_ptr()); - - text_input_set_header_text(text_input, "Set Flipper Name"); - - text_input_set_result_callback( - text_input, - namechanger_scene_change_text_input_callback, - namechanger, - namechanger->text_store, - NAMECHANGER_TEXT_STORE_SIZE, - true); - - view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewTextInput); -} - -bool namechanger_scene_change_on_event(void* context, SceneManagerEvent event) { - NameChanger* namechanger = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - consumed = true; - if(event.event == NameChangerCustomEventTextEditResult) { - if(namechanger_name_write(namechanger, namechanger->text_store)) { - scene_manager_next_scene( - namechanger->scene_manager, NameChangerSceneChangeSuccess); - } else { - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneStart); - } - } else { - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneStart); - } - } - return consumed; -} - -void namechanger_scene_change_on_exit(void* context) { - NameChanger* namechanger = context; - TextInput* text_input = namechanger->text_input; - - text_input_reset(text_input); -} diff --git a/applications/plugins/namechanger/scenes/namechanger_scene_change_success.c b/applications/plugins/namechanger/scenes/namechanger_scene_change_success.c deleted file mode 100644 index 7574c3a0e..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene_change_success.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "../namechanger.h" - -static void namechanger_scene_change_success_popup_callback(void* context) { - NameChanger* namechanger = context; - view_dispatcher_send_custom_event(namechanger->view_dispatcher, NameChangerCustomEventBack); -} - -void namechanger_scene_change_success_on_enter(void* context) { - NameChanger* namechanger = context; - Popup* popup = namechanger->popup; - - popup_set_header(popup, "Saved!", 5, 5, AlignLeft, AlignTop); - popup_set_text(popup, "Rebooting...", 5, 17, AlignLeft, AlignTop); - - popup_set_callback(popup, namechanger_scene_change_success_popup_callback); - popup_set_context(popup, namechanger); - popup_set_timeout(popup, 5000); - popup_enable_timeout(popup); - - view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewPopup); -} - -bool namechanger_scene_change_success_on_event(void* context, SceneManagerEvent event) { - NameChanger* namechanger = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - consumed = true; - if(event.event == NameChangerCustomEventBack) { - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneChange); - } - } - - return consumed; -} - -void namechanger_scene_change_success_on_exit(void* context) { - NameChanger* namechanger = context; - Popup* popup = namechanger->popup; - - popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop); - popup_set_icon(popup, 0, 0, NULL); - - popup_disable_timeout(popup); - popup_set_context(popup, NULL); - popup_set_callback(popup, NULL); - - furi_hal_power_reset(); -} diff --git a/applications/plugins/namechanger/scenes/namechanger_scene_config.h b/applications/plugins/namechanger/scenes/namechanger_scene_config.h deleted file mode 100644 index 41bbaef6b..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene_config.h +++ /dev/null @@ -1,5 +0,0 @@ -ADD_SCENE(namechanger, start, Start) -ADD_SCENE(namechanger, change, Change) -ADD_SCENE(namechanger, change_success, ChangeSuccess) -ADD_SCENE(namechanger, revert, Revert) -ADD_SCENE(namechanger, revert_success, RevertSuccess) \ No newline at end of file diff --git a/applications/plugins/namechanger/scenes/namechanger_scene_revert.c b/applications/plugins/namechanger/scenes/namechanger_scene_revert.c deleted file mode 100644 index 156817651..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene_revert.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "../namechanger.h" - -static void - namechanger_scene_revert_widget_callback(GuiButtonType result, InputType type, void* context) { - NameChanger* namechanger = context; - if(type == InputTypeShort) { - view_dispatcher_send_custom_event(namechanger->view_dispatcher, result); - } -} - -void namechanger_scene_revert_on_enter(void* context) { - NameChanger* namechanger = context; - Widget* widget = namechanger->widget; - widget_add_text_box_element( - widget, 0, 0, 128, 25, AlignCenter, AlignCenter, "\e#Revert Name?\e#", false); - widget_add_button_element( - widget, GuiButtonTypeLeft, "Cancel", namechanger_scene_revert_widget_callback, namechanger); - widget_add_button_element( - widget, - GuiButtonTypeRight, - "Revert", - namechanger_scene_revert_widget_callback, - namechanger); - view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewWidget); -} - -bool namechanger_scene_revert_on_event(void* context, SceneManagerEvent event) { - NameChanger* namechanger = context; - bool consumed = false; - if(event.type == SceneManagerEventTypeBack) { - consumed = true; - } else if(event.type == SceneManagerEventTypeCustom) { - consumed = true; - if(event.event == GuiButtonTypeRight) { - if(namechanger_name_write(namechanger, "eraseerase")) { - scene_manager_next_scene( - namechanger->scene_manager, NameChangerSceneRevertSuccess); - } else { - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneStart); - } - } else if(event.event == GuiButtonTypeLeft) { - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneStart); - } - } - return consumed; -} - -void namechanger_scene_revert_on_exit(void* context) { - NameChanger* namechanger = context; - widget_reset(namechanger->widget); -} diff --git a/applications/plugins/namechanger/scenes/namechanger_scene_revert_success.c b/applications/plugins/namechanger/scenes/namechanger_scene_revert_success.c deleted file mode 100644 index 354a6eadf..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene_revert_success.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "../namechanger.h" - -static void namechanger_scene_revert_success_popup_callback(void* context) { - NameChanger* namechanger = context; - view_dispatcher_send_custom_event(namechanger->view_dispatcher, NameChangerCustomEventBack); -} - -void namechanger_scene_revert_success_on_enter(void* context) { - NameChanger* namechanger = context; - Popup* popup = namechanger->popup; - - popup_set_header(popup, "Reverted!", 70, 5, AlignLeft, AlignTop); - popup_set_text(popup, "Rebooting...", 70, 16, AlignLeft, AlignTop); - - popup_set_callback(popup, namechanger_scene_revert_success_popup_callback); - popup_set_context(popup, namechanger); - popup_set_timeout(popup, 5000); - popup_enable_timeout(popup); - - view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewPopup); -} - -bool namechanger_scene_revert_success_on_event(void* context, SceneManagerEvent event) { - NameChanger* namechanger = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeBack) { - consumed = true; - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneStart); - } else if(event.type == SceneManagerEventTypeCustom) { - consumed = true; - if(event.event == NameChangerCustomEventBack) { - scene_manager_search_and_switch_to_previous_scene( - namechanger->scene_manager, NameChangerSceneStart); - } - } - - return consumed; -} - -void namechanger_scene_revert_success_on_exit(void* context) { - NameChanger* namechanger = context; - Popup* popup = namechanger->popup; - - popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop); - popup_set_icon(popup, 0, 0, NULL); - - popup_disable_timeout(popup); - popup_set_context(popup, NULL); - popup_set_callback(popup, NULL); - - furi_hal_power_reset(); -} \ No newline at end of file diff --git a/applications/plugins/namechanger/scenes/namechanger_scene_start.c b/applications/plugins/namechanger/scenes/namechanger_scene_start.c deleted file mode 100644 index 3fe93f5a2..000000000 --- a/applications/plugins/namechanger/scenes/namechanger_scene_start.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "../namechanger.h" - -enum SubmenuIndex { - SubmenuIndexChange, - SubmenuIndexRevert, -}; - -void namechanger_scene_start_submenu_callback(void* context, uint32_t index) { - NameChanger* namechanger = context; - view_dispatcher_send_custom_event(namechanger->view_dispatcher, index); -} - -void namechanger_scene_start_on_enter(void* context) { - NameChanger* namechanger = context; - Submenu* submenu = namechanger->submenu; - - submenu_add_item( - submenu, - "Change", - SubmenuIndexChange, - namechanger_scene_start_submenu_callback, - namechanger); - - submenu_add_item( - submenu, - "Revert", - SubmenuIndexRevert, - namechanger_scene_start_submenu_callback, - namechanger); - - submenu_set_selected_item( - submenu, scene_manager_get_scene_state(namechanger->scene_manager, NameChangerSceneStart)); - - view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewSubmenu); -} - -bool namechanger_scene_start_on_event(void* context, SceneManagerEvent event) { - NameChanger* namechanger = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state( - namechanger->scene_manager, NameChangerSceneStart, event.event); - consumed = true; - if(event.event == SubmenuIndexChange) { - scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneChange); - } - if(event.event == SubmenuIndexRevert) { - scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneRevert); - } - } - return consumed; -} - -void namechanger_scene_start_on_exit(void* context) { - NameChanger* namechanger = context; - submenu_reset(namechanger->submenu); -} From 2d4247abb38cb73a8d94a36a748e70219da6f139 Mon Sep 17 00:00:00 2001 From: Dyiing <85312115+Maiden-less@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:08:55 +0100 Subject: [PATCH 03/12] Redirect Contributors Image to Insights page --- ReadMe.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index 027fb2fce..6ff014479 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -192,9 +192,9 @@ $ ./fbt resources icons dolphin_ext ----

Contributors

-

- -

+ +[![Contributors](https://user-images.githubusercontent.com/55334727/212134625-21383102-02f3-453f-b1d7-8a9c65b27612.svg)](https://github.com/ClaraCrazy/Flipper-Xtreme/graphs/contributors) + ---- ## SAST Tools From 46187b1fb41b880aa4342782884189cdb45afd70 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 02:05:23 +0000 Subject: [PATCH 04/12] Replace documentation with wiki and ul docs links --- documentation/HardwareTargets.md | 44 ---------------- documentation/InfraredCaptures.md | 83 ------------------------------- documentation/ReadMe.md | 7 +++ documentation/UniversalRemotes.md | 76 ---------------------------- 4 files changed, 7 insertions(+), 203 deletions(-) delete mode 100644 documentation/HardwareTargets.md delete mode 100644 documentation/InfraredCaptures.md create mode 100644 documentation/ReadMe.md delete mode 100644 documentation/UniversalRemotes.md diff --git a/documentation/HardwareTargets.md b/documentation/HardwareTargets.md deleted file mode 100644 index 0c3474839..000000000 --- a/documentation/HardwareTargets.md +++ /dev/null @@ -1,44 +0,0 @@ -## What a Firmware Target is - -Flipper's firmware is modular and supports different hardware configurations in a common code base. It encapsulates hardware-specific differences in `furi_hal`, board initialization code, linker files, SDK data and other information in a _target definition_. - -Target-specific files are placed in a single sub-folder in `firmware/targets`. It must contain a target definition file, `target.json`, and may contain other files if they are referenced by current target's definition. By default, `fbt` gathers all source files in target folder, unless they are explicitly excluded. - -Targets can inherit most code parts from other targets, to reduce common code duplication. - - -## Target Definition File - -A target definition file, `target.json`, is a JSON file that can contain the following fields: - -* `include_paths`: list of strings, folder paths relative to current target folder to add to global C/C++ header path lookup list. -* `sdk_header_paths`: list of strings, folder paths relative to current target folder to gather headers from for including in SDK. -* `startup_script`: filename of a startup script, performing initial hardware initialization. -* `linker_script_flash`: filename of a linker script for creating the main firmware image. -* `linker_script_ram`: filename of a linker script to use in "updater" build configuration. -* `linker_script_app`: filename of a linker script to use for linking .fap files. -* `sdk_symbols`: filename of a .csv file containing current SDK configuration for this target. -* `linker_dependencies`: list of libraries to link the firmware with. Note that those not in the list won't be built by `fbt`. Also several link passes might be needed, in such case you may need to specify same library name twice. -* `inherit`: string, specifies hardware target to borrow main configuration from. Current configuration may specify additional values for parameters that are lists of strings, or override values that are not lists. -* `excluded_sources`: list of filenames from the inherited configuration(s) NOT to be built. -* `excluded_headers`: list of headers from the inherited configuration(s) NOT to be included in generated SDK. -* `excluded_modules`: list of strings specifying fbt library (module) names to exclude from being used to configure build environment. - - -## Applications & Hardware - -Not all applications are available on different hardware targets. - -* For applications built into the firmware, you have to specify a compatible application set using `FIRMWARE_APP_SET=...` fbt option. See [fbt docs](./fbt.md#firmware-application-set) for details on build configurations. - -* For applications built as external .faps, you have to explicitly specify compatible targets in application's manifest, `application.fam`. For example, to limit application to a single target, add `targets=["f7"],` to the manifest. It won't be built for other targets. - -For details on application manifests, check out [their docs page](./AppManifests.md). - - -## Building Firmware for a Specific Target - -You have to specify TARGET_HW (and, optionally, FIRMWARE_APP_SET) for `fbt` to build firmware for non-default target. For example, building and flashing debug firmware for f18 can be done with - - ./fbt TARGET_HW=18 flash_usb_full - diff --git a/documentation/InfraredCaptures.md b/documentation/InfraredCaptures.md deleted file mode 100644 index 61097ad6d..000000000 --- a/documentation/InfraredCaptures.md +++ /dev/null @@ -1,83 +0,0 @@ -# Infrared Captures - -**Credits go to @gsurkov, @skotopes, @knrn-ai, @DrZlo13 and @ahumeniy for making and contributing to the original `UniversalRemotes.md` Documentation located [Here](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/UniversalRemotes.md).** - -**slightly adapted by @amec0e** - -## Televisions, Fans, Audio and Projectors - -Each signal is recorded using the following process: - -1. Get the remote and point it to Flipper's IR receiver. -2. Start learning a new remote if it's the first button or press `+` to add a new button otherwise. -3. Do a Quick Press of a remote button and save it under a corresponding name. **(NOTE: Don't hold the remote button down, this will result in long captures and long playbacks ultimately slowing down the universal remotes performance)** -4. Repeat steps 2-3 until all required signals are saved. - -The signal names are self-explanatory. Remember to make sure that every recorded signal does what it's supposed to. - -**NOTE:** It's possible some devices around you will cause interference and may force your capture into raw data instead of a parsed code. -If you notice you get a parsed code when capturing it's best to click "Retry" a few times on the flipper when capturing to ensure the device is not suffering from any interference, and that the cleanest capture is possible. - -## Types of data - -**Parsed data** - -This is the cleanest type of data because it means it is a recognised code. - -``` -name: EXAMPLE -type: parsed -protocol: NEC -address: 07 00 00 00 -command: 02 00 00 00 -``` - -**Raw Data** - -With raw data its important not to hold the remotes button down when capturing on your flipper as this increases not only the size of the capture but the repeats and also how long it takes to send the signal back. Below is an ideal button capture. - -``` -# -name: EXAMPLE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 2410 597 1189 599 592 600 1186 602 589 603 1183 606 595 597 593 598 1208 605 596 596 594 597 593 599 592 25604 2403 604 1182 606 595 597 1189 599 591 601 1185 603 618 573 617 575 1211 602 588 603 588 605 596 596 594 25605 2402 604 1192 596 594 597 1189 599 592 601 1185 628 593 598 593 600 1186 602 589 603 588 604 597 595 596 -``` - -**Capturing Raw Data:** - -If you are sure your remote is using raw data the best way to capture it will be to do a quick button press **(don't hold the remotes button down)** and look at how many samples you get, the general idea here is to get the lowest amount of raw data samples captured (around 100 samples is about right) while making sure that the playback on the device is still working. This is usually accomplished by doing a quick button press on the remote when capturing. - -## Air Conditioners - -Air conditioners differ from most other infrared-controlled devices because their state is tracked by the remote. -The majority of A/C remotes have a small display that shows the current mode, temperature, and other settings. -When the user presses a button, a whole set of parameters is transmitted to the device, which must be recorded and used as a whole. - -In order to capture a particular air conditioner, there is a particular process require to capturing and this is done using the following process: - -1. Get the remote and press the **Power Button** so that the display shows that A/C is ON. -2. Set the A/C to the corresponding mode (see table below), leaving other parameters such as fan speed or vane on **AUTO** (if applicable). -3. Press the **POWER** button to switch the A/C off. -4. Start learning a new remote on Flipper if it's the first button or press `+` to add a new button otherwise. -5. Point the remote to Flipper's IR receiver as directed and press **POWER** button once again. -6. Save the resulting signal under the specified name. -7. Repeat steps 2-6 for each signal from the table below. - -| Signal | Mode | Temperature | Note | -| :-----: | :--------: | :---------: | ----------------------------------- | -| Dh | Dehumidify | N/A | | -| Cool_hi | Cooling | See note | Lowest temperature in cooling mode | -| Cool_lo | Cooling | 23°C | | -| Heat_hi | Heating | See note | Highest temperature in heating mode | -| Heat_lo | Heating | 23°C | | - -Finally, record the `Off` signal: - -1. Make sure the display shows that the A/C is ON. -2. Start learning a new signal on Flipper and point the remote towards the IR receiver. -3. Press the **POWER** button so that the remote shows the OFF state. -4. Save the resulting signal under the name `Off`. - -Test the file against the actual device. Make sure that every signal does what it's supposed to. diff --git a/documentation/ReadMe.md b/documentation/ReadMe.md new file mode 100644 index 000000000..14b7228cb --- /dev/null +++ b/documentation/ReadMe.md @@ -0,0 +1,7 @@ +# Flipper Zero / Xtreme Firmware documentation + +For some general information on Flipper Zero, check out [our wiki](https://github.com/ClaraCrazy/Flipper-Xtreme/wiki)! +It includes some useful [Generic Guides](https://github.com/ClaraCrazy/Flipper-Xtreme/wiki/Generic-Guides) for Flipper's main functions. +It also features an in-depth look at one of our most exclusive features: [Asset Packs](https://github.com/ClaraCrazy/Flipper-Xtreme/wiki/Asset-Packs). + +If you instead are looking for some very detailed description of Flipper's ecosystem, OS, tools and file formats, please have a look at [Unleashed's documentation](https://github.com/DarkFlippers/unleashed-firmware/tree/dev/documentation)! diff --git a/documentation/UniversalRemotes.md b/documentation/UniversalRemotes.md deleted file mode 100644 index 325f640d7..000000000 --- a/documentation/UniversalRemotes.md +++ /dev/null @@ -1,76 +0,0 @@ -# Universal Remotes - -## Televisions - -Adding your TV set to the universal remote is quite straightforward. Up to 6 signals can be recorded: `Power`, `Mute`, `Vol_up`, `Vol_dn`, `Ch_next`, and `Ch_prev`. Any of them can be omitted if not supported by your TV. - -Each signal is recorded using the following algorithm: - -1. Get the remote and point it to Flipper's IR receiver. -2. Start learning a new remote if it's the first button or press `+` to add a new button otherwise. -3. Press a remote button and save it under a corresponding name. -4. Repeat steps 2-3 until all required signals are saved. - -The signal names are self-explanatory. Remember to make sure that every recorded signal does what it's supposed to. - -If everything checks out, append these signals **to the end** of the [TV universal remote file](/assets/resources/infrared/assets/tv.ir). - -## Audio players - -Adding your audio player to the universal remote is done in the same manner as described above. Up to 8 signals can be recorded: `Power`, `Play`, `Pause`, `Vol_up`, `Vol_dn`, `Next`, `Prev`, and `Mute`. Any of them can be omitted if not supported by the player. - -The signal names are self-explanatory. -On many remotes, the `Play` button doubles as `Pause`. In this case, record it as `Play` omitting the `Pause`. -Make sure that every signal does what it's supposed to. - -If everything checks out, append these signals **to the end** of the [audio player universal remote file](/assets/resources/infrared/assets/audio.ir). - -## Projectors - -Adding your projector to the universal remote is really simple. Up to 4 signals can be recorded: `Power`, `Mute`, `Vol_up`, `Vol_dn`. Any of them can be omitted if not supported by your projector. -To save time, please make sure every recording has been named accordingly. -In case of omitting, on most projectors with the 4 following buttons, you should not have a problem. - - -## Air conditioners - -Air conditioners differ from most other infrared-controlled devices because their state is tracked by the remote. -The majority of A/C remotes have a small display that shows the current mode, temperature, and other settings. -When the user presses a button, a whole set of parameters is transmitted to the device, which must be recorded and used as a whole. - -In order to add a particular air conditioner to the universal remote, 6 signals must be recorded: `Off`, `Dh`, `Cool_hi`, `Cool_lo`, `Heat_hi`, and `Heat_lo`. -Each signal (except `Off`) is recorded using the following algorithm: - -1. Get the remote and press the **Power Button** so that the display shows that A/C is ON. -2. Set the A/C to the corresponding mode (see table below), leaving other parameters such as fan speed or vane on **AUTO** (if applicable). -3. Press the **POWER** button to switch the A/C off. -4. Start learning a new remote on Flipper if it's the first button or press `+` to add a new button otherwise. -5. Point the remote to Flipper's IR receiver as directed and press **POWER** button once again. -6. Save the resulting signal under the specified name. -7. Repeat steps 2-6 for each signal from the table below. - -| Signal | Mode | Temperature | Note | -| :-----: | :--------: | :---------: | ----------------------------------- | -| Dh | Dehumidify | N/A | | -| Cool_hi | Cooling | See note | Lowest temperature in cooling mode | -| Cool_lo | Cooling | 23°C | | -| Heat_hi | Heating | See note | Highest temperature in heating mode | -| Heat_lo | Heating | 23°C | | - -Finally, record the `Off` signal: - -1. Make sure the display shows that the A/C is ON. -2. Start learning a new signal on Flipper and point the remote towards the IR receiver. -3. Press the **POWER** button so that the remote shows the OFF state. -4. Save the resulting signal under the name `Off`. - -The resulting remote file should now contain 6 signals. You can omit any of them, but you then won't be able to use their functionality. -Test the file against the actual device. Make sure that every signal does what it's supposed to. - -If everything checks out, append these signals **to the end** of the [A/C universal remote file](/assets/resources/infrared/assets/ac.ir). - -## Final steps - -The order of signals is not important, but they should be preceded by the following comment: `# Model: ` in order to keep the library organized. - -When done, open a pull request containing the changed file. From f4b5c172d2143bc358e67858e64167c00e7c492d Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 02:49:01 +0000 Subject: [PATCH 05/12] Move morse code to misc (doesnt belong in music) --- applications/plugins/morse_code/application.fam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/plugins/morse_code/application.fam b/applications/plugins/morse_code/application.fam index 73ad2ba81..5801544a6 100644 --- a/applications/plugins/morse_code/application.fam +++ b/applications/plugins/morse_code/application.fam @@ -10,5 +10,5 @@ App( stack_size=1 * 1024, order=20, fap_icon="morse_code_10px.png", - fap_category="Music", + fap_category="Misc", ) From 6ec93b46ce8e957619dbe1ce69794f0d9a05349d Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 03:19:56 +0000 Subject: [PATCH 06/12] Move some apps, fix some app names --- applications/plugins/clock_app/application.fam | 2 +- applications/plugins/cntdown_timer/application.fam | 2 +- applications/plugins/hex_viewer/application.fam | 2 +- applications/plugins/wii_ec_anal/application.fam | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/plugins/clock_app/application.fam b/applications/plugins/clock_app/application.fam index a6a2eff3e..bbf38c2f2 100644 --- a/applications/plugins/clock_app/application.fam +++ b/applications/plugins/clock_app/application.fam @@ -6,5 +6,5 @@ App( requires=["gui"], stack_size=2 * 1024, fap_icon="clock.png", - fap_category="Tools", + fap_category="Misc", ) diff --git a/applications/plugins/cntdown_timer/application.fam b/applications/plugins/cntdown_timer/application.fam index f40ccaa51..e2c950907 100644 --- a/applications/plugins/cntdown_timer/application.fam +++ b/applications/plugins/cntdown_timer/application.fam @@ -10,5 +10,5 @@ App( stack_size=2 * 1024, order=20, fap_icon="cntdown_timer.png", - fap_category="Tools", + fap_category="Misc", ) diff --git a/applications/plugins/hex_viewer/application.fam b/applications/plugins/hex_viewer/application.fam index 7204e07c8..30c31ba76 100644 --- a/applications/plugins/hex_viewer/application.fam +++ b/applications/plugins/hex_viewer/application.fam @@ -1,6 +1,6 @@ App( appid="hex_viewer", - name="HEX Viewer", + name="Hex Viewer", apptype=FlipperAppType.EXTERNAL, entry_point="hex_viewer_app", cdefines=["APP_HEX_VIEWER"], diff --git a/applications/plugins/wii_ec_anal/application.fam b/applications/plugins/wii_ec_anal/application.fam index 4dc251713..0f0ee08e0 100644 --- a/applications/plugins/wii_ec_anal/application.fam +++ b/applications/plugins/wii_ec_anal/application.fam @@ -3,7 +3,7 @@ App( # --- App Info appid="wii_ec_anal", - name="Wii EC Analyser", + name="[GPIO] Wii EC Analyser", # --- Entry point apptype=FlipperAppType.EXTERNAL, entry_point="wii_ec_anal", From 355ef763e44a2330ccacee5e81b1795a26c996ae Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 18:59:39 +0000 Subject: [PATCH 07/12] Cleanup main apps manifest --- applications/main/application.fam | 33 +++++++------------------------ 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/applications/main/application.fam b/applications/main/application.fam index eefb801b3..8c290037b 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -3,36 +3,17 @@ App( name="Basic applications for main menu", apptype=FlipperAppType.METAPACKAGE, provides=[ + "fap_loader", + "subghz", + "unirfremix", + "sub_playlist", + "lfrfid", + "nfc", + "infrared", "gpio", "ibutton", - "infrared", - "lfrfid", - "nfc", - "subghz", "bad_kb", "u2f", - "fap_loader", - "sub_playlist", - "archive", - "clock", - "unirfremix", - ], -) - -App( - appid="main_apps_default", - name="Basic applications for main menu", - apptype=FlipperAppType.METAPACKAGE, - provides=[ - "gpio", - # "ibutton", - "infrared", - "lfrfid", - "nfc", - "subghz", - # "bad_kb", - # "u2f", - "fap_loader", "archive", ], ) From 617700bd152977fd571a3d6bad5d68e73030fdde Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 19:00:38 +0000 Subject: [PATCH 08/12] Move xtreme app to main menu --- applications/main/application.fam | 1 + applications/{settings => main}/xtreme_app/application.fam | 5 +++-- .../{settings => main}/xtreme_app/scenes/xtreme_app_scene.c | 0 .../{settings => main}/xtreme_app/scenes/xtreme_app_scene.h | 0 .../xtreme_app/scenes/xtreme_app_scene_config.h | 0 .../xtreme_app/scenes/xtreme_app_scene_dolphin.c | 0 .../xtreme_app/scenes/xtreme_app_scene_graphics.c | 0 .../xtreme_app/scenes/xtreme_app_scene_misc.c | 0 .../xtreme_app/scenes/xtreme_app_scene_misc_rename.c | 0 .../xtreme_app/scenes/xtreme_app_scene_protocols.c | 0 .../xtreme_app/scenes/xtreme_app_scene_start.c | 0 .../xtreme_app/scenes/xtreme_app_scene_statusbar.c | 0 applications/{settings => main}/xtreme_app/xtreme_app.c | 0 applications/{settings => main}/xtreme_app/xtreme_app.h | 0 applications/settings/application.fam | 1 - 15 files changed, 4 insertions(+), 3 deletions(-) rename applications/{settings => main}/xtreme_app/application.fam (75%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene.h (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_config.h (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_dolphin.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_graphics.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_misc.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_misc_rename.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_protocols.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_start.c (100%) rename applications/{settings => main}/xtreme_app/scenes/xtreme_app_scene_statusbar.c (100%) rename applications/{settings => main}/xtreme_app/xtreme_app.c (100%) rename applications/{settings => main}/xtreme_app/xtreme_app.h (100%) diff --git a/applications/main/application.fam b/applications/main/application.fam index 8c290037b..e47c0f2a1 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -14,6 +14,7 @@ App( "ibutton", "bad_kb", "u2f", + "xtreme_app", "archive", ], ) diff --git a/applications/settings/xtreme_app/application.fam b/applications/main/xtreme_app/application.fam similarity index 75% rename from applications/settings/xtreme_app/application.fam rename to applications/main/xtreme_app/application.fam index e1b7fc964..10ec953c9 100644 --- a/applications/settings/xtreme_app/application.fam +++ b/applications/main/xtreme_app/application.fam @@ -1,12 +1,13 @@ App( appid="xtreme_app", name="Xtreme FW", - apptype=FlipperAppType.SETTINGS, + apptype=FlipperAppType.APP, entry_point="xtreme_app", - stack_size=2 * 1024, requires=[ "gui", "xtreme", ], + stack_size=2 * 1024, + icon="A_Plugins_14", order=90, ) diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene.c b/applications/main/xtreme_app/scenes/xtreme_app_scene.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene.h b/applications/main/xtreme_app/scenes/xtreme_app_scene.h similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene.h rename to applications/main/xtreme_app/scenes/xtreme_app_scene.h diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_config.h rename to applications/main/xtreme_app/scenes/xtreme_app_scene_config.h diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_dolphin.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_dolphin.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_dolphin.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_dolphin.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_graphics.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_graphics.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_misc.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_misc_rename.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_rename.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_misc_rename.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_misc_rename.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_protocols.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_protocols.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_start.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_start.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_start.c diff --git a/applications/settings/xtreme_app/scenes/xtreme_app_scene_statusbar.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_statusbar.c similarity index 100% rename from applications/settings/xtreme_app/scenes/xtreme_app_scene_statusbar.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_statusbar.c diff --git a/applications/settings/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c similarity index 100% rename from applications/settings/xtreme_app/xtreme_app.c rename to applications/main/xtreme_app/xtreme_app.c diff --git a/applications/settings/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h similarity index 100% rename from applications/settings/xtreme_app/xtreme_app.h rename to applications/main/xtreme_app/xtreme_app.h diff --git a/applications/settings/application.fam b/applications/settings/application.fam index 49695b4b3..cc4b9703d 100644 --- a/applications/settings/application.fam +++ b/applications/settings/application.fam @@ -5,7 +5,6 @@ App( provides=[ "passport", "system_settings", - "xtreme_app", "about", ], ) From c29ea2e2e279ea5099ee60bc1ae87e9399f1ef13 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 19:51:31 +0000 Subject: [PATCH 09/12] Add custom icon for xtreme main menu app --- applications/main/xtreme_app/application.fam | 2 +- assets/icons/MainMenu/Xtreme_14/frame_01.png | Bin 0 -> 9296 bytes assets/icons/MainMenu/Xtreme_14/frame_02.png | Bin 0 -> 9296 bytes assets/icons/MainMenu/Xtreme_14/frame_03.png | Bin 0 -> 9034 bytes assets/icons/MainMenu/Xtreme_14/frame_04.png | Bin 0 -> 5701 bytes assets/icons/MainMenu/Xtreme_14/frame_05.png | Bin 0 -> 6982 bytes assets/icons/MainMenu/Xtreme_14/frame_06.png | Bin 0 -> 6911 bytes assets/icons/MainMenu/Xtreme_14/frame_07.png | Bin 0 -> 7733 bytes assets/icons/MainMenu/Xtreme_14/frame_08.png | Bin 0 -> 8435 bytes assets/icons/MainMenu/Xtreme_14/frame_09.png | Bin 0 -> 8881 bytes assets/icons/MainMenu/Xtreme_14/frame_10.png | Bin 0 -> 9296 bytes assets/icons/MainMenu/Xtreme_14/frame_11.png | Bin 0 -> 9295 bytes assets/icons/MainMenu/Xtreme_14/frame_rate | 1 + 13 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_01.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_02.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_03.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_04.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_05.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_06.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_07.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_08.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_09.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_10.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_11.png create mode 100644 assets/icons/MainMenu/Xtreme_14/frame_rate diff --git a/applications/main/xtreme_app/application.fam b/applications/main/xtreme_app/application.fam index 10ec953c9..8807b6dca 100644 --- a/applications/main/xtreme_app/application.fam +++ b/applications/main/xtreme_app/application.fam @@ -8,6 +8,6 @@ App( "xtreme", ], stack_size=2 * 1024, - icon="A_Plugins_14", + icon="A_Xtreme_14", order=90, ) diff --git a/assets/icons/MainMenu/Xtreme_14/frame_01.png b/assets/icons/MainMenu/Xtreme_14/frame_01.png new file mode 100644 index 0000000000000000000000000000000000000000..bd77d092d41d319aabb8ebdc7a9c817a092e2b79 GIT binary patch literal 9296 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_02.png b/assets/icons/MainMenu/Xtreme_14/frame_02.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca6f65286f0b64672c3063f50dbcdf6c4fec349 GIT binary patch literal 9296 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_03.png b/assets/icons/MainMenu/Xtreme_14/frame_03.png new file mode 100644 index 0000000000000000000000000000000000000000..99ac840a2689f48c469c71331f95da38728e11b3 GIT binary patch literal 9034 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_04.png b/assets/icons/MainMenu/Xtreme_14/frame_04.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9d4d5b4ba6880d81e49f586fd893ee5bf281f4 GIT binary patch literal 5701 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_05.png b/assets/icons/MainMenu/Xtreme_14/frame_05.png new file mode 100644 index 0000000000000000000000000000000000000000..39f2d29795b9d2a44e33138be7c8daa0b5065c36 GIT binary patch literal 6982 zcmeHMXHb({w+=-NRX|a?A%dt7QVAp{C=jX=MOpwANQF?6m;?xTlp;k$5EK*;3rZCb zu+WPFN)Z()N>#9dpa`g_2hsb29?RTs=FXY9-@lWYoxFRMXRY<@wfDSx5@)~NT2@L` z3Iqbl+S*t+0KamJ11t`FUo(5|4gyJ!hB~b zJ>bOCO>ztOHZdi^@`|@d-)8pT&=0$G-Inao`zA0D_cC!$xtKYbtmrWG`El6E`4t{^ zIyKGbtDe1@*{YLjzxVu?+KDgPXXnO3?o8U0JRE*&bv@@0jS%Kre%&*;3G@m`Nj9^nXLbw&RBT*nL5&dUQ-dLgOdB*u% z_}Wm*$-P#dp22T?a=0dnk5e+ww!lmNcv7J@gWK`ZnBO(2U+dv{yfJy4G(Q(soaI-d zQkcJy*!#)7hqiHE=ANM)#j)_9PrvjRbWGBMfl#lgx@lF+oBGk=0(;QzctzQZSAC{v zd2$MlX$Ii!=HpsZ@v1s0ofk$=z9Q*?lhk)c_&qMoQ$BOK^Gx~2sX70{>B~p&n<^if zPUSQV2RD?S*cs6}=}1n}6L-WmBc8olc~nHf{iH*P-p82(VJeptz?WJ58ywE{1;zN- zH4w~(Osxs6#+q`+j`)G{!H(#tEU6knP)(UF2rz9REOZYgG5MWAUqCIX#DQdRCV{2Hh09R^Cb7maykGDWkm0H}=!J zo~ki}J^Nk;Mky@++|o*nNkmO#OFCw-W;+~n@1iCn3yQ~G+-ql#kzLPj*U5T@WS4KBj-c=DiwwOY*J+rX-GVc@mC|MhOtxH$j>pAx^*7g0T z@w;sf347?p*EOd_h{m)h%yo_$*xsZwK2}4U%oyhPg}I;bF+~MU3>z=#z{qNHLx?}W zFMPAHTU~QK;g*K#CON%`Y;0XyL~P2Fi~>7twSYTvdf`rnDMgzfj7zpdX(oClt15;%vHmIJ}TFVMpNavzk+R;H0 zQ!T|i$&o3=RWH&j9(k?ptg}UaZrKYN)|8a$r-@jr6`I|st@Z0FFe`daj=2VNwM;-= zM09v3$`AO|72%Aj?W>P(O1RGp@QqUymR;}_XsElJxk+GN9*>Y#DA44pOro_yXnqgZ z=Rivb)@8k7ENkmFW1f~NdE@8HH3HqMfC=MB`l{flS+!S6_ac=qmToD{WsyTw?zs6& zqF3CC@82_HabXk)JPT@OrkE9aa?eatT4^n_7E2@KqZ zHF3(TqCTq?MCIM6UcX+ZZz_CO&7#*LR?D8e%5!#e2IrL(CCfF>Z_Qe>}^LR6?`v9k}7;5ja7&G)p(gP zHG|hOI@W7fz4d{m5eC2b_Yy4*UG9lGJiVcFMG0n?@}Y8W_Y0E|r4~Dq68>RCg6Gbz z??!Nwbx4{0$aNio0hHD?$+|POj9w`Uu8v33K%(hRldK!2{#dbDAOI>N=TCV zn7?O@xg9JnU|-ACqf>il^Q=AWRXcc4xU+cDW%;usXZAeD>QQPQn3=GW|EL6Ak?ZSe ze4<=_KIz7I_@5#({_M+2*D6600`$|U&p!TQMz<)V8k_5+FcO=h*qaF_6~vPQ>0bNe zEU|LSUL2`PQpz*GNUWnuEAY(q*FdD;AlhZP6YKP{pgBa^s+O{i;_fJXf`-rFjGYQy zaNubanE8O3Ok264g5~62PH0pzzuE@Q)oII79I<5g%BRXZ23SiN9P75QQQvmfw(NF< zXtvo2bD4u42=$NU)%wc24n&Fv_0l)Sx2Qg}h72vYX#V`{9EB2c^XhZ+M?8Y|EGB+b zs_D_@{XKm_?Bv@)JUO?{a!;9~LjnDFo1}Lid@T0bsr7u0j`{memX~QWE6SU*e!tt* zd9SVpnSr+_X8*AMa7yj0Rt;znrE(Lt6XVz35{6${ulX#=+j84`)7j!ut=@Gv!6#N+ zjc|=v&|QTcH5nOX)QyZ{A!>5cYduA0W0ung4!MS2LH56l89Y~OJ}V0LG8U$hKOSjW zDI1LHK3)5#Yzs%dqsD#M6ZB3;a|#{%2o!Q|FJ*Lr?Bn0_MJZ_u1WaR9$ZH?3iG_&W z{kl3*JLrRaws`Ogv&+@{zz#Klxb(t4@Doyhusl68YGF)V#P@^zGxDpiT4t`pCgN^Q z!$f)U)_vgfPo}iMG&oP%EUEM{QC`}*LcaNO@-Fb@rvn<|EWj%1weK59s|PT<;qp#1 z@;dPmF=^A3W@OPTz;O-=L~TrDYaL=-tB@DZ2h6tuy3D#(S@ANfVVHQ^BEr3W$qm}A z%&!{aZh6@={K%*Yz%|Gk$fslu>dAQuqlRjSTnos`X^nPNf+d) z`oq1qeKJGc5?JL(V?N*2Sr+A>jK;!n=HnTdoms0=ZN%~#ooXNE^JDhF2N|i3uz22I zB64~aJe7n!`B%2zc2ui{a8jUz6_zPbTd&xOP^ z4;06`#4Jo{xz`!$>Y3jFb-k(4oq9Z|S9rwdwYGa#y5EozQiYP3Y8u$lsjs$Csl83d z-ZsJ57PP^n;2w2A}GlNU#t&%;gb@3oLS0S}Z8 zZ9nm1WwC!%{1undltTaXnhh1PI?=|&sN{I1ThUdOh*1bVs8Z{?GfVJ#lSraiM(bX? zLc`dw$txtivcrVhN9^|zI>nmhd6Z>A5b@VhkMb!qh)I{c_f|C>9WEt$+gfWhw>oaY zBSgUBMqW4n0wZVc6xJz>J4u|CO&q>{Wp&Gxt)1U|)otB+!-bAI_ra2{6WjWH?$uj( z0OQK7*hcRiUXx~~tb(SrvLu<*1b61fD*2`zI_~M)+%)Dijz8=l(fku;5+k~LJuT}k zb6)x+aUW)T5jt2^mmK?M;?$A7&-|t(@;F@=LLAEL;{ttWt!~K+vD+cjtV{xaCHb*M z5PJEh5JB4cbofxyqYq*d+m6Arg5qCl^=zx*2B#&umYBc3Gjn2+ls`-jRcIej85N{? zL=QmS-rh93=vWt~Fgah%TftaxB2Q%%otmnRk!K_w!*^?I+)%UE;7+s?ftSVIAUvg*H z@{IhBtGkRuB0j&mS=@bjzS4O|OtM^6y6f(lqX$Os-?%~(PJDWRjM~>}zn+oQqMm$h zTZR!iN^l7ryL*9$bn37-XL6H9zz5f#R)R(qhb}bD)yxNudN-K&#XZmfzPHe;pOV2- zg`R3&u$v2OL;d?ms!4=05J&{dA`zbIsY3r{{w{#CNP3{`pC3#*ucw178 zpnj_(?U?=jROW>b|g09+U22^7fw50g(=t zz02!g!$26o1+GpY5MhguOQHEO1Q062o5ePPzNu+| zLRfSYDA|yNAaRKdAC^rhkKq`)-H8_JN5j#fTQ*A(gm?fTfFYnjgaQ6+K3-@7UBbl! z&x>L>6tZL@@H2tBlI$Tw4vzuB7+?$#FiRmT2nF3N1tIY0OuU1I)prPBW&-sQ2)KAS zJUBSmAQ)}H;d#T6I2;a+K*3Qc7+?Y8hp+_{A&kvmw+QhK!-B!5@mO2|i^GO2Vp6D_ zK!FJq3g{t!=NG^wk$%9l`QKRp_<##3TsYDI0S^d(|LVaPSOx(g-xK7_cId@D?0e;9`2V7ADZe_;@;p#-ihw z9%)E4oq?np!Du)`It*iMjD=Bn%J zMhHVXjtN6xm}nRVgQCKyhDaLB5JyE&DHtRYOQHM%v4h6~x{~7mYgUU;bN~vAq#7Ed zm`oVf2n#?lsQ?t6ih)s#=@?@w#*mJ|GM1p|G`tmu7eE1)lNCVmX27{@?1iPpixVj#bv<*#Q?-o7W)(cSds&^;E6m2MZn=XaX9`a(8ZJ>i=IE!Bw#zyDFTWG zMZf?+5hyesfx@E@PDmUcjlmlt^$-X=;um`koy83KzpNKG4}|b-$!%DCAb!Y_=-ZBR zWbFMm`!@AwEo~(TWNB02DYS1T@F_tI`cj?%);AT+hr;$|0H??IcKut<`VXyOh(=>@ z2nH2~zyghg!Qu>II2^_hW<;YSu)wxQQ8CQl(fJ&vAeh2qn0W&{0$c&@xx^J@!_q=+ z{M|a(hq1T{0AVl$3igvQ)OW(*-wTE>o*92vOo0C{P6$f|zZ^1v-!~a>cmZc2{KsMV zowLPb=fC**z83$*2mtiILH-fH|I+m@UH^!Ie`Ne`cl}G(KVsk?8UNc||8I0j{k%>w z*uYy*FmPF#RUK9YE?T10ZPpeb(8YvxC}1YZwQ=JEe_E|v93r5MOl3g0TwqJGTs|hc zY9$o&mrY$FATqYKFmqDwe%@Io3qpX!Zs=0Krk)mcgKkKNOpR2pkOW26hvwQYe^AF3 nhaM@}AFaw5*57wY<$zdbfV76oRCGRo0kXB+ZgI)nEAoE;bKodu literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_06.png b/assets/icons/MainMenu/Xtreme_14/frame_06.png new file mode 100644 index 0000000000000000000000000000000000000000..782fc285428f304ee9201f4165fd050792a95396 GIT binary patch literal 6911 zcmeHMc{J4R+aGK8>|2X5B&jirSUlvV??) z7G=#=JtZU&+8!yI_e;xD@B2IFJ*3uRHm0A3X34>#W`KT8JB6&K>-IL==ihzc&m^4Np0Odr608oI-pg|zqL7rDY zl-7Egg?2rfcq}AkbVl|Weq+{XyWH`oWz4RW;eZIAQI=Bj`SWYveAvt1F=fgvP`_b+ zvY^M+$oFEQ`UIzBWKBF}t-R6~Aaa zQ+xH`V5F{ff!XR@%eP`?f7=`$G+~4b;6*PPuD$o=bI?V|h{5Tp5{Z(o$d$9hXCbxe5UxFUXok^dEHvXm6Bb#?c$u%o4QHi5rqbiHC z3QG%>A5JbuNQ4%L9vw#vY%IRhF`^yk+v*X0j+?n=l5trhxLqeJQuK+skfBBb<5S-cNQyNG)IF8r4td-zYn)_yCbsgN zIG(ohh_vXLK1i&X8(mC6Og*+&aMU?|OqC!ES?BD$?^T-XWQW-uf|HnOlw-qf zi6;}+<2CKl3&alCp75ZoF?`@-KdM*J+l!<(-I3mcf70P~Bq!?iz{jp?`;t284tjo? zjhYd)r;~OXGh|9TX$15RV016!+g(!zlz4;67b@@Y%HQc7$SkfI+!2uJ#eciUJYcBH z>q++26?0dxKEO?Bxwaf?x0<5z4v7xKQxayc{E6@7T~iAQ-6u;r=Y0~64sdY$7*gsE z>SW)c!i_3NtR30R@du$%9p3Z2m!~gISv^>AW9Bk~yj0b_DXkLH?psPto^+pku0eh@ zoc7uaIfzsVUU8yD;-$YfE>T_~WJq9#pZdK1uH5WPSKWPyf-_#KHI-L7@$|AD(LJ;N zLSa1I<6f`mU*hd1=4anOkOErPdq9PBByjZr@d( z*dSG3yysR+?}r*&n^CFNSm)aAtH%qeriP-zJ4AGOovA@{@O>i#+svLjuY1YgHF?8D z>!Iknj9!KJgI70kj)ftlx_Y}RJP((ncN3w!4d;(wu=`U~pVNJ-ubfewWQ9E>9ps&% z!!_Z0entt*ON2S|GHK+>@U5QY$)ooR#V?|D>0|JjG+ma<9hgMWk+UYet>;Vk)2hOr z(XNR+c;c~4Xd!aWZ9egxNe=WYw(2YtXjhZMV zuO7O6KS5V=O7L9cT;IJsv3br)8C20sg0!nm)=7iSjl-denk%GDB6}*;FRCF|qIM@0 zDuXTB{w`=sZTkB2Yd1vgw5H)R@3aUoo}%%YRq`IM9G5Y41E4J;p9Ho`R8jNnNr#$9 z@(%3>KC5CP6j2e@;3})Z+XS{9EjOH*U?W#BRApiHRY+%ZT*vnEo*oOQ$uzlYl(Pj=cfVewD6X`w zeQ5Ojm-%HG;{hqO zM=FrP5-N!87ZrZU?-DVq*vPDbP`%HU94%kAJY#lQeS&=N&JX?*1{k?B`bO~e0_Vi! zcQ%g4jwR|mnRxbgexkE3cFb$J-=^HYT~baFP4B0l{KYM-m+O9z)VgPjLj>hzZS#DD zSfqx(*4%2;(^=cE2eYPH+9FcMO`gvwqn;w97Tm}+D-52kDU1$3S^s@}S?_RXnf6{A zhuKN=Ui%-T_?dcGVYHT@v23?-ZQC>X?ii)}JJ%F`(aWgc>@a(||NU@3Uy@u?LY}+a z%-MPS-L{nRukmB{%^d!wUF9j`H&aJTK%Y$N*W+1Jwc78CnmH3W`L9~b_#)(*>GZbT z|EA=}59P+)v`6m+!FQz35m4JqVg#P`e-@0q^!Sj#;R};4T`9Y|eeZ3)pbS`=p27sA zA51T9MSlDs0vX~VWM7O+8XnJX5t`_~HyiqwglU{lb7JO^_*j{l`@2YF%io1e8njXFO zd2g{B-)3vPPoDC#qDOo;g%(LAA@j9T!zbd#UHI=mu>1HW%KWKm{F4d3lL!Ax*z3KD zy*_$oStemU{K=$Kr-h(1BIJnU?U6b?eBG|o zKXmVTyGcXt*LAsH$EPCvuma;{+l9GKLGmg$>4@KhS3zG9{1T9UARnl7$It8y> zp;VHM9rxRxahgr{3y3_Vlh{9KW<1u}l#Ilb`IcN*{w8ptxUMAB>*8p+_mGyb^<}Dz zh!bwd!R!h}P+4ma*EKqZ;m2R`pi!GhR*BC+>bz@5tRB ziJL&CM^l?xMOY`^bWWNoH}rW~lzA_Y`9#@pEsTq_>@W;?eV7B}p{?B>wE>vsyV$6M zBwJbFQ!IG}G=Ei`P0VPwg3V-Sq{q=qI#qrC(YRjo`su@MVQ&s2XWs7*+g=%D`{-}H zYfkmpRpW;Eq_NbaJ6v}@{`%SRPW;CgA}GIu8WCt$a~mW6yq<$%D-ulcM~s_ z=H$SphZsFo=h=+=C^mui5R{$dhL@y{qd#y-<(!?&{t{XgKp|L1W@P=9Wc9!%7H50LHMeaJI9s`0<_& zzMY@WIa;>4$ysrKee*e3P5%q1jGE8J!Mlx@WQ8TmJdnf!yVTp-`?U)`iQY^xaad+P zqx3}S^a7I;f;^xi!*3lr&99%0f1^$Es+55~xO8jP-wXEqd)p(M3N214pECD+8PmS8 z;O*|4WVM)a^^%v>rtK`n%sfusy<0afGz_ZDzT6t@X*Cv(F_Je;&e44UdwYzF->lU{ zi^$TsHq+Yugl7Cu|Dof~ihcLRg^X6Vv}L6`cb=fVUfE6A^4e84WQ(1yWAdX@0fjHD z-S6EUb;ih#-Kj~}yz8$|uppD_|@n(P;0N!@E4DeRt>F7YDFoX0-R3;hF=LUs< zw;l+@$dnsGq67dOC>fwLf{kI*we>J4gK7-hhIK?bhFAdp4BIFc;1=cNPKgSj5U4Oy z6A2?O5d;VVI3y@HC@`2!`3xHzuG5Scj6_*i? zhM7n}jaXC~(bdxWI|Mj0hWT?iAw&csA|gUR!a$$Nq9afQ0s($lhzHB0II8VKnA6ZbdkAGt3X zgI11?L`xKujzj>ka0(uYhhu1X8k_*2$#6q5j*Ouh z;wc0&{ud~_U^a&oOaT_5KyZBqh(o|p2}m>!4<{iFac~UYkPIgqB2jP>fHWW(;K&3d zlJpD278V2SN>bpjQ7uAIK`0CsWk{ou4dEy>jts|O0VJG6A>-jxER~AF14zISM_YoT zQi#?}RuBm+CnJbN2M{5_^d-e2;Y4$1J7XAHANh~OIgrGmfeywn2S#uh_aB8jBM5Ng zkQUiQ;qW*D8ihyVkSId~!*6LX;duZoHrR=am?)&a0eZ=Ou`EO|8IV}gVxNKlOL8z5 zq6G^eahNQ3CNt0&wg>@T^!%xI1h*5F#35OdH~my1Xd)Wvjv^2ZutX$wJrYSo z{$kIhGH8+ioAu)6ff{`)xh;bYt{=H1`nIFofY5KVZ__}=(pG{(mo^2FMERBin-mUE zm*NDmzNskwq+mJ#o*v)Z^@p7CA6mh{5J$jLa0YNB2|$6ZKnA-B3zid2BGG6#B#la- z;C@GEGijU%5(_Y=gFJ#h zV&GpH|LLwjbp0y^{+02c?)pEYOX8pF6c7x)1x0|DB^YpF1iWYolI?9QA&^Ulw9w#8 zJj8Z88~ndXVeu;f$v&+L3YT&09Icj(2`VaRiLOt0x&;*B>@3aQRl7$!P%;pxRFhfJ zYkvL8{iz}_li0q;8&;T|R(qwnQ`Z3y)JnC{$ZHyy>y6&3UJuD;ORjRyrtSa{Aa+(x KmRC0U#s3!%1R*E@ literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_07.png b/assets/icons/MainMenu/Xtreme_14/frame_07.png new file mode 100644 index 0000000000000000000000000000000000000000..5d56ce1fdcb0864bf6533acbffc529c308811fbe GIT binary patch literal 7733 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_08.png b/assets/icons/MainMenu/Xtreme_14/frame_08.png new file mode 100644 index 0000000000000000000000000000000000000000..a21cbb27c36e9fca2c36b63ecf1c152a6c20b5a4 GIT binary patch literal 8435 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 NtZ%MY`rEni{{p3kF53VA literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_09.png b/assets/icons/MainMenu/Xtreme_14/frame_09.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f07516a179ddc8a0abad14d697fc124d2943c4 GIT binary patch literal 8881 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_10.png b/assets/icons/MainMenu/Xtreme_14/frame_10.png new file mode 100644 index 0000000000000000000000000000000000000000..a888dd8a7a13e2483b8d7fe4d0466db12a464958 GIT binary patch literal 9296 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 literal 0 HcmV?d00001 diff --git a/assets/icons/MainMenu/Xtreme_14/frame_rate b/assets/icons/MainMenu/Xtreme_14/frame_rate new file mode 100644 index 000000000..e440e5c84 --- /dev/null +++ b/assets/icons/MainMenu/Xtreme_14/frame_rate @@ -0,0 +1 @@ +3 \ No newline at end of file From 8d78d6b524dfc23f14cd2868ba50deeef651a757 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 19:57:19 +0000 Subject: [PATCH 10/12] Small xtreme settings tweaks --- applications/main/xtreme_app/application.fam | 2 +- .../desktop/scenes/desktop_scene_lock_menu.c | 2 +- assets/icons/MainMenu/Xtreme_14/frame_11.png | Bin 9295 -> 0 bytes 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 assets/icons/MainMenu/Xtreme_14/frame_11.png diff --git a/applications/main/xtreme_app/application.fam b/applications/main/xtreme_app/application.fam index 8807b6dca..1cbbacf39 100644 --- a/applications/main/xtreme_app/application.fam +++ b/applications/main/xtreme_app/application.fam @@ -1,6 +1,6 @@ App( appid="xtreme_app", - name="Xtreme FW", + name="Xtreme Settings", apptype=FlipperAppType.APP, entry_point="xtreme_app", requires=[ diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index a0a2c08e9..9b4eabffd 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -98,7 +98,7 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { break; case DesktopLockMenuEventXtremeSettings: - loader_start(desktop->loader, "Xtreme FW", NULL); + loader_start(desktop->loader, "Xtreme Settings", NULL); break; default: break; diff --git a/assets/icons/MainMenu/Xtreme_14/frame_11.png b/assets/icons/MainMenu/Xtreme_14/frame_11.png deleted file mode 100644 index 8737ae1ad94dc88abfc0085670e51a94d47071a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9295 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 From 85e77d82dbcf8de9fa00dd6e66369500197110d7 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 20 Feb 2023 20:30:40 +0000 Subject: [PATCH 11/12] Remove dolphin deeds (xp) from games --- applications/plugins/arkanoid/arkanoid_game.c | 4 ---- applications/plugins/blackjack/blackjack.c | 7 +------ applications/plugins/doom/doom.c | 4 ---- applications/plugins/flappy_bird/flappy_bird.c | 9 --------- applications/plugins/game15/game15.c | 4 ---- applications/plugins/game_2048/game_2048.c | 4 ---- applications/plugins/heap_defence_game/heap_defence.c | 4 ---- applications/plugins/minesweeper/minesweeper.c | 7 ------- applications/plugins/pomodoro/flipp_pomodoro_app.c | 7 +------ applications/plugins/snake_game/snake_game.c | 3 --- applications/plugins/solitaire/solitaire.c | 5 ----- applications/plugins/tetris_game/tetris_game.c | 10 +--------- applications/plugins/tictactoe_game/tictactoe_game.c | 6 +----- applications/plugins/zombiez/zombiez.c | 6 +----- applications/services/dolphin/helpers/dolphin_deed.c | 2 -- applications/services/dolphin/helpers/dolphin_deed.h | 2 -- 16 files changed, 5 insertions(+), 79 deletions(-) diff --git a/applications/plugins/arkanoid/arkanoid_game.c b/applications/plugins/arkanoid/arkanoid_game.c index 0b9bb91e9..af9976c98 100644 --- a/applications/plugins/arkanoid/arkanoid_game.c +++ b/applications/plugins/arkanoid/arkanoid_game.c @@ -5,7 +5,6 @@ #include #include #include -#include #define TAG "Arkanoid" @@ -398,9 +397,6 @@ int32_t arkanoid_game_app(void* p) { Gui* gui = furi_record_open(RECORD_GUI); gui_add_view_port(gui, view_port, GuiLayerFullscreen); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - GameEvent event; for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); diff --git a/applications/plugins/blackjack/blackjack.c b/applications/plugins/blackjack/blackjack.c index 9314e21dd..384104378 100644 --- a/applications/plugins/blackjack/blackjack.c +++ b/applications/plugins/blackjack/blackjack.c @@ -1,7 +1,6 @@ #include #include -#include #include #include @@ -278,7 +277,6 @@ void dealer_tick(GameState* game_state) { if(dealer_score >= DEALER_MAX) { if(dealer_score > 21 || dealer_score < player_score) { - DOLPHIN_DEED(DolphinDeedPluginGameWin); enqueue( &(game_state->queue_state), game_state, @@ -572,9 +570,6 @@ int32_t blackjack_app(void* p) { AppEvent event; - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); GameState* localstate = (GameState*)acquire_mutex_block(&state_mutex); @@ -635,4 +630,4 @@ free_and_exit: furi_message_queue_free(event_queue); return return_code; -} \ No newline at end of file +} diff --git a/applications/plugins/doom/doom.c b/applications/plugins/doom/doom.c index 65b63c75b..78a06055c 100644 --- a/applications/plugins/doom/doom.c +++ b/applications/plugins/doom/doom.c @@ -13,7 +13,6 @@ #include "level.h" #include #include -#include #define SOUND @@ -996,9 +995,6 @@ int32_t doom_app() { music_player_worker_load_rtttl_from_string(plugin_state->music_instance->worker, dsintro); music_player_worker_start(plugin_state->music_instance->worker); #endif - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); PluginState* plugin_state = (PluginState*)acquire_mutex_block(&state_mutex); diff --git a/applications/plugins/flappy_bird/flappy_bird.c b/applications/plugins/flappy_bird/flappy_bird.c index 2a885f985..2eeaf7816 100644 --- a/applications/plugins/flappy_bird/flappy_bird.c +++ b/applications/plugins/flappy_bird/flappy_bird.c @@ -1,12 +1,10 @@ #include -#include #include #include #include #include #include -#include #define TAG "Flappy" #define DEBUG false @@ -257,10 +255,6 @@ static void flappy_game_render_callback(Canvas* const canvas, void* ctx) { canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 37, 31, "Game Over"); - if(game_state->points != 0 && game_state->points % 5 == 0) { - DOLPHIN_DEED(getRandomDeed()); - } - canvas_set_font(canvas, FontSecondary); char buffer[12]; snprintf(buffer, sizeof(buffer), "Score: %u", game_state->points); @@ -313,9 +307,6 @@ int32_t flappy_game_app(void* p) { Gui* gui = furi_record_open(RECORD_GUI); gui_add_view_port(gui, view_port, GuiLayerFullscreen); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - GameEvent event; for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); diff --git a/applications/plugins/game15/game15.c b/applications/plugins/game15/game15.c index 43d2e12f4..8faea4380 100644 --- a/applications/plugins/game15/game15.c +++ b/applications/plugins/game15/game15.c @@ -3,7 +3,6 @@ #include #include #include -#include #include "sandbox.h" @@ -463,9 +462,6 @@ int32_t game15_app() { sandbox_init( FPS, (SandboxRenderCallback)render_callback, (SandboxEventHandler)game_event_handler); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - sandbox_loop(); sandbox_free(); game_free(); diff --git a/applications/plugins/game_2048/game_2048.c b/applications/plugins/game_2048/game_2048.c index 1a2f4a4d3..097f0d3d5 100644 --- a/applications/plugins/game_2048/game_2048.c +++ b/applications/plugins/game_2048/game_2048.c @@ -13,7 +13,6 @@ #include #include #include -#include #include "digits.h" #include "array_utils.h" @@ -398,9 +397,6 @@ int32_t game_2048_app() { Gui* gui = furi_record_open(RECORD_GUI); gui_add_view_port(gui, view_port, GuiLayerFullscreen); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - bool is_finished = false; while(!is_finished) { FuriStatus event_status = furi_message_queue_get(event_queue, &input, FuriWaitForever); diff --git a/applications/plugins/heap_defence_game/heap_defence.c b/applications/plugins/heap_defence_game/heap_defence.c index e40a97803..a22a8db22 100644 --- a/applications/plugins/heap_defence_game/heap_defence.c +++ b/applications/plugins/heap_defence_game/heap_defence.c @@ -15,7 +15,6 @@ #include #include #include -#include #define Y_FIELD_SIZE 6 #define Y_LAST (Y_FIELD_SIZE - 1) @@ -531,9 +530,6 @@ int32_t heap_defence_app(void* p) { game->game_status = 0; game->animation = AnimationPause; - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - GameEvent event = {0}; while(event.input.key != InputKeyBack) { if(furi_message_queue_get(event_queue, &event, 100) != FuriStatusOk) { diff --git a/applications/plugins/minesweeper/minesweeper.c b/applications/plugins/minesweeper/minesweeper.c index cbc1329bc..cbfeb2aa1 100644 --- a/applications/plugins/minesweeper/minesweeper.c +++ b/applications/plugins/minesweeper/minesweeper.c @@ -8,7 +8,6 @@ #include #include -#include #include "assets.h" @@ -253,9 +252,6 @@ static bool game_won(Minesweeper* minesweeper_state) { dialog_message_set_buttons(message, NULL, "Play again", NULL); dialog_message_set_icon(message, NULL, 72, 17); - // Call dolphin deed when we win the game - DOLPHIN_DEED(DolphinDeedPluginGameWin); - DialogMessageButton choice = dialog_message_show(dialogs, message); dialog_message_free(message); furi_string_free(tempStr); @@ -410,9 +406,6 @@ int32_t minesweeper_app(void* p) { Gui* gui = furi_record_open("gui"); gui_add_view_port(gui, view_port, GuiLayerFullscreen); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - PluginEvent event; for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); diff --git a/applications/plugins/pomodoro/flipp_pomodoro_app.c b/applications/plugins/pomodoro/flipp_pomodoro_app.c index ed5b8282b..2ddf8cf68 100644 --- a/applications/plugins/pomodoro/flipp_pomodoro_app.c +++ b/applications/plugins/pomodoro/flipp_pomodoro_app.c @@ -29,11 +29,6 @@ static bool flipp_pomodoro_app_custom_event_callback(void* ctx, uint32_t event) app->view_dispatcher, FlippPomodoroAppCustomEventStateUpdated); return CustomEventConsumed; case FlippPomodoroAppCustomEventStageComplete: - if(flipp_pomodoro__get_stage(app->state) == FlippPomodoroStageFocus) { - // REGISTER a deed on work stage complete to get an acheivement - DOLPHIN_DEED(DolphinDeedPluginGameWin); - }; - flipp_pomodoro__toggle_stage(app->state); notification_message( app->notification_app, @@ -98,4 +93,4 @@ int32_t flipp_pomodoro_app(void* p) { flipp_pomodoro_app_free(app); return 0; -}; \ No newline at end of file +}; diff --git a/applications/plugins/snake_game/snake_game.c b/applications/plugins/snake_game/snake_game.c index 2815e2f37..d2eb22f13 100644 --- a/applications/plugins/snake_game/snake_game.c +++ b/applications/plugins/snake_game/snake_game.c @@ -2,7 +2,6 @@ #include #include #include -#include #include #include @@ -346,8 +345,6 @@ int32_t snake_game_app(void* p) { notification_message_block(notification, &sequence_display_backlight_enforce_on); - DOLPHIN_DEED(DolphinDeedPluginGameStart); - SnakeEvent event; for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); diff --git a/applications/plugins/solitaire/solitaire.c b/applications/plugins/solitaire/solitaire.c index bfb533d82..78205ad69 100644 --- a/applications/plugins/solitaire/solitaire.c +++ b/applications/plugins/solitaire/solitaire.c @@ -1,5 +1,4 @@ #include -#include #include #include #include "defines.h" @@ -277,7 +276,6 @@ void tick(GameState* game_state, NotificationApp* notification) { if(game_state->state == GameStatePlay) { if(game_state->top_cards[0].character == 11 && game_state->top_cards[1].character == 11 && game_state->top_cards[2].character == 11 && game_state->top_cards[3].character == 11) { - DOLPHIN_DEED(DolphinDeedPluginGameWin); game_state->state = GameStateAnimate; return; } @@ -492,9 +490,6 @@ int32_t solitaire_app(void* p) { AppEvent event; - // Call Dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 150); GameState* localstate = (GameState*)acquire_mutex_block(&state_mutex); diff --git a/applications/plugins/tetris_game/tetris_game.c b/applications/plugins/tetris_game/tetris_game.c index 366f405f3..1e8e85afa 100644 --- a/applications/plugins/tetris_game/tetris_game.c +++ b/applications/plugins/tetris_game/tetris_game.c @@ -6,7 +6,6 @@ #include #include #include -#include #define BORDER_OFFSET 1 #define MARGIN_OFFSET 3 @@ -154,10 +153,6 @@ static void tetris_game_render_callback(Canvas* const canvas, void* ctx) { canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 4, 63, "Game Over"); - if(tetris_state->numLines % 8 == 0 && tetris_state->numLines != 0) { - DOLPHIN_DEED(getRandomDeed()); - } - char buffer[13]; snprintf(buffer, sizeof(buffer), "Lines: %u", tetris_state->numLines); canvas_set_font(canvas, FontSecondary); @@ -395,9 +390,6 @@ int32_t tetris_game_app() { Piece* newPiece = malloc(sizeof(Piece)); uint8_t downRepeatCounter = 0; - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - for(bool processing = true; processing;) { // This 10U implicitly sets the game loop speed. downRepeatCounter relies on this value FuriStatus event_status = furi_message_queue_get(event_queue, &event, 10U); @@ -484,4 +476,4 @@ int32_t tetris_game_app() { free(tetris_state); return 0; -} \ No newline at end of file +} diff --git a/applications/plugins/tictactoe_game/tictactoe_game.c b/applications/plugins/tictactoe_game/tictactoe_game.c index ec82192a8..93536c61a 100644 --- a/applications/plugins/tictactoe_game/tictactoe_game.c +++ b/applications/plugins/tictactoe_game/tictactoe_game.c @@ -3,7 +3,6 @@ #include #include #include -#include #define TAG "TicTacToe" @@ -331,9 +330,6 @@ int32_t tictactoe_game_app(void* p) { Gui* gui = furi_record_open(RECORD_GUI); gui_add_view_port(gui, view_port, GuiLayerFullscreen); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - GameEvent event; for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); @@ -383,4 +379,4 @@ int32_t tictactoe_game_app(void* p) { free(tictactoe_state); return 0; -} \ No newline at end of file +} diff --git a/applications/plugins/zombiez/zombiez.c b/applications/plugins/zombiez/zombiez.c index 2677d13e0..af873ef20 100644 --- a/applications/plugins/zombiez/zombiez.c +++ b/applications/plugins/zombiez/zombiez.c @@ -2,7 +2,6 @@ #include #include #include -#include //ORIGINAL REPO: https://github.com/Dooskington/flipperzero-zombiez //AUTHORS: https://github.com/Dooskington | https://github.com/DevMilanIan @@ -314,9 +313,6 @@ int32_t zombiez_game_app(void* p) { Gui* gui = furi_record_open(RECORD_GUI); gui_add_view_port(gui, view_port, GuiLayerFullscreen); - // Call dolphin deed on game start - DOLPHIN_DEED(DolphinDeedPluginGameStart); - PluginEvent event; bool isRunning = true; while(isRunning) { @@ -401,4 +397,4 @@ free_and_exit: furi_message_queue_free(event_queue); return return_code; -} \ No newline at end of file +} diff --git a/applications/services/dolphin/helpers/dolphin_deed.c b/applications/services/dolphin/helpers/dolphin_deed.c index 4b9f11599..2cbaf84a6 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.c +++ b/applications/services/dolphin/helpers/dolphin_deed.c @@ -40,8 +40,6 @@ static const DolphinDeedWeight dolphin_deed_weights[] = { {1, DolphinAppPlugin}, // DolphinDeedGpioUartBridge {1, DolphinAppPlugin}, // DolphinDeedPluginStart - {1, DolphinAppPlugin}, // DolphinDeedPluginGameStart - {10, DolphinAppPlugin}, // DolphinDeedPluginGameWin }; static uint8_t dolphin_deed_limits[] = { diff --git a/applications/services/dolphin/helpers/dolphin_deed.h b/applications/services/dolphin/helpers/dolphin_deed.h index 51adf6b20..d81166417 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.h +++ b/applications/services/dolphin/helpers/dolphin_deed.h @@ -56,8 +56,6 @@ typedef enum { DolphinDeedGpioUartBridge, DolphinDeedPluginStart, - DolphinDeedPluginGameStart, - DolphinDeedPluginGameWin, DolphinDeedMAX, From 4874f38c92f38feb7f6842a1440ce3520789b069 Mon Sep 17 00:00:00 2001 From: Ari Bytyqi <101530102+Z3BRO@users.noreply.github.com> Date: Mon, 20 Feb 2023 22:56:50 -0600 Subject: [PATCH 12/12] Fixed First Start Animation Typo --- assets/slideshow/first_start/frame_02.png | Bin 562 -> 656 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/slideshow/first_start/frame_02.png b/assets/slideshow/first_start/frame_02.png index dc1080abaab43b40f9214c53e444839f9f3c9ffb..adff6af6672bc6f13ad0be1c0f7d19db4955f589 100644 GIT binary patch delta 643 zcmV-}0(||l1ds)g7=H)@0002x2#-ww0004VQb$4nuFf3k00006P)t-s|Ns900033O z(|!N|0v<_3K~!jg?Usvjgdhw>$^ZX!J1dVoZW2)3PG`upu7Yw8m|Q94#EBCpPMkRL zUxPM8HfpH9WfE3Bx_$wG#06fF2*6vzLUVv@bXUo3_W+915q}RJtu^i%0G}Cu{yD(a zRwp*joUy}v!<}7?F1h+w6Ng%xIJiS6xc~`VfZ8jxue5LhxB!hol-Lsh@c;mbrSKA{ z96$gn2V4MN3sC5u_w+6loi|c zh+yjh?R@sAKbpSdNL~|U0K;)Qz`_c6*1rHCx0^Hi+SzXacsa0I1@?BEMa~L53h`|> z9oqcmT{{87?DtwXI^m@LYXGzQCJDC01Ar|Azr*|h{u~6R)=RWQ0000EWmrjOO-%qQ d00008000000002eQcz2XilNogTwuu7~B5w5vn;e3F20e`W(DTKpH#XNu(EBFSM zQ(E~93pSQ1E!4gLH#-~GJi|?z>@VMb^XHoh{x4aotd<4hvLLj=4+hxc2hagBpg=5O z(fjT}Swz-D!g9hg*%AI8B|kPF2<_@ceLDKQpRe<4mreQ}lKuRN&{qkP8nnrfGC@~* zjM(FzkTJohH-Dd_mBMBc4INbjdvHs%qefDOLb3>%K#C;Y319~SjEBBL34L()FxmKB zFf_)kh}%x{_37>IIU$;L72za*3NR?r_(dvo4bF9*p?}@oPc}Sk1HBn{v3`yO<@gq~ zLJgeIAJ-f*hr!cmKnm3mlR8S()jG$HFIhfWY-x>MNGyj{1sW)uR=FJ*r(a)QP}+KndE%yd>|C%9KqbsgZ!@ n!-X*daUS@46g7nZOX>arU#^{;{__u)00000NkvXXu0mjfq&fEl