Xfw app frequency editor add remove functionality

This commit is contained in:
Willy-JL
2023-03-06 02:07:26 +00:00
parent badbfaf449
commit d5e56330ec
2 changed files with 45 additions and 8 deletions

View File

@@ -2,7 +2,9 @@
enum VarItemListIndex { enum VarItemListIndex {
VarItemListIndexStaticFrequency, VarItemListIndexStaticFrequency,
VarItemListIndexDeleteStatic,
VarItemListIndexHopperFrequency, VarItemListIndexHopperFrequency,
VarItemListIndexDeleteHopper,
}; };
void xtreme_app_scene_protocols_frequencies_var_item_list_callback(void* context, uint32_t index) { void xtreme_app_scene_protocols_frequencies_var_item_list_callback(void* context, uint32_t index) {
@@ -12,8 +14,8 @@ void xtreme_app_scene_protocols_frequencies_var_item_list_callback(void* context
static void xtreme_app_scene_protocols_frequencies_static_frequency_changed(VariableItem* item) { static void xtreme_app_scene_protocols_frequencies_static_frequency_changed(VariableItem* item) {
XtremeApp* app = variable_item_get_context(item); XtremeApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item); app->subghz_static_index = variable_item_get_current_value_index(item);
uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, index); uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index);
char text[10] = {0}; char text[10] = {0};
snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000);
variable_item_set_current_value_text(item, text); variable_item_set_current_value_text(item, text);
@@ -21,8 +23,8 @@ static void xtreme_app_scene_protocols_frequencies_static_frequency_changed(Vari
static void xtreme_app_scene_protocols_frequencies_hopper_frequency_changed(VariableItem* item) { static void xtreme_app_scene_protocols_frequencies_hopper_frequency_changed(VariableItem* item) {
XtremeApp* app = variable_item_get_context(item); XtremeApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item); app->subghz_hopper_index = variable_item_get_current_value_index(item);
uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, index); uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index);
char text[10] = {0}; char text[10] = {0};
snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000);
variable_item_set_current_value_text(item, text); variable_item_set_current_value_text(item, text);
@@ -34,9 +36,10 @@ void xtreme_app_scene_protocols_frequencies_on_enter(void* context) {
VariableItem* item; 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); 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);
variable_item_set_current_value_index(item, 0); app->subghz_static_index = 0;
variable_item_set_current_value_index(item, app->subghz_static_index);
if(FrequencyList_size(app->subghz_static_frequencies)) { if(FrequencyList_size(app->subghz_static_frequencies)) {
uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, 0); uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index);
char text[10] = {0}; char text[10] = {0};
snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000);
variable_item_set_current_value_text(item, text); variable_item_set_current_value_text(item, text);
@@ -44,10 +47,13 @@ void xtreme_app_scene_protocols_frequencies_on_enter(void* context) {
variable_item_set_current_value_text(item, "None"); variable_item_set_current_value_text(item, "None");
} }
variable_item_list_add(var_item_list, "Delete 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); 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);
variable_item_set_current_value_index(item, 0); app->subghz_hopper_index = 0;
variable_item_set_current_value_index(item, app->subghz_hopper_index);
if(FrequencyList_size(app->subghz_hopper_frequencies)) { if(FrequencyList_size(app->subghz_hopper_frequencies)) {
uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, 0); uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index);
char text[10] = {0}; char text[10] = {0};
snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000);
variable_item_set_current_value_text(item, text); variable_item_set_current_value_text(item, text);
@@ -55,6 +61,8 @@ void xtreme_app_scene_protocols_frequencies_on_enter(void* context) {
variable_item_set_current_value_text(item, "None"); variable_item_set_current_value_text(item, "None");
} }
variable_item_list_add(var_item_list, "Delete Hopper Freq", 0, NULL, app);
variable_item_list_set_enter_callback( variable_item_list_set_enter_callback(
var_item_list, xtreme_app_scene_protocols_frequencies_var_item_list_callback, app); var_item_list, xtreme_app_scene_protocols_frequencies_var_item_list_callback, app);
@@ -64,6 +72,20 @@ void xtreme_app_scene_protocols_frequencies_on_enter(void* context) {
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList);
} }
void remove_frequency(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);
}
}
}
bool xtreme_app_scene_protocols_frequencies_on_event(void* context, SceneManagerEvent event) { bool xtreme_app_scene_protocols_frequencies_on_event(void* context, SceneManagerEvent event) {
XtremeApp* app = context; XtremeApp* app = context;
bool consumed = false; bool consumed = false;
@@ -71,10 +93,23 @@ bool xtreme_app_scene_protocols_frequencies_on_event(void* context, SceneManager
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequencies, event.event); scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequencies, event.event);
consumed = true; consumed = true;
bool redraw = false;
switch(event.event) { switch(event.event) {
case VarItemListIndexDeleteStatic:
remove_frequency(app->subghz_static_frequencies, app->subghz_static_index);
redraw = true;
break;
case VarItemListIndexDeleteHopper:
remove_frequency(app->subghz_hopper_frequencies, app->subghz_hopper_index);
redraw = true;
break;
default: default:
break; break;
} }
if(redraw) {
scene_manager_previous_scene(app->scene_manager);
scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocolsFrequencies);
}
} }
return consumed; return consumed;

View File

@@ -33,7 +33,9 @@ typedef struct {
bool subghz_use_defaults; bool subghz_use_defaults;
uint32_t subghz_default_frequency; uint32_t subghz_default_frequency;
FrequencyList_t subghz_static_frequencies; FrequencyList_t subghz_static_frequencies;
uint8_t subghz_static_index;
FrequencyList_t subghz_hopper_frequencies; FrequencyList_t subghz_hopper_frequencies;
uint8_t subghz_hopper_index;
bool subghz_extend; bool subghz_extend;
bool subghz_bypass; bool subghz_bypass;
int dolphin_level; int dolphin_level;