From 3f83d81288864f8dae47b73f775272bb2fbb208f Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Mon, 22 Apr 2024 10:01:09 -0700 Subject: [PATCH] returns at message --- sam_api.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/sam_api.c b/sam_api.c index 9ef0fae..bc22b4c 100644 --- a/sam_api.c +++ b/sam_api.c @@ -768,7 +768,7 @@ void seader_mfc_transmit( uint8_t tx_parity = 0; // Don't forget to swap the bits of buffer[8] - for(size_t i = 0; i < 8 + 1; i++) { + for(size_t i = 0; i < len; i++) { bit_lib_reverse_bits(buffer + i, 0, 8); } @@ -797,14 +797,59 @@ void seader_mfc_transmit( break; } - /* - uint8_t b[SEADER_POLLER_MAX_BUFFER_SIZE]; - memset(b, 0, SEADER_POLLER_MAX_BUFFER_SIZE); - size_t bits_written = 0; - bit_buffer_write_bytes_with_parity(rx_buffer, b, SEADER_POLLER_MAX_BUFFER_SIZE, &bits_written); + size_t length = bit_buffer_get_size_bytes(rx_buffer); + const uint8_t* rx_parity = bit_buffer_get_parity(rx_buffer); + + memset(display, 0, sizeof(display)); + for(uint8_t i = 0; i < length; i++) { + snprintf( + display + (i * 2), sizeof(display), "%02x", bit_buffer_get_byte(rx_buffer, i)); + } + FURI_LOG_D(TAG, "NFC Response %d: %s [%02x]", length, display, rx_parity[0]); + + uint8_t with_parity[SEADER_POLLER_MAX_BUFFER_SIZE]; + memset(with_parity, 0, sizeof(with_parity)); + + for(size_t i = 0; i < length; i++) { + uint8_t b = bit_buffer_get_byte(rx_buffer, i); + bit_lib_reverse_bits(&b, 0, 8); + bit_buffer_set_byte(rx_buffer, i, b); + } + + length = length + (length / 8) + 1; + + uint8_t parts = 1 + length / 9; + for(size_t p = 0; p < parts; p++) { + uint8_t doffset = p * 9; + uint8_t soffset = p * 8; + + for(size_t i = 0; i < 9; i++) { + with_parity[i + doffset] = bit_buffer_get_byte(rx_buffer, i + soffset) >> i; + if(i > 0) { + with_parity[i + doffset] |= bit_buffer_get_byte(rx_buffer, i + soffset - 1) + << (9 - i); + } + + if(i > 0) { + bool val = bit_lib_get_bit(rx_parity, i - 1); + bit_lib_set_bit(with_parity + i, i - 1, val); + } + } + } + + for(size_t i = 0; i < length; i++) { + bit_lib_reverse_bits(with_parity + i, 0, 8); + } + + bit_buffer_copy_bytes(rx_buffer, with_parity, length); + + memset(display, 0, sizeof(display)); + for(uint8_t i = 0; i < length; i++) { + snprintf( + display + (i * 2), sizeof(display), "%02x", bit_buffer_get_byte(rx_buffer, i)); + } + FURI_LOG_D(TAG, "NFC Response %d: %s [%02x]", length, display, rx_parity[0]); - seader_send_nfc_rx(seader_uart, b, bits_written/8); - */ } else { FURI_LOG_W(TAG, "UNHANDLED FORMAT"); }