From 64cea4248643e440fa0ca6138e4244e9edb56a38 Mon Sep 17 00:00:00 2001 From: Aleksandr Kutuzov Date: Sun, 8 Sep 2024 11:02:37 +0100 Subject: [PATCH] LfRfid: simplify gprox wiegand payload validation flow --- lib/lfrfid/protocols/protocol_gproxii.c | 27 ++++++++++++------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/lfrfid/protocols/protocol_gproxii.c b/lib/lfrfid/protocols/protocol_gproxii.c index 4dfd305bef7..71aac7ddfe6 100644 --- a/lib/lfrfid/protocols/protocol_gproxii.c +++ b/lib/lfrfid/protocols/protocol_gproxii.c @@ -151,23 +151,22 @@ static bool protocol_gproxii_can_be_decoded(ProtocolGProxII* protocol) { // Check card length is either 26 or 36 int card_len = bit_lib_get_bits(protocol->decoded_data, 8, 6); - if(card_len == 26 || card_len == 36) { - // wiegand parity - if(card_len == 26) { - uint64_t fc_and_card = bit_lib_get_bits_64(protocol->decoded_data, 33, 24); - bool even_parity = bit_lib_get_bits(protocol->decoded_data, 32, 1); - bool odd_parity = bit_lib_get_bits(protocol->decoded_data, 57, 1); - if(!wiegand_check(fc_and_card, even_parity, odd_parity, card_len)) return false; - } else if(card_len == 36) { - uint64_t fc_and_card = bit_lib_get_bits_64(protocol->decoded_data, 33, 34); - uint8_t even_parity = bit_lib_get_bits(protocol->decoded_data, 32, 1); - uint8_t odd_parity = bit_lib_get_bits(protocol->decoded_data, 67, 1); - if(!wiegand_check(fc_and_card, even_parity, odd_parity, card_len)) return false; - } - return true; + // wiegand parity + if(card_len == 26) { + uint64_t fc_and_card = bit_lib_get_bits_64(protocol->decoded_data, 33, 24); + bool even_parity = bit_lib_get_bits(protocol->decoded_data, 32, 1); + bool odd_parity = bit_lib_get_bits(protocol->decoded_data, 57, 1); + if(!wiegand_check(fc_and_card, even_parity, odd_parity, card_len)) return false; + } else if(card_len == 36) { + uint64_t fc_and_card = bit_lib_get_bits_64(protocol->decoded_data, 33, 34); + uint8_t even_parity = bit_lib_get_bits(protocol->decoded_data, 32, 1); + uint8_t odd_parity = bit_lib_get_bits(protocol->decoded_data, 67, 1); + if(!wiegand_check(fc_and_card, even_parity, odd_parity, card_len)) return false; } else { return false; // If we don't get a 26 or 36 it's not a known card type } + + return true; } bool protocol_gproxii_decoder_feed(ProtocolGProxII* protocol, bool level, uint32_t duration) {