mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 02:58:36 -07:00
@@ -21,8 +21,20 @@ void nfc_scene_passport_read_on_enter(void* context) {
|
||||
temp_str = furi_string_alloc();
|
||||
furi_string_set(temp_str, "\e#Passport\n");
|
||||
char iso_type = FURI_BIT(data->sak, 5) ? '4' : '3';
|
||||
//TODO: NFC-B?
|
||||
furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-A)\n", iso_type);
|
||||
|
||||
char nfc_type;
|
||||
switch(data->type) {
|
||||
case FuriHalNfcTypeA:
|
||||
nfc_type = 'A';
|
||||
break;
|
||||
case FuriHalNfcTypeB:
|
||||
nfc_type = 'B';
|
||||
break;
|
||||
default:
|
||||
nfc_type = '?';
|
||||
break;
|
||||
}
|
||||
furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-%c)\n", iso_type, nfc_type);
|
||||
furi_string_cat_printf(temp_str, "UID:");
|
||||
for(size_t i = 0; i < data->uid_len; i++) {
|
||||
furi_string_cat_printf(temp_str, " %02X", data->uid[i]);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user