Merge pull request #376 from qistoph/mrtd

MRTD Support NFC-B documents
This commit is contained in:
RogueMaster
2022-10-24 02:43:25 -04:00
committed by GitHub
2 changed files with 52 additions and 6 deletions
+37 -3
View File
@@ -376,6 +376,33 @@ static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t
return card_read;
}
static bool nfc_worker_read_nfcb(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) {
FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data;
bool card_read = false;
furi_hal_nfc_sleep();
if(nfc_data->interface == FuriHalNfcInterfaceIsoDep) {
FURI_LOG_I(TAG, "ISO14443-4B card detected");
//TODO: thoughts on improving logic/readability here?
do {
FURI_LOG_D(TAG, "Try reading MRTD");
if(nfc_worker_read_mrtd(nfc_worker, tx_rx)) {
nfc_worker->dev_data->protocol = NfcDeviceProtocolMRTD;
break;
}
FURI_LOG_I(TAG, "Unknown card. Save UID");
nfc_worker->dev_data->protocol = NfcDeviceProtocolUnknown;
} while(false);
card_read = true;
} else {
nfc_worker->dev_data->protocol = NfcDeviceProtocolUnknown;
card_read = true;
}
return card_read;
}
void nfc_worker_read(NfcWorker* nfc_worker) {
furi_assert(nfc_worker);
furi_assert(nfc_worker->callback);
@@ -420,8 +447,15 @@ void nfc_worker_read(NfcWorker* nfc_worker) {
}
}
} else if(nfc_data->type == FuriHalNfcTypeB) {
event = NfcWorkerEventReadUidNfcB;
break;
if(nfc_worker_read_nfcb(nfc_worker, &tx_rx)) {
if(dev_data->protocol == NfcDeviceProtocolMRTD) {
event = NfcWorkerEventReadPassport;
break;
}
}
event = NfcWorkerEventReadUidNfcB;
break;
} else if(nfc_data->type == FuriHalNfcTypeF) {
event = NfcWorkerEventReadUidNfcF;
break;
@@ -898,4 +932,4 @@ void nfc_worker_analyze_reader(NfcWorker* nfc_worker) {
reader_analyzer_stop(nfc_worker->reader_analyzer);
nfca_signal_free(nfca_signal);
}
}