diff --git a/applications/main/subghz/scenes/subghz_scene_radio_settings.c b/applications/main/subghz/scenes/subghz_scene_radio_settings.c index 8e48d0c91..87e2d8269 100644 --- a/applications/main/subghz/scenes/subghz_scene_radio_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_radio_settings.c @@ -66,6 +66,22 @@ const int32_t debug_counter_val[DEBUG_COUNTER_COUNT] = { -50, }; +//TX Power +#define TX_POWER_COUNT 11 +const char* const tx_power_text[TX_POWER_COUNT] = { + "Preset", + "12dBm", + "10dBm", + "7dBm", + "5dBm", + "0dBm", + "-6dBm", + "-10dBm", + "-15dBm", + "-20dBm", + "-30dBm", +}; + static void subghz_scene_radio_settings_set_device(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); @@ -80,6 +96,20 @@ static void subghz_scene_radio_settings_set_device(VariableItem* item) { subghz_txrx_radio_device_set(subghz->txrx, radio_device_value[index]); } +static void subghz_scene_radio_settings_set_tx_power(VariableItem* item) { + SubGhz* subghz = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + //Update the Menu Item on screen + variable_item_set_current_value_text(item, tx_power_text[index]); + + //Set TX power and remember setting + subghz->last_settings->tx_power = subghz->tx_power = index; + + //Save the settings now, this is the convention here! + subghz_last_settings_save(subghz->last_settings); +} + static void subghz_scene_receiver_config_set_debug_pin(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); @@ -144,6 +174,18 @@ void subghz_scene_radio_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, radio_device_text[value_index]); + //Add TX Power + item = variable_item_list_add( + subghz->variable_item_list, + "TX Power", + TX_POWER_COUNT, + subghz_scene_radio_settings_set_tx_power, + subghz); + + value_index = subghz->tx_power; + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, tx_power_text[value_index]); + item = variable_item_list_add( variable_item_list, "Protocol Names", diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_config.c b/applications/main/subghz/scenes/subghz_scene_receiver_config.c index c743e660c..4781b326e 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_config.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_config.c @@ -7,7 +7,6 @@ enum SubGhzSettingIndex { SubGhzSettingIndexFrequency, SubGhzSettingIndexHopping, SubGhzSettingIndexModulation, - SubGhzSettingIndexTXPower, SubGhzSettingIndexBinRAW, SubGhzSettingIndexIgnoreReversRB2, SubGhzSettingIndexIgnoreAlarms, @@ -103,22 +102,6 @@ const char* const combobox_text[COMBO_BOX_COUNT] = { "ON", }; -//TX Power -#define TX_POWER_COUNT 11 -const char* const tx_power_text[TX_POWER_COUNT] = { - "Preset", - "12dBm", - "10dBm", - "7dBm", - "5dBm", - "0dBm", - "-6dBm", - "-10dBm", - "-15dBm", - "-20dBm", - "-30dBm", -}; - static void subghz_scene_receiver_config_set_ignore_filter(VariableItem* item, SubGhzProtocolFlag filter) { SubGhz* subghz = variable_item_get_context(item); @@ -300,29 +283,6 @@ static void subghz_scene_receiver_config_set_speaker(VariableItem* item) { subghz_txrx_speaker_set_state(subghz->txrx, speaker_value[index]); } -static void subghz_scene_receiver_config_set_tx_power(VariableItem* item) { - SubGhz* subghz = variable_item_get_context(item); - uint8_t index = variable_item_get_current_value_index(item); - - //Update the Menu Item on screen - variable_item_set_current_value_text(item, tx_power_text[index]); - - //Set TX power and remember setting - subghz->last_settings->tx_power = subghz->tx_power = index; - - //Get current preset and frequency so I can update preset wit TX power. - SubGhzSetting* setting = subghz_txrx_get_setting(subghz->txrx); - uint32_t frequency = subghz_setting_get_default_frequency(setting); - SubGhzRadioPreset preset = subghz_txrx_get_preset(subghz->txrx); - - //Edit TX power, if necessary. - subghz_txrx_set_tx_power(preset.data, preset.data_size, subghz->tx_power); - - // Maybe better add one more function with only with the frequency argument? - subghz_txrx_set_preset( - subghz->txrx, furi_string_get_cstr(preset.name), frequency, preset.data, preset.data_size); -} - static void subghz_scene_receiver_config_set_bin_raw(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); @@ -392,7 +352,7 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context, subghz->txrx, SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY, SUBGHZ_LAST_SETTING_DEFAULT_PRESET, - 0); + subghz->tx_power); SubGhzSetting* setting = subghz_txrx_get_setting(subghz->txrx); SubGhzRadioPreset preset = subghz_txrx_get_preset(subghz->txrx); @@ -480,18 +440,6 @@ void subghz_scene_receiver_config_on_enter(void* context) { variable_item_set_current_value_text(item, hopping_mode_text[value_index]); } - //Add TX Power - item = variable_item_list_add( - subghz->variable_item_list, - "TX Power", - TX_POWER_COUNT, - subghz_scene_receiver_config_set_tx_power, - subghz); - - value_index = subghz->tx_power; - variable_item_set_current_value_index(item, value_index); - variable_item_set_current_value_text(item, tx_power_text[value_index]); - if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) != SubGhzCustomEventManagerSet) { item = variable_item_list_add(