diff --git a/applications/main/subghz/scenes/subghz_scene_decode_raw.c b/applications/main/subghz/scenes/subghz_scene_decode_raw.c index d6ada49fb..a14e203f4 100644 --- a/applications/main/subghz/scenes/subghz_scene_decode_raw.c +++ b/applications/main/subghz/scenes/subghz_scene_decode_raw.c @@ -86,7 +86,8 @@ static void subghz_scene_add_to_history_callback( subghz_view_receiver_disable_draw_callback(subghz->subghz_receiver); for(uint16_t i = idx; i > 0; i--) { i--; // Iterating in reverse with off by one - if(subghz_history_get_hash_data(subghz->history, i) == hash_data) { + if(subghz_history_get_hash_data(subghz->history, i) == hash_data && + subghz_history_get_protocol(subghz->history, i) == decoder_base->protocol) { // Remove previous instance and update menu index subghz_history_delete_item(subghz->history, i); subghz_view_receiver_delete_item(subghz->subghz_receiver, i); diff --git a/applications/main/subghz/scenes/subghz_scene_receiver.c b/applications/main/subghz/scenes/subghz_scene_receiver.c index a34990ecc..dd9016ee9 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver.c @@ -171,7 +171,9 @@ static void subghz_scene_add_to_history_callback( subghz_view_receiver_disable_draw_callback(subghz->subghz_receiver); for(uint16_t i = idx; i > 0; i--) { i--; // Iterating in reverse with off by one - if(subghz_history_get_hash_data(subghz->history, i) == hash_data) { + if(subghz_history_get_hash_data(subghz->history, i) == hash_data && + subghz_history_get_protocol(subghz->history, i) == + decoder_base->protocol) { // Remove previous instance and update menu index subghz_history_delete_item(subghz->history, i); subghz_view_receiver_delete_item(subghz->subghz_receiver, i); diff --git a/applications/main/subghz/subghz_history.c b/applications/main/subghz/subghz_history.c index 31437cf71..851c90168 100644 --- a/applications/main/subghz/subghz_history.c +++ b/applications/main/subghz/subghz_history.c @@ -15,6 +15,7 @@ typedef struct { SubGhzRadioPreset* preset; FuriHalRtcDateTime datetime; uint32_t hash_data; + const SubGhzProtocol* protocol; uint16_t repeats; float latitude; float longitude; @@ -69,6 +70,12 @@ uint32_t subghz_history_get_hash_data(SubGhzHistory* instance, uint16_t idx) { return item->hash_data; } +const SubGhzProtocol* subghz_history_get_protocol(SubGhzHistory* instance, uint16_t idx) { + furi_assert(instance); + SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx); + return item->protocol; +} + uint16_t subghz_history_get_repeats(SubGhzHistory* instance, uint16_t idx) { furi_assert(instance); SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx); @@ -252,7 +259,7 @@ bool subghz_history_add_to_history( SubGhzHistoryItemArray_it_last(it, instance->history->data); while(!SubGhzHistoryItemArray_end_p(it)) { SubGhzHistoryItem* search = SubGhzHistoryItemArray_ref(it); - if(search->hash_data == hash_data) { + if(search->hash_data == hash_data && search->protocol == decoder_base->protocol) { repeats = search->repeats + 1; break; } @@ -273,6 +280,7 @@ bool subghz_history_add_to_history( item->preset->data_size = preset->data_size; furi_hal_rtc_get_datetime(&item->datetime); item->hash_data = hash_data; + item->protocol = decoder_base->protocol; item->repeats = repeats; item->latitude = preset->latitude; item->longitude = preset->longitude; @@ -357,7 +365,7 @@ void subghz_history_remove_duplicates(SubGhzHistory* instance) { while(!SubGhzHistoryItemArray_end_p(jt)) { SubGhzHistoryItem* j = SubGhzHistoryItemArray_ref(jt); - if(j->hash_data == i->hash_data) { + if(j->hash_data == i->hash_data && j->protocol == i->protocol) { subghz_history_delete_item(instance, jt->index); } SubGhzHistoryItemArray_previous(jt); diff --git a/applications/main/subghz/subghz_history.h b/applications/main/subghz/subghz_history.h index 642812f74..282075ae1 100644 --- a/applications/main/subghz/subghz_history.h +++ b/applications/main/subghz/subghz_history.h @@ -37,6 +37,14 @@ void subghz_history_delete_item(SubGhzHistory* instance, uint16_t idx); */ uint32_t subghz_history_get_hash_data(SubGhzHistory* instance, uint16_t idx); +/** Get protocol pointer to history[idx] + * + * @param instance - SubGhzHistory instance + * @param idx - record index + * @return proto - protocol pointer + */ +const SubGhzProtocol* subghz_history_get_protocol(SubGhzHistory* instance, uint16_t idx); + /** Get repeat count to history[idx] * * @param instance - SubGhzHistory instance