reads MFC SE

This commit is contained in:
Eric Betts
2024-04-22 10:17:07 -07:00
parent 3f83d81288
commit 70548acc54
+27 -7
View File
@@ -763,9 +763,15 @@ void seader_mfc_transmit(
(format[0] == 0x00 && format[1] == 0x00 && format[2] == 0x40) ||
(format[0] == 0x00 && format[1] == 0x00 && format[2] == 0x24) ||
(format[0] == 0x00 && format[1] == 0x00 && format[2] == 0x44)) {
//bit_buffer_copy_bytes_with_parity(tx_buffer, buffer, len * 8);
memset(display, 0, sizeof(display));
for(uint8_t i = 0; i < len; i++) {
snprintf(display + (i * 2), sizeof(display), "%02x", buffer[i]);
}
FURI_LOG_D(TAG, "NFC Send with parity %d: %s", len, display);
// Only handles message up to 8 data bytes
uint8_t tx_parity = 0;
uint8_t len_without_parity = len - 1;
// Don't forget to swap the bits of buffer[8]
for(size_t i = 0; i < len; i++) {
@@ -773,22 +779,34 @@ void seader_mfc_transmit(
}
// Pull out parity bits
for(size_t i = 0; i < 8; i++) {
for(size_t i = 0; i < len_without_parity; i++) {
bool val = bit_lib_get_bit(buffer + i + 1, i);
bit_lib_set_bit(&tx_parity, i, val);
}
for(size_t i = 0; i < 8; i++) {
for(size_t i = 0; i < len_without_parity; i++) {
buffer[i] = (buffer[i] << i) | (buffer[i + 1] >> (8 - i));
}
bit_buffer_append_bytes(tx_buffer, buffer, 8);
bit_buffer_append_bytes(tx_buffer, buffer, len_without_parity);
for(size_t i = 0; i < 8; i++) {
for(size_t i = 0; i < len_without_parity; i++) {
bit_lib_reverse_bits(buffer + i, 0, 8);
bit_buffer_set_byte_with_parity(
tx_buffer, i, buffer[i], bit_lib_get_bit(&tx_parity, i));
}
memset(display, 0, sizeof(display));
for(uint8_t i = 0; i < bit_buffer_get_size_bytes(tx_buffer); i++) {
snprintf(
display + (i * 2), sizeof(display), "%02x", bit_buffer_get_byte(tx_buffer, i));
}
FURI_LOG_D(
TAG,
"NFC Send without parity %d: %s [%02x]",
bit_buffer_get_size_bytes(tx_buffer),
display,
tx_parity);
MfClassicError error = mf_classic_poller_send_custom_parity_frame(
mfc_poller, tx_buffer, rx_buffer, MF_CLASSIC_FWT_FC);
if(error != MfClassicErrorNone) {
@@ -805,7 +823,8 @@ void seader_mfc_transmit(
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]);
FURI_LOG_D(
TAG, "NFC Response without parity %d: %s [%02x]", length, display, rx_parity[0]);
uint8_t with_parity[SEADER_POLLER_MAX_BUFFER_SIZE];
memset(with_parity, 0, sizeof(with_parity));
@@ -848,7 +867,8 @@ void seader_mfc_transmit(
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]);
FURI_LOG_D(
TAG, "NFC Response with parity %d: %s [%02x]", length, display, rx_parity[0]);
} else {
FURI_LOG_W(TAG, "UNHANDLED FORMAT");