mirror of
https://github.com/bettse/seader.git
synced 2026-04-27 04:15:17 +00:00
reads MFC SE
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user