From 10e275d652e43368993374e0601ad24923a91156 Mon Sep 17 00:00:00 2001 From: kopecdav Date: Mon, 10 Feb 2025 12:16:01 +0100 Subject: [PATCH] feat(core): Fix UID parsing and error printouts --- core/embed/io/nfc/inc/io/nfc.h | 3 ++- core/embed/io/nfc/st25r3916b/nfc.c | 9 ++------- core/embed/projects/prodtest/cmd/prodtest_nfc.c | 11 ++++++----- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/core/embed/io/nfc/inc/io/nfc.h b/core/embed/io/nfc/inc/io/nfc.h index 623c70d565..66004d1976 100644 --- a/core/embed/io/nfc/inc/io/nfc.h +++ b/core/embed/io/nfc/inc/io/nfc.h @@ -23,6 +23,7 @@ #include #define NFC_MAX_UID_LEN 10 +#define NFC_MAX_UID_BUF_SIZE ((NFC_MAX_UID_LEN + 1) * 2) typedef enum { NFC_POLLER_TECH_A = 0x1, @@ -58,7 +59,7 @@ typedef enum { typedef struct { uint8_t type; - char uid[NFC_MAX_UID_LEN + 1]; // Plus one for string termination + char uid[NFC_MAX_UID_BUF_SIZE]; // Plus one for string termination uint8_t uid_len; } nfc_dev_info_t; diff --git a/core/embed/io/nfc/st25r3916b/nfc.c b/core/embed/io/nfc/st25r3916b/nfc.c index 3530fce5a8..657369fdb4 100644 --- a/core/embed/io/nfc/st25r3916b/nfc.c +++ b/core/embed/io/nfc/st25r3916b/nfc.c @@ -537,17 +537,12 @@ nfc_status_t nfc_dev_read_info(nfc_dev_info_t *dev_info) { dev_info->uid_len = nfcDevice->nfcidLen; - if (dev_info->uid_len > 10) { - // Unexpected UID length - return NFC_ERROR; - } - - if (nfcDevice->nfcidLen <= NFC_MAX_UID_LEN) { + if (nfcDevice->nfcidLen > NFC_MAX_UID_LEN) { return NFC_ERROR; } // Copy the hex UID in printable string - cstr_encode_hex(dev_info->uid, NFC_MAX_UID_LEN, nfcDevice->nfcid, nfcDevice->nfcidLen); + cstr_encode_hex(dev_info->uid, NFC_MAX_UID_BUF_SIZE, nfcDevice->nfcid, nfcDevice->nfcidLen); } else { // No device activated diff --git a/core/embed/projects/prodtest/cmd/prodtest_nfc.c b/core/embed/projects/prodtest/cmd/prodtest_nfc.c index 12caea22dc..684bd205c5 100644 --- a/core/embed/projects/prodtest/cmd/prodtest_nfc.c +++ b/core/embed/projects/prodtest/cmd/prodtest_nfc.c @@ -107,12 +107,12 @@ static void prodtest_nfc_read_card(cli_t* cli) { cli_trace(cli, "NFC Type AP2P: UID: %s", dev_info.uid); break; case NFC_DEV_TYPE_UNKNOWN: - cli_error(cli, CLI_ERROR, "NFC Type UNKNOWN"); + cli_error(cli, CLI_ERROR_ABORT, "NFC Type UNKNOWN"); goto cleanup; return; default: - cli_error(cli, CLI_ERROR, "NFC Type UNKNOWN"); + cli_error(cli, CLI_ERROR_ABORT, "NFC Type UNKNOWN"); goto cleanup; } @@ -203,7 +203,8 @@ static void prodtest_nfc_write_card(cli_t* cli) { timeout); } - nfc_register_tech(NFC_POLLER_TECH_A); + nfc_register_tech(NFC_POLLER_TECH_A | NFC_POLLER_TECH_B | NFC_POLLER_TECH_F | + NFC_POLLER_TECH_V); nfc_activate_stm(); nfc_event_t nfc_event; @@ -219,7 +220,7 @@ static void prodtest_nfc_write_card(cli_t* cli) { nfc_status_t nfc_status = nfc_get_event(&nfc_event); if(nfc_status != NFC_OK) { - cli_error(cli, CLI_ERROR, "NFC error"); + cli_error(cli, CLI_ERROR_FATAL, "NFC error"); goto cleanup; } @@ -228,7 +229,7 @@ static void prodtest_nfc_write_card(cli_t* cli) { nfc_dev_read_info(&dev_info); if (dev_info.type != NFC_DEV_TYPE_A) { - cli_error(cli, CLI_ERROR, "Only NFC type A cards supported"); + cli_error(cli, CLI_ERROR_ABORT, "Only NFC type A cards supported"); goto cleanup; }