From ae535f9c1e1a08628d09b48509e4afd12ee2a86e Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Sat, 22 Jun 2024 20:37:32 -0700 Subject: [PATCH] Handle SAM removal better --- ccid.c | 11 ++++++++++- scenes/seader_scene_sam_present.c | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ccid.c b/ccid.c index 5d12895d255..c2595ce4078 100644 --- a/ccid.c +++ b/ccid.c @@ -141,7 +141,7 @@ size_t seader_ccid_process(Seader* seader, uint8_t* cmd, size_t cmd_len) { for(uint8_t i = 0; i < cmd_len; i++) { snprintf(display + (i * 2), sizeof(display), "%02x", cmd[i]); } - // FURI_LOG_D(TAG, "UART %d: %s", cmd_len, display); + FURI_LOG_D(TAG, "UART %d: %s", cmd_len, display); if(cmd_len == 2) { if(cmd[0] == CCID_MESSAGE_TYPE_RDR_to_PC_NotifySlotChange) { @@ -164,6 +164,10 @@ size_t seader_ccid_process(Seader* seader, uint8_t* cmd, size_t cmd_len) { powered[0] = false; hasSAM = false; retries = 3; + if(seader_worker->callback) { + seader_worker->callback( + SeaderWorkerEventSamMissing, seader_worker->context); + } } break; }; @@ -187,6 +191,10 @@ size_t seader_ccid_process(Seader* seader, uint8_t* cmd, size_t cmd_len) { powered[1] = false; hasSAM = false; retries = 3; + if(seader_worker->callback) { + seader_worker->callback( + SeaderWorkerEventSamMissing, seader_worker->context); + } } break; }; @@ -276,6 +284,7 @@ size_t seader_ccid_process(Seader* seader, uint8_t* cmd, size_t cmd_len) { //0306 80 00000000 0001 42fe 00 38 if(message.bStatus == 0x41 && message.bError == 0xfe) { FURI_LOG_W(TAG, "card probably upside down"); + hasSAM = false; if(seader_worker->callback) { seader_worker->callback(SeaderWorkerEventSamMissing, seader_worker->context); } diff --git a/scenes/seader_scene_sam_present.c b/scenes/seader_scene_sam_present.c index f65fc07b0bf..728bb889a87 100644 --- a/scenes/seader_scene_sam_present.c +++ b/scenes/seader_scene_sam_present.c @@ -97,6 +97,9 @@ bool seader_scene_sam_present_on_event(void* context, SceneManagerEvent event) { consumed = true; } else if(event.event == SubmenuIndexFwVersion) { consumed = true; + } else if(event.event == SeaderWorkerEventSamMissing) { + scene_manager_next_scene(seader->scene_manager, SeaderSceneSamMissing); + consumed = true; } } else if(event.type == SceneManagerEventTypeBack) { scene_manager_stop(seader->scene_manager);