Check same protocol when counting duplicate signals

This commit is contained in:
Willy-JL
2024-01-28 01:40:53 +00:00
parent d3e59badbe
commit cdebdb3062
4 changed files with 23 additions and 4 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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