From 87b775a48b80dc2ccffd1b5736627d5126427f81 Mon Sep 17 00:00:00 2001 From: ESurge Date: Tue, 27 Sep 2022 00:13:40 -0700 Subject: [PATCH 1/3] Adding NameChanger Service - Reads and sets name from file at boot. --- applications/services/application.fam | 1 + .../services/namechangersrv/application.fam | 7 + .../services/namechangersrv/namechangersrv.c | 178 ++++++++++++++++++ .../services/namechangersrv/namechangersrv.h | 9 + .../targets/f7/furi_hal/furi_hal_version.c | 10 + .../furi_hal_include/furi_hal_version.h | 3 + 6 files changed, 208 insertions(+) create mode 100644 applications/services/namechangersrv/application.fam create mode 100644 applications/services/namechangersrv/namechangersrv.c create mode 100644 applications/services/namechangersrv/namechangersrv.h diff --git a/applications/services/application.fam b/applications/services/application.fam index 0389d1cba..8d7d8168a 100644 --- a/applications/services/application.fam +++ b/applications/services/application.fam @@ -10,5 +10,6 @@ App( "loader", "power", "ibuttonsrv", + "namechangersrv", ], ) diff --git a/applications/services/namechangersrv/application.fam b/applications/services/namechangersrv/application.fam new file mode 100644 index 000000000..5b64db607 --- /dev/null +++ b/applications/services/namechangersrv/application.fam @@ -0,0 +1,7 @@ +App( + appid="namechangersrv", + apptype=FlipperAppType.STARTUP, + entry_point="namechanger_on_system_start", + requires=["storage"], + order=130, +) \ No newline at end of file diff --git a/applications/services/namechangersrv/namechangersrv.c b/applications/services/namechangersrv/namechangersrv.c new file mode 100644 index 000000000..675cf2716 --- /dev/null +++ b/applications/services/namechangersrv/namechangersrv.c @@ -0,0 +1,178 @@ +#include "namechangersrv.h" +#include "m-string.h" +#include +#include + +void namechanger_on_system_start() { + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* file = flipper_format_file_alloc(storage); + + string_t NAMEHEADER; + string_init_set_str(NAMEHEADER, "Flipper Name File"); + + string_t folderpath; + string_init_set_str(folderpath, "/ext/dolphin"); + + string_t filepath; + string_init_set_str(filepath, "/ext/dolphin/name.txt"); + + //Make dir if doesn't exist + if(storage_simply_mkdir(storage, string_get_cstr(folderpath))) { + bool result = false; + + string_t data; + string_init(data); + + do { + if(!flipper_format_file_open_existing(file, string_get_cstr(filepath))) { + break; + } + + // header + uint32_t version; + + if(!flipper_format_read_header(file, data, &version)) { + break; + } + + if(string_cmp_str(data, 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; + + string_t name; + string_init_set_str(name, furi_hal_version_get_name_ptr()); + + do { + // Open file for write + if(!flipper_format_file_open_always(file, string_get_cstr(filepath))) { + break; + } + + // Write header + if(!flipper_format_write_header_cstr(file, 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", string_get_cstr(name))) { + break; + } + + res = true; + } while(false); + + flipper_format_free(file); + + if(!res) { + FURI_LOG_E(TAG, "Save failed."); + } + + string_clear(name); + } else { + string_strim(data); + FURI_LOG_I(TAG, "data: %s", data); + + if(!string_size(data)) { + //Empty file - get default name and write to file. + FlipperFormat* file = flipper_format_file_alloc(storage); + + bool res = false; + + string_t name; + string_init_set_str(name, furi_hal_version_get_name_ptr()); + + do { + // Open file for write + if(!flipper_format_file_open_always(file, string_get_cstr(filepath))) { + break; + } + + // Write header + if(!flipper_format_write_header_cstr(file, 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", string_get_cstr(name))) { + break; + } + + res = true; + } while(false); + + flipper_format_free(file); + + if(!res) { + FURI_LOG_E(TAG, "Save failed."); + } + + string_clear(name); + } else { + //set name from file + furi_hal_version_set_custom_name(string_get_cstr(data)); + } + } + + string_clear(data); + } + + string_clear(filepath); + string_clear(folderpath); + furi_record_close(RECORD_STORAGE); +} \ No newline at end of file diff --git a/applications/services/namechangersrv/namechangersrv.h b/applications/services/namechangersrv/namechangersrv.h new file mode 100644 index 000000000..c5014355b --- /dev/null +++ b/applications/services/namechangersrv/namechangersrv.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +#define NAMECHANGER_TEXT_STORE_SIZE 9 +#define NAMECHANGER_HEADER "Flipper Name File" + +#define TAG "NameChangerSRV" diff --git a/firmware/targets/f7/furi_hal/furi_hal_version.c b/firmware/targets/f7/furi_hal/furi_hal_version.c index 500317cdc..debcdf439 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_version.c +++ b/firmware/targets/f7/furi_hal/furi_hal_version.c @@ -90,6 +90,16 @@ 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))) { + strlcpy(furi_hal_version.name, name, FURI_HAL_VERSION_ARRAY_NAME_LENGTH); + snprintf( + furi_hal_version.device_name, FURI_HAL_VERSION_DEVICE_NAME_LENGTH, "xFlipper %s", 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); diff --git a/firmware/targets/furi_hal_include/furi_hal_version.h b/firmware/targets/furi_hal_include/furi_hal_version.h index 720fdfd17..297090732 100644 --- a/firmware/targets/furi_hal_include/furi_hal_version.h +++ b/firmware/targets/furi_hal_include/furi_hal_version.h @@ -127,6 +127,9 @@ 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); + /** Get pointer to target name * * @return Hardware Name C-string From 66743ce72068e725db604be688c9b6ca6e4ede84 Mon Sep 17 00:00:00 2001 From: ESurge Date: Tue, 27 Sep 2022 00:54:33 -0700 Subject: [PATCH 2/3] Forgot to update api_symbols before push --- firmware/targets/f7/api_symbols.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 86e6470b1..49adb7d1d 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,3.0,, +Version,+,3.1,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1309,6 +1309,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_uid,const uint8_t*, Function,+,furi_hal_version_uid_size,size_t, Function,-,furi_hal_vibro_init,void, From 5c09e1f5dd1e32cb95de8f5d20fb2bc0fe70fa02 Mon Sep 17 00:00:00 2001 From: ESurge Date: Tue, 27 Sep 2022 00:58:44 -0700 Subject: [PATCH 3/3] Reverted api_symbols version back to 3.0. Not sure it matters except for FAP loading. --- firmware/targets/f7/api_symbols.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 49adb7d1d..31790296f 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,3.1,, +Version,+,3.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,,