Skip to content

Commit

Permalink
Improving name changer
Browse files Browse the repository at this point in the history
  • Loading branch information
DXVVAY committed Oct 29, 2023
1 parent 124ef42 commit 64cb57b
Showing 1 changed file with 37 additions and 53 deletions.
90 changes: 37 additions & 53 deletions applications/services/namechanger/namechanger.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,61 +8,50 @@
#include <flipper_format/flipper_format.h>

#define TAG "NameChanger"
#define MAX_TIMEOUT 11
#define MAX_START_TIMEOUT 250

static bool namechanger_init() {
Storage* storage = furi_record_open(RECORD_STORAGE);
static bool check_valid_characters(const char *name) {
for (; *name; ++name) {
const char c = *name;
if ((c < '0' || c > '9') && (c < 'A' || c > 'Z') && (c < 'a' || c > 'z')) {
return false;
}
}
return true;
}

// Kostil + velosiped = top ficha
static bool init_name_changer(Storage *storage) {
uint8_t timeout = 0;
while(timeout < 11) {
if(storage_sd_status(storage) == FSE_OK) break;
while (timeout < MAX_TIMEOUT) {
if (storage_sd_status(storage) == FSE_OK) break;
furi_delay_ms(250);
timeout++;
/*if(timeout == 10) {
// Failed to init namechanger, SD card not ready
furi_record_close(RECORD_STORAGE);
return false;
}*/
}

FuriString* str = furi_string_alloc();
FlipperFormat* file = flipper_format_file_alloc(storage);
if (timeout == MAX_TIMEOUT) {
furi_record_close(RECORD_STORAGE);
return false;
}

FuriString *str = furi_string_alloc();
FlipperFormat *file = flipper_format_file_alloc(storage);
bool res = false;

do {
uint32_t version;
if(!flipper_format_file_open_existing(file, NAMECHANGER_PATH)) break;
if(!flipper_format_read_header(file, str, &version)) break;
if(furi_string_cmp_str(str, NAMECHANGER_HEADER)) break;
if(version != NAMECHANGER_VERSION) break;
if (!flipper_format_file_open_existing(file, NAMECHANGER_PATH)) break;
if (!flipper_format_read_header(file, str, &version)) break;
if (furi_string_cmp_str(str, NAMECHANGER_HEADER) != 0 || version != NAMECHANGER_VERSION) break;

if(!flipper_format_read_string(file, "Name", str)) break;
// Check for size
size_t temp_string_size = furi_string_size(str);
if(temp_string_size > (size_t)8) break;
if(temp_string_size < (size_t)2) break;
if (!flipper_format_read_string(file, "Name", str) || furi_string_size(str) > (size_t)8 || furi_string_size(str) < (size_t)2) break;

// Check for forbidden characters
const char* name_ptr = furi_string_get_cstr(str);
bool chars_check_failed = false;
if (!check_valid_characters(furi_string_get_cstr(str))) break;

for(; *name_ptr; ++name_ptr) {
const char c = *name_ptr;
if((c < '0' || c > '9') && (c < 'A' || c > 'Z') && (c < 'a' || c > 'z')) {
chars_check_failed = true;
break;
}
}

if(chars_check_failed) break;

// If all checks was good we can set the name
version_set_custom_name(NULL, strdup(furi_string_get_cstr(str)));
furi_hal_version_set_name(version_get_custom_name(NULL));

res = true;
} while(false);
} while (false);

flipper_format_free(file);
furi_record_close(RECORD_STORAGE);
Expand All @@ -71,41 +60,36 @@ static bool namechanger_init() {
return res;
}

int32_t namechanger_on_system_start(void* p) {
int32_t namechanger_on_system_start(void *p) {
UNUSED(p);
if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) {
if (furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) {
return 0;
}

// Wait for all required services to start and create their records
uint8_t timeout = 0;
while(!furi_record_exists(RECORD_CLI) || !furi_record_exists(RECORD_BT) ||
!furi_record_exists(RECORD_STORAGE)) {
while (!furi_record_exists(RECORD_CLI) || !furi_record_exists(RECORD_BT) ||
!furi_record_exists(RECORD_STORAGE)) {
timeout++;
if(timeout > 250) {
if (timeout > MAX_START_TIMEOUT) {
return 0;
}
furi_delay_ms(5);
}

// Hehe bad code now here, bad bad bad, very bad, bad example, dont take it, make it better

if(namechanger_init()) {
Cli* cli = furi_record_open(RECORD_CLI);
if (init_name_changer(furi_record_open(RECORD_STORAGE))) {
Cli *cli = furi_record_open(RECORD_CLI);
cli_session_close(cli);
furi_delay_ms(2); // why i added delays here
furi_delay_ms(2);
cli_session_open(cli, &cli_vcp);
furi_record_close(RECORD_CLI);

furi_delay_ms(3);
Bt* bt = furi_record_open(RECORD_BT);
if(!bt_set_profile(bt, BtProfileSerial)) {
Bt *bt = furi_record_open(RECORD_BT);
if (!bt_set_profile(bt, BtProfileSerial)) {
//FURI_LOG_D(TAG, "Failed to touch bluetooth to name change");
}
furi_record_close(RECORD_BT);
bt = NULL;
furi_delay_ms(3);
}

return 0;
}
}

0 comments on commit 64cb57b

Please sign in to comment.