From be63934eae01fb11c028df56e1d059d618c4884d Mon Sep 17 00:00:00 2001 From: Willy-JL Date: Mon, 6 Mar 2023 14:36:52 +0000 Subject: [PATCH] Move static and hopper frequencies to submenus --- .../scenes/xtreme_app_scene_config.h | 2 + .../xtreme_app_scene_protocols_frequencies.c | 91 ++---------------- ...e_app_scene_protocols_frequencies_hopper.c | 92 +++++++++++++++++++ ...e_app_scene_protocols_frequencies_static.c | 92 +++++++++++++++++++ 4 files changed, 194 insertions(+), 83 deletions(-) create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h index f3586e2b3..a7370f9b4 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h @@ -3,6 +3,8 @@ ADD_SCENE(xtreme_app, graphics, Graphics) ADD_SCENE(xtreme_app, statusbar, Statusbar) ADD_SCENE(xtreme_app, protocols, Protocols) ADD_SCENE(xtreme_app, protocols_frequencies, ProtocolsFrequencies) +ADD_SCENE(xtreme_app, protocols_frequencies_static, ProtocolsFrequenciesStatic) +ADD_SCENE(xtreme_app, protocols_frequencies_hopper, ProtocolsFrequenciesHopper) ADD_SCENE(xtreme_app, protocols_frequencies_add, ProtocolsFrequenciesAdd) ADD_SCENE(xtreme_app, dolphin, Dolphin) ADD_SCENE(xtreme_app, misc, Misc) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies.c index 41056bc53..cfd336bd6 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies.c @@ -2,12 +2,8 @@ enum VarItemListIndex { VarItemListIndexUseDefaults, - VarItemListIndexStaticFrequency, - VarItemListIndexDeleteStaticFreq, - VarItemListIndexAddStaticFreq, - VarItemListIndexHopperFrequency, - VarItemListIndexDeleteHopperFreq, - VarItemListIndexAddHopperFreq, + VarItemListIndexStaticFrequencies, + VarItemListIndexHopperFrequencies, }; void xtreme_app_scene_protocols_frequencies_var_item_list_callback(void* context, uint32_t index) { @@ -23,24 +19,6 @@ static void xtreme_app_scene_protocols_frequencies_use_defaults_changed(Variable app->save_subghz_frequencies = true; } -static void xtreme_app_scene_protocols_frequencies_static_frequency_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - app->subghz_static_index = variable_item_get_current_value_index(item); - uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); - char text[10] = {0}; - snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); - variable_item_set_current_value_text(item, text); -} - -static void xtreme_app_scene_protocols_frequencies_hopper_frequency_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - app->subghz_hopper_index = variable_item_get_current_value_index(item); - uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); - char text[10] = {0}; - snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); - variable_item_set_current_value_text(item, text); -} - void xtreme_app_scene_protocols_frequencies_on_enter(void* context) { XtremeApp* app = context; VariableItemList* var_item_list = app->var_item_list; @@ -51,37 +29,9 @@ void xtreme_app_scene_protocols_frequencies_on_enter(void* context) { variable_item_set_current_value_index(item, app->subghz_use_defaults); variable_item_set_current_value_text(item, app->subghz_use_defaults ? "ON" : "OFF"); - item = variable_item_list_add(var_item_list, "Static Freq", FrequencyList_size(app->subghz_static_frequencies), xtreme_app_scene_protocols_frequencies_static_frequency_changed, app); - app->subghz_static_index = 0; - variable_item_set_current_value_index(item, app->subghz_static_index); - if(FrequencyList_size(app->subghz_static_frequencies)) { - uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); - char text[10] = {0}; - snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); - variable_item_set_current_value_text(item, text); - } else { - variable_item_set_current_value_text(item, "None"); - } + variable_item_list_add(var_item_list, "Static Frequencies", 0, NULL, app); - variable_item_list_add(var_item_list, "Delete Static Freq", 0, NULL, app); - - variable_item_list_add(var_item_list, "Add Static Freq", 0, NULL, app); - - item = variable_item_list_add(var_item_list, "Hopper Freq", FrequencyList_size(app->subghz_hopper_frequencies), xtreme_app_scene_protocols_frequencies_hopper_frequency_changed, app); - app->subghz_hopper_index = 0; - variable_item_set_current_value_index(item, app->subghz_hopper_index); - if(FrequencyList_size(app->subghz_hopper_frequencies)) { - uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); - char text[10] = {0}; - snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); - variable_item_set_current_value_text(item, text); - } else { - variable_item_set_current_value_text(item, "None"); - } - - variable_item_list_add(var_item_list, "Delete Hopper Freq", 0, NULL, app); - - variable_item_list_add(var_item_list, "Add Hopper Freq", 0, NULL, app); + variable_item_list_add(var_item_list, "Hopper Frequencies", 0, NULL, app); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_protocols_frequencies_var_item_list_callback, app); @@ -92,23 +42,6 @@ void xtreme_app_scene_protocols_frequencies_on_enter(void* context) { view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } -void remove_frequency(XtremeApp* app, FrequencyList_t list, uint8_t index) { - if(!FrequencyList_size(list)) return; - uint32_t value = *FrequencyList_get(list, index); - FrequencyList_it_t it; - FrequencyList_it(it, list); - while(!FrequencyList_end_p(it)) { - if(*FrequencyList_ref(it) == value) { - FrequencyList_remove(list, it); - } else { - FrequencyList_next(it); - } - } - app->save_subghz_frequencies = true; - scene_manager_previous_scene(app->scene_manager); - scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequencies); -} - bool xtreme_app_scene_protocols_frequencies_on_event(void* context, SceneManagerEvent event) { XtremeApp* app = context; bool consumed = false; @@ -117,19 +50,11 @@ bool xtreme_app_scene_protocols_frequencies_on_event(void* context, SceneManager scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequencies, event.event); consumed = true; switch(event.event) { - case VarItemListIndexDeleteStaticFreq: - remove_frequency(app, app->subghz_static_frequencies, app->subghz_static_index); + case VarItemListIndexStaticFrequencies: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesStatic); break; - case VarItemListIndexAddStaticFreq: - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd, false); - scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd); - break; - case VarItemListIndexDeleteHopperFreq: - remove_frequency(app, app->subghz_hopper_frequencies, app->subghz_hopper_index); - break; - case VarItemListIndexAddHopperFreq: - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd, true); - scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd); + case VarItemListIndexHopperFrequencies: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesHopper); break; default: break; diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c new file mode 100644 index 000000000..f4313f20e --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c @@ -0,0 +1,92 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexHopperFrequency, + VarItemListIndexDeleteHopperFreq, + VarItemListIndexAddHopperFreq, +}; + +void xtreme_app_scene_protocols_frequencies_hopper_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +static void xtreme_app_scene_protocols_frequencies_hopper_frequency_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + app->subghz_hopper_index = variable_item_get_current_value_index(item); + uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); + char text[10] = {0}; + snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); + variable_item_set_current_value_text(item, text); +} + +void xtreme_app_scene_protocols_frequencies_hopper_on_enter(void* context) { + XtremeApp* app = context; + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + + item = variable_item_list_add(var_item_list, "Hopper Freq", FrequencyList_size(app->subghz_hopper_frequencies), xtreme_app_scene_protocols_frequencies_hopper_frequency_changed, app); + app->subghz_hopper_index = 0; + variable_item_set_current_value_index(item, app->subghz_hopper_index); + if(FrequencyList_size(app->subghz_hopper_frequencies)) { + uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); + char text[10] = {0}; + snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); + variable_item_set_current_value_text(item, text); + } else { + variable_item_set_current_value_text(item, "None"); + } + + variable_item_list_add(var_item_list, "Delete Hopper Freq", 0, NULL, app); + + variable_item_list_add(var_item_list, "Add Hopper Freq", 0, NULL, app); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_protocols_frequencies_hopper_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesHopper)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_protocols_frequencies_hopper_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesHopper, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexDeleteHopperFreq: + if(!FrequencyList_size(app->subghz_hopper_frequencies)) break; + uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); + FrequencyList_it_t it; + FrequencyList_it(it, app->subghz_hopper_frequencies); + while(!FrequencyList_end_p(it)) { + if(*FrequencyList_ref(it) == value) { + FrequencyList_remove(app->subghz_hopper_frequencies, it); + } else { + FrequencyList_next(it); + } + } + app->save_subghz_frequencies = true; + scene_manager_previous_scene(app->scene_manager); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesHopper); + break; + case VarItemListIndexAddHopperFreq: + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd, true); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd); + break; + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_protocols_frequencies_hopper_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +} diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c new file mode 100644 index 000000000..14d88a00b --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c @@ -0,0 +1,92 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexStaticFrequency, + VarItemListIndexDeleteStaticFreq, + VarItemListIndexAddStaticFreq, +}; + +void xtreme_app_scene_protocols_frequencies_static_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +static void xtreme_app_scene_protocols_frequencies_static_frequency_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + app->subghz_static_index = variable_item_get_current_value_index(item); + uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); + char text[10] = {0}; + snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); + variable_item_set_current_value_text(item, text); +} + +void xtreme_app_scene_protocols_frequencies_static_on_enter(void* context) { + XtremeApp* app = context; + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + + item = variable_item_list_add(var_item_list, "Static Freq", FrequencyList_size(app->subghz_static_frequencies), xtreme_app_scene_protocols_frequencies_static_frequency_changed, app); + app->subghz_static_index = 0; + variable_item_set_current_value_index(item, app->subghz_static_index); + if(FrequencyList_size(app->subghz_static_frequencies)) { + uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); + char text[10] = {0}; + snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); + variable_item_set_current_value_text(item, text); + } else { + variable_item_set_current_value_text(item, "None"); + } + + variable_item_list_add(var_item_list, "Delete Static Freq", 0, NULL, app); + + variable_item_list_add(var_item_list, "Add Static Freq", 0, NULL, app); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_protocols_frequencies_static_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesStatic)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_protocols_frequencies_static_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesStatic, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexDeleteStaticFreq: + if(!FrequencyList_size(app->subghz_static_frequencies)) break; + uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); + FrequencyList_it_t it; + FrequencyList_it(it, app->subghz_static_frequencies); + while(!FrequencyList_end_p(it)) { + if(*FrequencyList_ref(it) == value) { + FrequencyList_remove(app->subghz_static_frequencies, it); + } else { + FrequencyList_next(it); + } + } + app->save_subghz_frequencies = true; + scene_manager_previous_scene(app->scene_manager); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesStatic); + break; + case VarItemListIndexAddStaticFreq: + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd, false); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd); + break; + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_protocols_frequencies_static_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +}