Eric Betts 1 rok temu
rodzic
commit
70548acc54
1 zmienionych plików z 27 dodań i 7 usunięć
  1. 27 7
      sam_api.c

+ 27 - 7
sam_api.c

@@ -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");