SubGhz ignore duplicates option (#373)

This commit is contained in:
Willy-JL
2023-12-10 05:45:29 +00:00
parent f96a6bde86
commit 4eaa959994
8 changed files with 85 additions and 4 deletions

View File

@@ -134,6 +134,30 @@ static void subghz_scene_add_to_history_callback(
if(subghz_history_get_text_space_left(subghz->history, NULL, 0)) {
notification_message(subghz->notifications, &sequence_error);
}
if(subghz->ignore_duplicates) {
uint16_t history_count = subghz_history_get_last_index(subghz->history) - 1;
uint8_t hash_data = subghz_protocol_decoder_base_get_hash_data(decoder_base);
uint16_t menu_idx = subghz_view_receiver_get_idx_menu(subghz->subghz_receiver);
subghz_view_receiver_disable_draw_callback(subghz->subghz_receiver);
for(uint16_t idx = history_count; idx > 0; idx--) {
if(subghz_history_get_hash_data(subghz->history, idx - 1) == hash_data) {
subghz_view_receiver_set_idx_menu(subghz->subghz_receiver, idx - 1);
subghz_history_delete_item(subghz->history, idx - 1);
subghz_view_receiver_delete_element_callback(subghz->subghz_receiver);
if(menu_idx > idx - 1) menu_idx--;
}
}
subghz_view_receiver_set_idx_menu(subghz->subghz_receiver, menu_idx);
subghz->idx_menu_chosen = subghz_view_receiver_get_idx_menu(subghz->subghz_receiver);
subghz_view_receiver_enable_draw_callback(subghz->subghz_receiver);
subghz_scene_receiver_update_statusbar(subghz);
if(subghz_history_get_last_index(subghz->history) == 0) {
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateStart);
}
}
}
subghz_receiver_reset(receiver);
furi_string_free(item_name);

View File

@@ -267,6 +267,15 @@ static void subghz_scene_receiver_config_set_raw_threshold_rssi(VariableItem* it
subghz->last_settings->rssi = raw_threshold_rssi_value[index];
}
static void subghz_scene_receiver_config_set_duplicates(VariableItem* item) {
SubGhz* subghz = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, combobox_text[index]);
subghz->last_settings->ignore_duplicates = subghz->ignore_duplicates = index;
}
static inline bool subghz_scene_receiver_config_ignore_filter_get_index(
SubGhzProtocolFilter filter,
SubGhzProtocolFilter flag) {
@@ -328,7 +337,9 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context,
subghz_threshold_rssi_set(subghz->threshold_rssi, raw_threshold_rssi_value[default_index]);
subghz->filter = bin_raw_value[0];
subghz->ignore_filter = 0x00;
subghz->ignore_duplicates = false;
subghz_txrx_receiver_set_filter(subghz->txrx, subghz->filter);
subghz->last_settings->ignore_duplicates = subghz->ignore_duplicates;
subghz->last_settings->ignore_filter = subghz->ignore_filter;
subghz->last_settings->filter = subghz->filter;
@@ -419,6 +430,17 @@ void subghz_scene_receiver_config_on_enter(void* context) {
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
SubGhzCustomEventManagerSet) {
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore Duplicates",
COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_duplicates,
subghz);
value_index = subghz->ignore_duplicates;
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore Starline",