Merge pull request #348 from ESurge/420

NameChanger Service
This commit is contained in:
RogueMaster
2022-09-27 11:53:27 -04:00
committed by GitHub
7 changed files with 209 additions and 0 deletions
+1
View File
@@ -10,5 +10,6 @@ App(
"loader",
"power",
"ibuttonsrv",
"namechangersrv",
],
)
@@ -0,0 +1,7 @@
App(
appid="namechangersrv",
apptype=FlipperAppType.STARTUP,
entry_point="namechanger_on_system_start",
requires=["storage"],
order=130,
)
@@ -0,0 +1,178 @@
#include "namechangersrv.h"
#include "m-string.h"
#include <toolbox/path.h>
#include <flipper_format/flipper_format.h>
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);
}
@@ -0,0 +1,9 @@
#pragma once
#include <furi_hal.h>
#include <storage/storage.h>
#define NAMECHANGER_TEXT_STORE_SIZE 9
#define NAMECHANGER_HEADER "Flipper Name File"
#define TAG "NameChangerSRV"
+1
View File
@@ -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,
1 entry status name type params
1309 Function + furi_hal_version_get_name_ptr const char*
1310 Function + furi_hal_version_get_otp_version FuriHalVersionOtpVersion
1311 Function - furi_hal_version_init void
1312 Function + furi_hal_version_set_custom_name void const char*
1313 Function + furi_hal_version_uid const uint8_t*
1314 Function + furi_hal_version_uid_size size_t
1315 Function - furi_hal_vibro_init void
@@ -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);
@@ -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