From 01530b12083e7da570b524a0f709b2fd1820c1c8 Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Thu, 2 Mar 2023 23:44:03 +0000 Subject: [PATCH] Better subghz extend handling + no reset on flash --- applications/main/xtreme_app/xtreme_app.c | 22 ++-------- .../resources/subghz/assets/extend_range.txt | 8 ---- firmware/targets/f7/api_symbols.csv | 2 + .../targets/f7/furi_hal/furi_hal_subghz.c | 41 ++++++++++++++----- .../targets/f7/furi_hal/furi_hal_subghz.h | 14 +++++++ 5 files changed, 50 insertions(+), 37 deletions(-) delete mode 100644 assets/resources/subghz/assets/extend_range.txt diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index dc59d0542..e3c31812f 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -19,15 +19,7 @@ static bool xtreme_app_back_event_callback(void* context) { 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); + furi_hal_subghz_set_extend_settings(app->subghz_extend, app->subghz_bypass); } if(app->save_level) { @@ -126,16 +118,7 @@ XtremeApp* xtreme_app_alloc() { XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - Storage* storage = furi_record_open(RECORD_STORAGE); - FlipperFormat* subghz_range = flipper_format_file_alloc(storage); - app->subghz_extend = false; - app->subghz_bypass = false; - if(flipper_format_file_open_existing(subghz_range, "/ext/subghz/assets/extend_range.txt")) { - flipper_format_read_bool( - subghz_range, "use_ext_range_at_own_risk", &app->subghz_extend, 1); - flipper_format_read_bool(subghz_range, "ignore_default_tx_region", &app->subghz_bypass, 1); - } - flipper_format_free(subghz_range); + furi_hal_subghz_get_extend_settings(&app->subghz_extend, &app->subghz_bypass); Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); DolphinStats stats = dolphin_stats(dolphin); @@ -146,6 +129,7 @@ XtremeApp* xtreme_app_alloc() { app->asset_pack = 0; asset_packs_init(app->asset_packs); + Storage* storage = furi_record_open(RECORD_STORAGE); File* folder = storage_file_alloc(storage); FileInfo info; char* name = malloc(MAX_PACK_NAME_LEN); diff --git a/assets/resources/subghz/assets/extend_range.txt b/assets/resources/subghz/assets/extend_range.txt deleted file mode 100644 index 1b404a0e5..000000000 --- a/assets/resources/subghz/assets/extend_range.txt +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz Setting File -Version: 1 - -# Whether to allow extended ranges that can break your flipper -use_ext_range_at_own_risk: false - -# Whether to ignore the default TX region settings -ignore_default_tx_region: false diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 9dc8c0fcd..8075414e2 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1383,6 +1383,7 @@ Function,-,furi_hal_subghz_dump_state,void, Function,+,furi_hal_subghz_enable_ext_power,void, Function,+,furi_hal_subghz_flush_rx,void, Function,+,furi_hal_subghz_flush_tx,void, +Function,+,furi_hal_subghz_get_extend_settings,void,"_Bool*, _Bool*" Function,+,furi_hal_subghz_get_lqi,uint8_t, Function,+,furi_hal_subghz_get_radio_type,SubGhzRadioType, Function,+,furi_hal_subghz_get_rolling_counter_mult,uint8_t, @@ -1403,6 +1404,7 @@ Function,+,furi_hal_subghz_reset,void, Function,+,furi_hal_subghz_rx,void, Function,+,furi_hal_subghz_rx_pipe_not_empty,_Bool, Function,+,furi_hal_subghz_set_async_mirror_pin,void,const GpioPin* +Function,+,furi_hal_subghz_set_extend_settings,void,"_Bool, _Bool" Function,+,furi_hal_subghz_set_frequency,uint32_t,uint32_t Function,+,furi_hal_subghz_set_frequency_and_path,uint32_t,uint32_t Function,+,furi_hal_subghz_set_path,void,FuriHalSubGhzPath diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c index f4e7ad762..ad3ef51b8 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c @@ -419,21 +419,42 @@ uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value) { return value; } -bool furi_hal_subghz_is_tx_allowed(uint32_t value) { - bool is_extended = false; - bool is_allowed = false; - - // TODO: !!! Move file check to another place +void furi_hal_subghz_get_extend_settings(bool* extend, bool* bypass) { + *extend = false; + *bypass = false; Storage* storage = furi_record_open(RECORD_STORAGE); - FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); + FlipperFormat* file = flipper_format_file_alloc(storage); - if(flipper_format_file_open_existing(fff_data_file, "/ext/subghz/assets/extend_range.txt")) { - flipper_format_read_bool(fff_data_file, "use_ext_range_at_own_risk", &is_extended, 1); - flipper_format_read_bool(fff_data_file, "ignore_default_tx_region", &is_allowed, 1); + if(flipper_format_file_open_existing(file, "/ext/subghz/assets/extend_range.txt")) { + flipper_format_read_bool(file, "use_ext_range_at_own_risk", extend, 1); + flipper_format_read_bool(file, "ignore_default_tx_region", bypass, 1); } - flipper_format_free(fff_data_file); + flipper_format_free(file); furi_record_close(RECORD_STORAGE); +} + +void furi_hal_subghz_set_extend_settings(bool extend, bool bypass) { + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* file = flipper_format_file_alloc(storage); + + do { + if(!flipper_format_file_open_always(file, "/ext/subghz/assets/extend_range.txt")) break; + if(!flipper_format_write_header_cstr(file, "Flipper SubGhz Setting File", 1)) break; + if(!flipper_format_write_comment_cstr(file, "Whether to allow extended ranges that can break your flipper")) break; + if(!flipper_format_write_bool(file, "use_ext_range_at_own_risk", &extend, 1)) break; + if(!flipper_format_write_comment_cstr(file, "Whether to ignore the default TX region settings")) break; + if(!flipper_format_write_bool(file, "ignore_default_tx_region", &bypass, 1)) break; + } while(0); + + flipper_format_free(file); + furi_record_close(RECORD_STORAGE); +} + +bool furi_hal_subghz_is_tx_allowed(uint32_t value) { + bool is_extended; + bool is_allowed; + furi_hal_subghz_get_extend_settings(&is_extended, &is_allowed); switch(furi_hal_version_get_hw_region_otp()) { case FuriHalVersionRegionEuRu: diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.h b/firmware/targets/f7/furi_hal/furi_hal_subghz.h index 8ede17d32..5e210a3e0 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.h +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.h @@ -223,6 +223,20 @@ bool furi_hal_subghz_is_frequency_valid(uint32_t value); */ uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value); +/** Read extend and bypass settings values into out params + * + * @param extend pointer to bool for extend + * @param bypass pointer to bool for bypass + */ +void furi_hal_subghz_get_extend_settings(bool* extend, bool* bypass); + +/** Set extend and bypass settings values to file + * + * @param extend bool for extend + * @param bypass bool for bypass + */ +void furi_hal_subghz_set_extend_settings(bool extend, bool bypass); + /** Сheck if transmission is allowed on this frequency with your current config * * @param value frequency in Hz