diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c index d8244d30d..28b97618e 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c @@ -5,7 +5,6 @@ enum VarItemListIndex { VarItemListIndexBadbtRemember, VarItemListIndexSubghzFrequencies, VarItemListIndexSubghzExtend, - VarItemListIndexSubghzBypass, }; void xtreme_app_scene_protocols_var_item_list_callback(void* context, uint32_t index) { @@ -36,13 +35,6 @@ static void xtreme_app_scene_protocols_subghz_extend_changed(VariableItem* item) app->save_subghz = true; } -static void xtreme_app_scene_protocols_subghz_bypass_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - app->subghz_bypass = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, app->subghz_bypass ? "ON" : "OFF"); - app->save_subghz = true; -} - void xtreme_app_scene_protocols_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -66,11 +58,6 @@ void xtreme_app_scene_protocols_on_enter(void* context) { variable_item_set_current_value_index(item, app->subghz_extend); variable_item_set_current_value_text(item, app->subghz_extend ? "ON" : "OFF"); - item = variable_item_list_add( - var_item_list, "SubGHz Bypass", 2, xtreme_app_scene_protocols_subghz_bypass_changed, app); - variable_item_set_current_value_index(item, app->subghz_bypass); - variable_item_set_current_value_text(item, app->subghz_bypass ? "ON" : "OFF"); - variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_protocols_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index e86db4fc5..623bbcdc9 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -64,7 +64,7 @@ bool xtreme_app_apply(XtremeApp* app) { } if(app->save_subghz) { - furi_hal_subghz_set_extend_settings(app->subghz_extend, app->subghz_bypass); + furi_hal_subghz_set_is_extended(app->subghz_extend); } if(app->save_name) { @@ -247,7 +247,7 @@ XtremeApp* xtreme_app_alloc() { flipper_format_free(file); furi_record_close(RECORD_STORAGE); - furi_hal_subghz_get_extend_settings(&app->subghz_extend, &app->subghz_bypass); + app->subghz_extend = furi_hal_subghz_get_is_extended(); strlcpy(app->device_name, furi_hal_version_get_name_ptr(), FURI_HAL_VERSION_ARRAY_NAME_LENGTH); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index 542353338..dedb9630c 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -51,7 +51,6 @@ typedef struct { uint8_t subghz_hopper_index; char subghz_freq_buffer[XTREME_SUBGHZ_FREQ_BUFFER_SIZE]; bool subghz_extend; - bool subghz_bypass; char device_name[FURI_HAL_VERSION_ARRAY_NAME_LENGTH]; int32_t xp_level; FuriString* version_tag; diff --git a/applications/services/desktop/views/desktop_view_debug.c b/applications/services/desktop/views/desktop_view_debug.c index 934c8c7ee..2b820e64e 100644 --- a/applications/services/desktop/views/desktop_view_debug.c +++ b/applications/services/desktop/views/desktop_view_debug.c @@ -37,13 +37,12 @@ void desktop_debug_render(Canvas* canvas, void* model) { snprintf( buffer, sizeof(buffer), - "%d.F%dB%dC%d %s:%s %s", + "%d.F%dB%dC%d %s %s", furi_hal_version_get_hw_version(), furi_hal_version_get_hw_target(), furi_hal_version_get_hw_body(), furi_hal_version_get_hw_connect(), furi_hal_version_get_hw_region_name_otp(), - furi_hal_region_get_name(), my_name ? my_name : "Unknown"); canvas_draw_str(canvas, 0, 19 + STATUS_BAR_Y_SHIFT, buffer); diff --git a/applications/settings/about/about.c b/applications/settings/about/about.c index 168f1094b..2d38d930a 100644 --- a/applications/settings/about/about.c +++ b/applications/settings/about/about.c @@ -99,13 +99,12 @@ static DialogMessageButton hw_version_screen(DialogsApp* dialogs, DialogMessage* furi_string_cat_printf( buffer, - "%d.F%dB%dC%d %s:%s %s\n", + "%d.F%dB%dC%d %s %s\n", furi_hal_version_get_hw_version(), furi_hal_version_get_hw_target(), furi_hal_version_get_hw_body(), furi_hal_version_get_hw_connect(), furi_hal_version_get_hw_region_name_otp(), - furi_hal_region_get_name(), my_name ? my_name : "Unknown"); furi_string_cat_printf(buffer, "Serial Number:\n"); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 22b419d7b..6a1b21773 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1361,7 +1361,6 @@ Function,+,furi_hal_random_get,uint32_t, Function,+,furi_hal_region_get,const FuriHalRegion*, Function,+,furi_hal_region_get_band,const FuriHalRegionBand*,uint32_t Function,+,furi_hal_region_get_name,const char*, -Function,+,furi_hal_region_init,void, Function,+,furi_hal_region_is_frequency_allowed,_Bool,uint32_t Function,+,furi_hal_region_is_provisioned,_Bool, Function,+,furi_hal_region_set,void,FuriHalRegion* @@ -1453,8 +1452,8 @@ Function,-,furi_hal_subghz_dump_state,void, Function,+,furi_hal_subghz_enable_ext_power,_Bool, 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_external_power_disable,_Bool, +Function,+,furi_hal_subghz_get_is_extended,_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, @@ -1478,10 +1477,10 @@ Function,+,furi_hal_subghz_rx,void, Function,+,furi_hal_subghz_rx_pipe_not_empty,_Bool, Function,+,furi_hal_subghz_select_radio_type,void,SubGhzRadioType 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_external_power_disable,void,_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_is_extended,void,_Bool Function,+,furi_hal_subghz_set_path,void,FuriHalSubGhzPath Function,+,furi_hal_subghz_set_rolling_counter_mult,void,uint8_t Function,+,furi_hal_subghz_set_timestamp_file_names,void,_Bool diff --git a/firmware/targets/f7/furi_hal/furi_hal_region.c b/firmware/targets/f7/furi_hal/furi_hal_region.c index 191ca3873..0f0cb855c 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_region.c +++ b/firmware/targets/f7/furi_hal/furi_hal_region.c @@ -1,6 +1,5 @@ #include -#include -#include +#include const FuriHalRegion furi_hal_region_zero = { .country_code = "00", @@ -14,115 +13,18 @@ const FuriHalRegion furi_hal_region_zero = { }, }}; -const FuriHalRegion furi_hal_region_eu_ru = { - .country_code = "EU", - .bands_count = 2, - .bands = { - { - .start = 433050000, - .end = 434790000, - .power_limit = 12, - .duty_cycle = 50, - }, - { - .start = 868150000, - .end = 868550000, - .power_limit = 12, - .duty_cycle = 50, - }}}; - -const FuriHalRegion furi_hal_region_us_ca_au = { - .country_code = "US", - .bands_count = 3, - .bands = { - { - .start = 304100000, - .end = 321950000, - .power_limit = 12, - .duty_cycle = 50, - }, - { - .start = 433050000, - .end = 434790000, - .power_limit = 12, - .duty_cycle = 50, - }, - { - .start = 915000000, - .end = 928000000, - .power_limit = 12, - .duty_cycle = 50, - }}}; - -const FuriHalRegion furi_hal_region_jp = { - .country_code = "JP", - .bands_count = 2, - .bands = { - { - .start = 312000000, - .end = 315250000, - .power_limit = 12, - .duty_cycle = 50, - }, - { - .start = 920500000, - .end = 923500000, - .power_limit = 12, - .duty_cycle = 50, - }}}; - static const FuriHalRegion* furi_hal_region = NULL; -void furi_hal_region_init() { - FuriHalVersionRegion region = furi_hal_version_get_hw_region(); - - if(region == FuriHalVersionRegionUnknown) { - furi_hal_region = &furi_hal_region_zero; - } else if(region == FuriHalVersionRegionEuRu) { - furi_hal_region = &furi_hal_region_eu_ru; - } else if(region == FuriHalVersionRegionUsCaAu) { - furi_hal_region = &furi_hal_region_us_ca_au; - } else if(region == FuriHalVersionRegionJp) { - furi_hal_region = &furi_hal_region_jp; - } -} - const FuriHalRegion* furi_hal_region_get() { - return furi_hal_region; + return &furi_hal_region_zero; } void furi_hal_region_set(FuriHalRegion* region) { - furi_hal_region = region; -} - -bool furi_hal_region_is_provisioned() { - return furi_hal_region != NULL; -} - -const char* furi_hal_region_get_name() { - if(furi_hal_region) { - return furi_hal_region->country_code; - } else { - return "--"; - } -} - -bool furi_hal_region_is_frequency_allowed(uint32_t frequency) { - bool isAllowed = true; - if(!furi_hal_region) { - isAllowed = false; - } - const FuriHalRegionBand* band = furi_hal_region_get_band(frequency); - if(!band) { - isAllowed = false; - } - if(!isAllowed) { - isAllowed = furi_hal_subghz_is_tx_allowed(frequency); - } - return isAllowed; + UNUSED(region); } const FuriHalRegionBand* furi_hal_region_get_band(uint32_t frequency) { + furi_hal_region = &furi_hal_region_zero; if(!furi_hal_region) { return NULL; } @@ -136,3 +38,16 @@ const FuriHalRegionBand* furi_hal_region_get_band(uint32_t frequency) { return NULL; } + +bool furi_hal_region_is_frequency_allowed(uint32_t frequency) { + UNUSED(frequency); + return true; +} + +bool furi_hal_region_is_provisioned() { + return true; +} + +const char* furi_hal_region_get_name() { + return "00"; +} diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c index 573c5b8ab..a7261cc42 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c @@ -1,6 +1,6 @@ #include #include -#include + #include #include #include @@ -448,22 +448,21 @@ uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value) { return value; } -void furi_hal_subghz_get_extend_settings(bool* extend, bool* bypass) { - *extend = false; - *bypass = false; +bool furi_hal_subghz_get_is_extended() { + bool is_extended = false; Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* file = flipper_format_file_alloc(storage); 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_read_bool(file, "use_ext_range_at_own_risk", &is_extended, 1); } flipper_format_free(file); furi_record_close(RECORD_STORAGE); + return is_extended; } -void furi_hal_subghz_set_extend_settings(bool extend, bool bypass) { +void furi_hal_subghz_set_is_extended(bool is_extended) { Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* file = flipper_format_file_alloc(storage); @@ -473,11 +472,7 @@ void furi_hal_subghz_set_extend_settings(bool extend, bool bypass) { 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; + if(!flipper_format_write_bool(file, "use_ext_range_at_own_risk", &is_extended, 1)) break; } while(0); flipper_format_free(file); @@ -485,63 +480,22 @@ void furi_hal_subghz_set_extend_settings(bool extend, bool bypass) { } 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); + bool is_extended = furi_hal_subghz_get_is_extended(); - switch(furi_hal_version_get_hw_region_otp()) { - case FuriHalVersionRegionEuRu: - //433,05..434,79; 868,15..868,55 - if(!(value >= 433050000 && value <= 434790000) && - !(value >= 868150000 && value <= 868550000)) { - } else { - is_allowed = true; - } - break; - case FuriHalVersionRegionUsCaAu: - //304,10..321,95; 433,05..434,79; 915,00..928,00 - if(!(value >= 304100000 && value <= 321950000) && - !(value >= 433050000 && value <= 434790000) && - !(value >= 915000000 && value <= 928000000)) { - } else { - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - if(value <= 321950000 && - ((furi_hal_subghz.preset == FuriHalSubGhzPresetOok270Async) || - (furi_hal_subghz.preset == FuriHalSubGhzPresetOok650Async))) { - furi_hal_subghz_load_patable(furi_hal_subghz_preset_ook_async_patable_au); - } - } - is_allowed = true; - } - break; - case FuriHalVersionRegionJp: - //312,00..315,25; 920,50..923,50 - if(!(value >= 312000000 && value <= 315250000) && - !(value >= 920500000 && value <= 923500000)) { - } else { - is_allowed = true; - } - break; - - default: - is_allowed = true; - break; - } - // No flag - test original range, flag set, test extended range if(!(value >= 299999755 && value <= 350000335) && // was increased from 348 to 350 !(value >= 386999938 && value <= 467750000) && // was increased from 464 to 467.75 !(value >= 778999847 && value <= 928000000) && !(is_extended)) { - FURI_LOG_I(TAG, "Frequency blocked - outside regional range"); - is_allowed = false; + FURI_LOG_I(TAG, "Frequency blocked - outside default range"); + return false; } else if( !(value >= 281000000 && value <= 361000000) && !(value >= 378000000 && value <= 481000000) && !(value >= 749000000 && value <= 962000000) && is_extended) { FURI_LOG_I(TAG, "Frequency blocked - outside extended range"); - is_allowed = false; + return false; } - return is_allowed; + return true; } uint32_t furi_hal_subghz_set_frequency(uint32_t value) { diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.h b/firmware/targets/f7/furi_hal/furi_hal_subghz.h index a292c642f..8383c27f2 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.h +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.h @@ -227,17 +227,15 @@ 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 + * @return is_extended bool */ -void furi_hal_subghz_get_extend_settings(bool* extend, bool* bypass); +bool furi_hal_subghz_get_is_extended(); /** Set extend and bypass settings values to file * - * @param extend bool for extend - * @param bypass bool for bypass + * @param is_extended bool for extend */ -void furi_hal_subghz_set_extend_settings(bool extend, bool bypass); +void furi_hal_subghz_set_is_extended(bool is_extended); /** Сheck if transmission is allowed on this frequency with your current config * diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz_configs.h b/firmware/targets/f7/furi_hal/furi_hal_subghz_configs.h index 5ea17b6dd..b2b5760fd 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz_configs.h +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz_configs.h @@ -273,16 +273,6 @@ static const uint8_t furi_hal_subghz_preset_ook_async_patable[8] = { 0x00, 0x00}; -static const uint8_t furi_hal_subghz_preset_ook_async_patable_au[8] = { - 0x00, - 0x37, // 12dBm 0xC0, 10dBm 0xC5, 7dBm 0xCD, 5dBm 0x86, 0dBm 0x50, -6dBm 0x37, -10dBm 0x26, -15dBm 0x1D, -20dBm 0x17, -30dBm 0x03 - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00}; - static const uint8_t furi_hal_subghz_preset_2fsk_async_patable[8] = { 0xC0, // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12 0x00, diff --git a/firmware/targets/furi_hal_include/furi_hal_region.h b/firmware/targets/furi_hal_include/furi_hal_region.h index ddc8a6a43..9586d51ed 100644 --- a/firmware/targets/furi_hal_include/furi_hal_region.h +++ b/firmware/targets/furi_hal_include/furi_hal_region.h @@ -21,9 +21,6 @@ typedef struct { FuriHalRegionBand bands[]; } FuriHalRegion; -/** Initialize region */ -void furi_hal_region_init(); - /** Get Region Data. * * Region data may be allocated in Flash or in RAM. diff --git a/furi/flipper.c b/furi/flipper.c index a788dfc74..4419877e9 100644 --- a/furi/flipper.c +++ b/furi/flipper.c @@ -43,6 +43,7 @@ void flipper_migrate_files() { // Revert cringe storage_common_remove(storage, INT_PATH(".passport.settings")); + storage_common_remove(storage, INT_PATH(".region_data")); // Migrate files storage_common_copy(storage, ARCHIVE_FAV_OLD_PATH, ARCHIVE_FAV_PATH);