From 640637ce6094bf1f23ebb77c0f116f6e542a4f52 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 10 May 2023 12:19:01 +0100 Subject: [PATCH] New namespoof implementation --- .../scenes/xtreme_app_scene_misc_rename.c | 2 +- applications/main/xtreme_app/xtreme_app.c | 21 +-- applications/main/xtreme_app/xtreme_app.h | 4 +- applications/services/application.fam | 1 - .../services/namechangersrv/application.fam | 7 - .../services/namechangersrv/namechangersrv.c | 163 ------------------ .../services/namechangersrv/namechangersrv.h | 10 -- firmware/targets/f7/api_symbols.csv | 2 +- .../targets/f7/furi_hal/furi_hal_version.c | 23 +-- .../furi_hal_include/furi_hal_version.h | 2 +- furi/flipper.c | 7 +- lib/xtreme/namespoof.c | 26 +++ lib/xtreme/namespoof.h | 5 + lib/xtreme/private.h | 1 + 14 files changed, 50 insertions(+), 224 deletions(-) delete mode 100644 applications/services/namechangersrv/application.fam delete mode 100644 applications/services/namechangersrv/namechangersrv.c delete mode 100644 applications/services/namechangersrv/namechangersrv.h create mode 100644 lib/xtreme/namespoof.c create mode 100644 lib/xtreme/namespoof.h diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_rename.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_rename.c index 47a0fb607..dd01a60ca 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_rename.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_rename.c @@ -42,7 +42,7 @@ void xtreme_app_scene_misc_rename_on_enter(void* context) { xtreme_app_scene_misc_rename_text_input_callback, app, app->device_name, - NAMECHANGER_TEXT_STORE_SIZE, + FURI_HAL_VERSION_ARRAY_NAME_LENGTH, true); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewTextInput); diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index 57706233e..e86db4fc5 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -69,28 +69,15 @@ bool xtreme_app_apply(XtremeApp* app) { if(app->save_name) { if(strcmp(app->device_name, "") == 0) { - storage_simply_remove(storage, NAMECHANGER_PATH); + storage_simply_remove(storage, NAMESPOOF_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.")) + if(!flipper_format_file_open_always(file, NAMESPOOF_PATH)) break; + if(!flipper_format_write_header_cstr(file, NAMESPOOF_HEADER, NAMESPOOF_VERSION)) 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); @@ -262,7 +249,7 @@ XtremeApp* xtreme_app_alloc() { furi_hal_subghz_get_extend_settings(&app->subghz_extend, &app->subghz_bypass); - strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); + strlcpy(app->device_name, furi_hal_version_get_name_ptr(), FURI_HAL_VERSION_ARRAY_NAME_LENGTH); Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); DolphinStats stats = dolphin_stats(dolphin); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index 15cd71ce9..f7d79249d 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -12,7 +12,6 @@ #include #include #include -#include #include "scenes/xtreme_app_scene.h" #include "dolphin/helpers/dolphin_state.h" #include "dolphin/dolphin.h" @@ -23,6 +22,7 @@ #include #include #include +#include #include #define XTREME_SUBGHZ_FREQ_BUFFER_SIZE 6 @@ -52,7 +52,7 @@ typedef struct { char subghz_freq_buffer[XTREME_SUBGHZ_FREQ_BUFFER_SIZE]; bool subghz_extend; bool subghz_bypass; - char device_name[NAMECHANGER_TEXT_STORE_SIZE]; + char device_name[FURI_HAL_VERSION_ARRAY_NAME_LENGTH]; int32_t xp_level; FuriString* version_tag; diff --git a/applications/services/application.fam b/applications/services/application.fam index af02ef1a1..03bd4f8c1 100644 --- a/applications/services/application.fam +++ b/applications/services/application.fam @@ -10,6 +10,5 @@ App( "loader", "power", "rgb_backlight", - "namechangersrv", ], ) diff --git a/applications/services/namechangersrv/application.fam b/applications/services/namechangersrv/application.fam deleted file mode 100644 index 3263a3708..000000000 --- a/applications/services/namechangersrv/application.fam +++ /dev/null @@ -1,7 +0,0 @@ -App( - appid="namechangersrv", - apptype=FlipperAppType.STARTUP, - entry_point="namechanger_on_system_start", - requires=["storage"], - order=1000, -) diff --git a/applications/services/namechangersrv/namechangersrv.c b/applications/services/namechangersrv/namechangersrv.c deleted file mode 100644 index 33aeb3fdd..000000000 --- a/applications/services/namechangersrv/namechangersrv.c +++ /dev/null @@ -1,163 +0,0 @@ -#include "namechangersrv.h" -#include "m-string.h" -#include -#include - -void namechanger_on_system_start() { - if(!furi_hal_is_normal_boot()) { - FURI_LOG_W(TAG, "NameChangerSRV load skipped. Device is in special startup mode."); - } else { - Storage* storage = furi_record_open(RECORD_STORAGE); - FlipperFormat* file = flipper_format_file_alloc(storage); - - FuriString* NAMEHEADER; - NAMEHEADER = furi_string_alloc_set("Flipper Name File"); - - bool result = false; - - FuriString* data; - data = furi_string_alloc(); - - do { - if(!flipper_format_file_open_existing(file, NAMECHANGER_PATH)) { - break; - } - - // header - uint32_t version; - - if(!flipper_format_read_header(file, data, &version)) { - break; - } - - if(furi_string_cmp_str(data, furi_string_get_cstr(NAMEHEADER)) != 0) { - break; - } - - if(version != 1) { - break; - } - - // get Name - if(!flipper_format_read_string(file, "Name", data)) { - break; - } - - result = true; - } while(false); - - flipper_format_free(file); - - if(!result) { - //file not good - write new one - FlipperFormat* file = flipper_format_file_alloc(storage); - - bool res = false; - - do { - // Open file for write - if(!flipper_format_file_open_always(file, NAMECHANGER_PATH)) { - break; - } - - // Write header - if(!flipper_format_write_header_cstr(file, furi_string_get_cstr(NAMEHEADER), 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 can contain other characters but use at your own risk.")) { - break; - } - - //Write name - if(!flipper_format_write_string_cstr( - file, "Name", furi_hal_version_get_name_ptr())) { - break; - } - - res = true; - } while(false); - - flipper_format_free(file); - - if(!res) { - FURI_LOG_E(TAG, "Save failed."); - } - } else { - if(!furi_string_size(data)) { - //Empty file - get default name and write to file. - FlipperFormat* file = flipper_format_file_alloc(storage); - - bool res = false; - - do { - // Open file for write - if(!flipper_format_file_open_always(file, NAMECHANGER_PATH)) { - break; - } - - // Write header - if(!flipper_format_write_header_cstr( - file, furi_string_get_cstr(NAMEHEADER), 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; - } - - //Write name - if(!flipper_format_write_string_cstr( - file, "Name", furi_hal_version_get_name_ptr())) { - break; - } - - res = true; - } while(false); - - flipper_format_free(file); - - if(!res) { - FURI_LOG_E(TAG, "Save failed."); - } - } else { - char newdata[9]; - snprintf(newdata, 9, "%s", furi_string_get_cstr(data)); - //set name from file - furi_hal_version_set_custom_name(newdata); - } - } - - furi_string_free(data); - - furi_record_close(RECORD_STORAGE); - } -} diff --git a/applications/services/namechangersrv/namechangersrv.h b/applications/services/namechangersrv/namechangersrv.h deleted file mode 100644 index d440b19bc..000000000 --- a/applications/services/namechangersrv/namechangersrv.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include -#include - -#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/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index b1dfb9afe..824dee830 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1535,7 +1535,7 @@ Function,+,furi_hal_version_get_model_name,const char*, Function,+,furi_hal_version_get_name_ptr,const char*, Function,+,furi_hal_version_get_otp_version,FuriHalVersionOtpVersion, Function,-,furi_hal_version_init,void, -Function,+,furi_hal_version_set_custom_name,void,const char* +Function,-,furi_hal_version_set_name,void,const char* Function,+,furi_hal_version_uid,const uint8_t*, Function,+,furi_hal_version_uid_size,size_t, Function,-,furi_hal_vibro_init,void, diff --git a/firmware/targets/f7/furi_hal/furi_hal_version.c b/firmware/targets/f7/furi_hal/furi_hal_version.c index 43a48d136..32cf5386d 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_version.c +++ b/firmware/targets/f7/furi_hal/furi_hal_version.c @@ -90,26 +90,13 @@ typedef struct { static FuriHalVersion furi_hal_version = {0}; -void furi_hal_version_set_custom_name(const char* name) { - if((name != NULL) && ((strlen(name) >= 1) && (strlen(name) <= 8))) { +void furi_hal_version_set_name(const char* name) { + if(name != NULL && strlen(name)) { strlcpy(furi_hal_version.name, name, FURI_HAL_VERSION_ARRAY_NAME_LENGTH); snprintf( furi_hal_version.device_name, FURI_HAL_VERSION_DEVICE_NAME_LENGTH, - "x%s", // Someone tell me why that X is needed - name); - - furi_hal_version.device_name[0] = AD_TYPE_COMPLETE_LOCAL_NAME; - } -} - -static void furi_hal_version_set_name(const char* name) { - if(name != NULL) { - strlcpy(furi_hal_version.name, name, FURI_HAL_VERSION_ARRAY_NAME_LENGTH); - snprintf( - furi_hal_version.device_name, - FURI_HAL_VERSION_DEVICE_NAME_LENGTH, - "x%s", // Someone tell me why that X is needed + "x%s", // Someone tell me why that X is needed - it's for BLE adv name type (6 lines below) furi_hal_version.name); } else { snprintf(furi_hal_version.device_name, FURI_HAL_VERSION_DEVICE_NAME_LENGTH, "xFlipper"); @@ -119,8 +106,8 @@ static void furi_hal_version_set_name(const char* name) { // BLE Mac address uint32_t udn = LL_FLASH_GetUDN(); - if(version_get_custom_name(NULL) != NULL) { - udn = *((uint32_t*)version_get_custom_name(NULL)); + if(name != NULL) { + udn = *((uint32_t*)name); } uint32_t company_id = LL_FLASH_GetSTCompanyID(); diff --git a/firmware/targets/furi_hal_include/furi_hal_version.h b/firmware/targets/furi_hal_include/furi_hal_version.h index 2ff6730f6..3c1755512 100644 --- a/firmware/targets/furi_hal_include/furi_hal_version.h +++ b/firmware/targets/furi_hal_include/furi_hal_version.h @@ -159,7 +159,7 @@ FuriHalVersionDisplay furi_hal_version_get_hw_display(); uint32_t furi_hal_version_get_hw_timestamp(); // Set custom name -void furi_hal_version_set_custom_name(const char* name); +void furi_hal_version_set_name(const char* name); /** Get pointer to target name * diff --git a/furi/flipper.c b/furi/flipper.c index 1b13d8bf1..d2b4f9047 100644 --- a/furi/flipper.c +++ b/furi/flipper.c @@ -33,11 +33,11 @@ void flipper_start_service(const FlipperApplication* service) { FuriThread* thread = furi_thread_alloc_ex(service->name, service->stack_size, service->app, NULL); - furi_thread_mark_as_service(thread); + furi_thread_mark_as_service(thread); furi_thread_set_appid(thread, service->appid); - furi_thread_start(thread); - } + furi_thread_start(thread); +} void flipper_init() { flipper_print_version("Firmware", furi_hal_version_get_firmware_version()); @@ -47,6 +47,7 @@ void flipper_init() { // Start storage service first, thanks OFW :/ flipper_start_service(&FLIPPER_SERVICES[0]); + NAMESPOOF_INIT(); XTREME_SETTINGS_LOAD(); XTREME_ASSETS_LOAD(); diff --git a/lib/xtreme/namespoof.c b/lib/xtreme/namespoof.c new file mode 100644 index 000000000..9785700dd --- /dev/null +++ b/lib/xtreme/namespoof.c @@ -0,0 +1,26 @@ +#include "namespoof.h" +#include +#include + +#define TAG "NameSpoof" + +void NAMESPOOF_INIT() { + FuriString* str = furi_string_alloc(); + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* file = flipper_format_file_alloc(storage); + + do { + uint32_t version; + if(!flipper_format_file_open_existing(file, NAMESPOOF_PATH)) break; + if(!flipper_format_read_header(file, str, &version)) break; + if(furi_string_cmp_str(str, NAMESPOOF_HEADER)) break; + if(version != NAMESPOOF_VERSION) break; + + if(!flipper_format_read_string(file, "Name", str)) break; + furi_hal_version_set_name(furi_string_get_cstr(str)); + } while(false); + + flipper_format_free(file); + furi_record_close(RECORD_STORAGE); + furi_string_free(str); +} diff --git a/lib/xtreme/namespoof.h b/lib/xtreme/namespoof.h new file mode 100644 index 000000000..5d7e91a1f --- /dev/null +++ b/lib/xtreme/namespoof.h @@ -0,0 +1,5 @@ +#pragma once + +#define NAMESPOOF_HEADER "Flipper Name File" +#define NAMESPOOF_VERSION 1 +#define NAMESPOOF_PATH EXT_PATH("dolphin/name.txt") diff --git a/lib/xtreme/private.h b/lib/xtreme/private.h index d1644c3e3..2718b67af 100644 --- a/lib/xtreme/private.h +++ b/lib/xtreme/private.h @@ -1,4 +1,5 @@ #pragma once +void NAMESPOOF_INIT(); void XTREME_SETTINGS_LOAD(); void XTREME_ASSETS_LOAD();