mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-10 05:59:08 -07:00
@@ -21,8 +21,20 @@ void nfc_scene_passport_read_on_enter(void* context) {
|
|||||||
temp_str = furi_string_alloc();
|
temp_str = furi_string_alloc();
|
||||||
furi_string_set(temp_str, "\e#Passport\n");
|
furi_string_set(temp_str, "\e#Passport\n");
|
||||||
char iso_type = FURI_BIT(data->sak, 5) ? '4' : '3';
|
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:");
|
furi_string_cat_printf(temp_str, "UID:");
|
||||||
for(size_t i = 0; i < data->uid_len; i++) {
|
for(size_t i = 0; i < data->uid_len; i++) {
|
||||||
furi_string_cat_printf(temp_str, " %02X", data->uid[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;
|
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) {
|
void nfc_worker_read(NfcWorker* nfc_worker) {
|
||||||
furi_assert(nfc_worker);
|
furi_assert(nfc_worker);
|
||||||
furi_assert(nfc_worker->callback);
|
furi_assert(nfc_worker->callback);
|
||||||
@@ -420,8 +447,15 @@ void nfc_worker_read(NfcWorker* nfc_worker) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(nfc_data->type == FuriHalNfcTypeB) {
|
} else if(nfc_data->type == FuriHalNfcTypeB) {
|
||||||
event = NfcWorkerEventReadUidNfcB;
|
if(nfc_worker_read_nfcb(nfc_worker, &tx_rx)) {
|
||||||
break;
|
if(dev_data->protocol == NfcDeviceProtocolMRTD) {
|
||||||
|
event = NfcWorkerEventReadPassport;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event = NfcWorkerEventReadUidNfcB;
|
||||||
|
break;
|
||||||
} else if(nfc_data->type == FuriHalNfcTypeF) {
|
} else if(nfc_data->type == FuriHalNfcTypeF) {
|
||||||
event = NfcWorkerEventReadUidNfcF;
|
event = NfcWorkerEventReadUidNfcF;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user