Quellcode durchsuchen

NFC: Fixed writing gen1a magic tags with invalid BCC (#2511)

Co-authored-by: あく <alleteam@gmail.com>
AloneLiberty vor 2 Jahren
Ursprung
Commit
bf70f4b71a

+ 2 - 3
applications/external/nfc_magic/lib/magic/magic.c

@@ -6,8 +6,7 @@
 
 
 #define MAGIC_CMD_WUPA (0x40)
 #define MAGIC_CMD_WUPA (0x40)
 #define MAGIC_CMD_WIPE (0x41)
 #define MAGIC_CMD_WIPE (0x41)
-#define MAGIC_CMD_READ (0x43)
-#define MAGIC_CMD_WRITE (0x43)
+#define MAGIC_CMD_ACCESS (0x43)
 
 
 #define MAGIC_MIFARE_READ_CMD (0x30)
 #define MAGIC_MIFARE_READ_CMD (0x30)
 #define MAGIC_MIFARE_WRITE_CMD (0xA0)
 #define MAGIC_MIFARE_WRITE_CMD (0xA0)
@@ -70,7 +69,7 @@ bool magic_data_access_cmd() {
     FuriHalNfcReturn ret = 0;
     FuriHalNfcReturn ret = 0;
 
 
     do {
     do {
-        tx_data[0] = MAGIC_CMD_WRITE;
+        tx_data[0] = MAGIC_CMD_ACCESS;
         ret = furi_hal_nfc_ll_txrx_bits(
         ret = furi_hal_nfc_ll_txrx_bits(
             tx_data,
             tx_data,
             8,
             8,

+ 5 - 3
applications/external/nfc_magic/nfc_magic_worker.c

@@ -85,15 +85,17 @@ void nfc_magic_worker_write(NfcMagicWorker* nfc_magic_worker) {
                 card_found_notified = true;
                 card_found_notified = true;
             }
             }
             furi_hal_nfc_sleep();
             furi_hal_nfc_sleep();
-
             if(!magic_wupa()) {
             if(!magic_wupa()) {
-                FURI_LOG_E(TAG, "Not Magic card");
+                FURI_LOG_E(TAG, "No card response to WUPA (not a magic card)");
                 nfc_magic_worker->callback(
                 nfc_magic_worker->callback(
                     NfcMagicWorkerEventWrongCard, nfc_magic_worker->context);
                     NfcMagicWorkerEventWrongCard, nfc_magic_worker->context);
                 break;
                 break;
             }
             }
+            furi_hal_nfc_sleep();
+        }
+        if(magic_wupa()) {
             if(!magic_data_access_cmd()) {
             if(!magic_data_access_cmd()) {
-                FURI_LOG_E(TAG, "Not Magic card");
+                FURI_LOG_E(TAG, "No card response to data access command (not a magic card)");
                 nfc_magic_worker->callback(
                 nfc_magic_worker->callback(
                     NfcMagicWorkerEventWrongCard, nfc_magic_worker->context);
                     NfcMagicWorkerEventWrongCard, nfc_magic_worker->context);
                 break;
                 break;