SubGhz: Ignore filters at driver level, better efficiency

This commit is contained in:
Willy-JL
2024-02-27 14:22:51 +00:00
parent a99959a9f9
commit fed49ad256
8 changed files with 140 additions and 109 deletions

View File

@@ -15,6 +15,7 @@ ARRAY_DEF(SubGhzReceiverSlotArray, SubGhzReceiverSlot, M_POD_OPLIST);
struct SubGhzReceiver {
SubGhzReceiverSlotArray_t slots;
SubGhzProtocolFlag filter;
SubGhzProtocolFilter ignore_filter;
SubGhzReceiverCallback callback;
void* context;
@@ -64,7 +65,8 @@ void subghz_receiver_decode(SubGhzReceiver* instance, bool level, uint32_t durat
for
M_EACH(slot, instance->slots, SubGhzReceiverSlotArray_t) {
if((slot->base->protocol->flag & instance->filter) != 0) {
if((slot->base->protocol->flag & instance->filter) != 0 &&
(slot->base->protocol->filter & instance->ignore_filter) == 0) {
slot->base->protocol->decoder->feed(slot->base, level, duration);
}
}
@@ -108,6 +110,13 @@ void subghz_receiver_set_filter(SubGhzReceiver* instance, SubGhzProtocolFlag fil
instance->filter = filter;
}
void subghz_receiver_set_ignore_filter(
SubGhzReceiver* instance,
SubGhzProtocolFilter ignore_filter) {
furi_assert(instance);
instance->ignore_filter = ignore_filter;
}
SubGhzProtocolDecoderBase* subghz_receiver_search_decoder_base_by_name(
SubGhzReceiver* instance,
const char* decoder_name) {