From 2a9d9b084a94d339540fcd49f6d3ac6de5befd28 Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Mon, 18 Aug 2025 18:01:10 -0700 Subject: [PATCH] Reset SAM on read error --- scenes/seader_scene_read_card_success.c | 5 +++++ t_1.c | 6 ++++++ t_1.h | 1 + 3 files changed, 12 insertions(+) diff --git a/scenes/seader_scene_read_card_success.c b/scenes/seader_scene_read_card_success.c index bb1cec0..2fcd5d4 100644 --- a/scenes/seader_scene_read_card_success.c +++ b/scenes/seader_scene_read_card_success.c @@ -51,6 +51,11 @@ void seader_scene_read_card_success_on_enter(void* context) { } } else { furi_string_set(type_str, "Read error"); + + SeaderWorker* seader_worker = seader->worker; + SeaderUartBridge* seader_uart = seader_worker->uart; + seader_t_1_reset(); + seader_ccid_check_for_sam(seader_uart); } widget_add_button_element( diff --git a/t_1.c b/t_1.c index 70a7780..4ee9baf 100644 --- a/t_1.c +++ b/t_1.c @@ -31,6 +31,12 @@ uint8_t seader_next_cpcb() { return cPCB; } +void seader_t_1_reset() { + NAD = 0x00; + dPCB = 0x40; + cPCB = 0x00; +} + void seader_t_1_set_IFSD(Seader* seader) { SeaderWorker* seader_worker = seader->worker; SeaderUartBridge* seader_uart = seader_worker->uart; diff --git a/t_1.h b/t_1.h index 7f8355a..98129fa 100644 --- a/t_1.h +++ b/t_1.h @@ -7,3 +7,4 @@ typedef struct CCID_Message CCID_Message; void seader_send_t1(SeaderUartBridge* seader_uart, uint8_t* apdu, size_t len); bool seader_recv_t1(Seader* seader, CCID_Message* message); void seader_t_1_set_IFSD(Seader* seader); +void seader_t_1_reset();