From f7da751d5f360845d59c1bf70ed1f1b7a744f07b Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 7 Mar 2026 23:50:06 +0300 Subject: [PATCH] Make FDX-B readout more descriptive OFW PR 4297 by snowsign --- lib/lfrfid/protocols/protocol_fdx_b.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/lfrfid/protocols/protocol_fdx_b.c b/lib/lfrfid/protocols/protocol_fdx_b.c index afec0672a..6c13233df 100644 --- a/lib/lfrfid/protocols/protocol_fdx_b.c +++ b/lib/lfrfid/protocols/protocol_fdx_b.c @@ -284,9 +284,12 @@ void protocol_fdx_b_render_data(ProtocolFDXB* protocol, FuriString* result) { bool block_status = bit_lib_get_bit(protocol->data, 48); bool rudi_bit = bit_lib_get_bit(protocol->data, 49); - uint8_t reserved = bit_lib_get_bits(protocol->data, 50, 5); - uint8_t user_info = bit_lib_get_bits(protocol->data, 55, 5); - uint8_t replacement_number = bit_lib_get_bits(protocol->data, 60, 3); + uint8_t visual_start_digit = + bit_lib_reverse_8_fast(bit_lib_get_bits(protocol->data, 50, 3) << 5); + uint8_t reserved = bit_lib_reverse_8_fast(bit_lib_get_bits(protocol->data, 53, 2) << 6); + uint8_t user_info = bit_lib_reverse_8_fast(bit_lib_get_bits(protocol->data, 55, 5) << 3); + uint8_t replacement_number = + bit_lib_reverse_8_fast(bit_lib_get_bits(protocol->data, 60, 3) << 5); bool animal_flag = bit_lib_get_bit(protocol->data, 63); Storage* storage = furi_record_open(RECORD_STORAGE); FuriString* country_full_name = furi_string_alloc(); @@ -320,13 +323,19 @@ void protocol_fdx_b_render_data(ProtocolFDXB* protocol, FuriString* result) { result, "\n" "Animal: %s\n" - "Bits: %hhX-%hhX-%hhX-%hhX-%hhX", + "Visual Start Digit: %hu\n" + "Replacement Number: %hu\n" + "User Info: %hhX\n" + "Data Block: %s\n" + "RUDI Bit: %s\n" + "RFU: %hhX\n", animal_flag ? "Yes" : "No", - block_status, - rudi_bit, - reserved, + visual_start_digit, + replacement_number, user_info, - replacement_number); + block_status ? "Present" : "Absent", + rudi_bit ? "Yes" : "No", + reserved); furi_string_free(country_full_name); }