Skip to content

Commit 3f83d81

Browse files
committed
returns at message
1 parent be81164 commit 3f83d81

File tree

1 file changed

+53
-8
lines changed

1 file changed

+53
-8
lines changed

sam_api.c

+53-8
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ void seader_mfc_transmit(
768768
uint8_t tx_parity = 0;
769769

770770
// Don't forget to swap the bits of buffer[8]
771-
for(size_t i = 0; i < 8 + 1; i++) {
771+
for(size_t i = 0; i < len; i++) {
772772
bit_lib_reverse_bits(buffer + i, 0, 8);
773773
}
774774

@@ -797,14 +797,59 @@ void seader_mfc_transmit(
797797
break;
798798
}
799799

800-
/*
801-
uint8_t b[SEADER_POLLER_MAX_BUFFER_SIZE];
802-
memset(b, 0, SEADER_POLLER_MAX_BUFFER_SIZE);
803-
size_t bits_written = 0;
804-
bit_buffer_write_bytes_with_parity(rx_buffer, b, SEADER_POLLER_MAX_BUFFER_SIZE, &bits_written);
800+
size_t length = bit_buffer_get_size_bytes(rx_buffer);
801+
const uint8_t* rx_parity = bit_buffer_get_parity(rx_buffer);
802+
803+
memset(display, 0, sizeof(display));
804+
for(uint8_t i = 0; i < length; i++) {
805+
snprintf(
806+
display + (i * 2), sizeof(display), "%02x", bit_buffer_get_byte(rx_buffer, i));
807+
}
808+
FURI_LOG_D(TAG, "NFC Response %d: %s [%02x]", length, display, rx_parity[0]);
809+
810+
uint8_t with_parity[SEADER_POLLER_MAX_BUFFER_SIZE];
811+
memset(with_parity, 0, sizeof(with_parity));
812+
813+
for(size_t i = 0; i < length; i++) {
814+
uint8_t b = bit_buffer_get_byte(rx_buffer, i);
815+
bit_lib_reverse_bits(&b, 0, 8);
816+
bit_buffer_set_byte(rx_buffer, i, b);
817+
}
818+
819+
length = length + (length / 8) + 1;
820+
821+
uint8_t parts = 1 + length / 9;
822+
for(size_t p = 0; p < parts; p++) {
823+
uint8_t doffset = p * 9;
824+
uint8_t soffset = p * 8;
825+
826+
for(size_t i = 0; i < 9; i++) {
827+
with_parity[i + doffset] = bit_buffer_get_byte(rx_buffer, i + soffset) >> i;
828+
if(i > 0) {
829+
with_parity[i + doffset] |= bit_buffer_get_byte(rx_buffer, i + soffset - 1)
830+
<< (9 - i);
831+
}
832+
833+
if(i > 0) {
834+
bool val = bit_lib_get_bit(rx_parity, i - 1);
835+
bit_lib_set_bit(with_parity + i, i - 1, val);
836+
}
837+
}
838+
}
839+
840+
for(size_t i = 0; i < length; i++) {
841+
bit_lib_reverse_bits(with_parity + i, 0, 8);
842+
}
843+
844+
bit_buffer_copy_bytes(rx_buffer, with_parity, length);
845+
846+
memset(display, 0, sizeof(display));
847+
for(uint8_t i = 0; i < length; i++) {
848+
snprintf(
849+
display + (i * 2), sizeof(display), "%02x", bit_buffer_get_byte(rx_buffer, i));
850+
}
851+
FURI_LOG_D(TAG, "NFC Response %d: %s [%02x]", length, display, rx_parity[0]);
805852

806-
seader_send_nfc_rx(seader_uart, b, bits_written/8);
807-
*/
808853
} else {
809854
FURI_LOG_W(TAG, "UNHANDLED FORMAT");
810855
}

0 commit comments

Comments
 (0)