From 08e63aa8c2df5d046c2373b13d6076a478edaf83 Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Tue, 21 Nov 2023 17:04:56 -0800 Subject: [PATCH] push to next UI on error --- sam_api.c | 13 ++++++++++--- seader_worker.c | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/sam_api.c b/sam_api.c index c3d5c4c..5ce285d 100644 --- a/sam_api.c +++ b/sam_api.c @@ -182,7 +182,8 @@ void seader_send_card_detected(SeaderUartBridge* seader_uart, CardDetails_t* car ASN_STRUCT_FREE(asn_DEF_Payload, payload); } -bool seader_unpack_pacs(SeaderCredential* seader_credential, uint8_t* buf, size_t size) { +bool seader_unpack_pacs(Seader* seader, uint8_t* buf, size_t size) { + SeaderCredential* seader_credential = seader->credential; PAC_t* pac = 0; pac = calloc(1, sizeof *pac); assert(pac); @@ -216,6 +217,8 @@ bool seader_unpack_pacs(SeaderCredential* seader_credential, uint8_t* buf, size_ rtn = true; } else { // PACS too big (probably bad data) + view_dispatcher_send_custom_event( + seader->view_dispatcher, SeaderCustomEventWorkerExit); } } @@ -266,7 +269,7 @@ bool seader_parse_version(SeaderWorker* seader_worker, uint8_t* buf, size_t size bool seader_parse_sam_response(Seader* seader, SamResponse_t* samResponse) { SeaderWorker* seader_worker = seader->worker; SeaderUartBridge* seader_uart = seader_worker->uart; - SeaderCredential* credential = seader->credential; + FURI_LOG_D(TAG, "seader_parse_sam_response"); if(samResponse->size == 0) { if(requestPacs) { @@ -275,10 +278,12 @@ bool seader_parse_sam_response(Seader* seader, SamResponse_t* samResponse) { requestPacs = false; } else { FURI_LOG_D(TAG, "samResponse %d, no action", samResponse->size); + view_dispatcher_send_custom_event( + seader->view_dispatcher, SeaderCustomEventWorkerExit); } } else if(seader_parse_version(seader_worker, samResponse->buf, samResponse->size)) { // no-op - } else if(seader_unpack_pacs(credential, samResponse->buf, samResponse->size)) { + } else if(seader_unpack_pacs(seader, samResponse->buf, samResponse->size)) { view_dispatcher_send_custom_event(seader->view_dispatcher, SeaderCustomEventWorkerExit); } else { memset(display, 0, sizeof(display)); @@ -297,6 +302,7 @@ bool seader_parse_response(Seader* seader, Response_t* response) { seader_parse_sam_response(seader, &response->choice.samResponse); break; default: + FURI_LOG_D(TAG, "non-sam response"); break; }; return false; @@ -591,6 +597,7 @@ bool seader_worker_state_machine( case Payload_PR_errorResponse: FURI_LOG_W(TAG, "Error Response"); processed = true; + view_dispatcher_send_custom_event(seader->view_dispatcher, SeaderCustomEventWorkerExit); break; default: FURI_LOG_W(TAG, "unhandled payload"); diff --git a/seader_worker.c b/seader_worker.c index bf6f944..efee729 100644 --- a/seader_worker.c +++ b/seader_worker.c @@ -182,6 +182,8 @@ void seader_worker_poller_conversation(Seader* seader, SeaderPollerContainer* sp if(status != FuriStatusOk) { FURI_LOG_W(TAG, "furi_message_queue_get fail %d", status); seader_worker->stage = SeaderPollerEventTypeComplete; + view_dispatcher_send_custom_event( + seader->view_dispatcher, SeaderCustomEventWorkerExit); } if(seader_process_success_response_i(