diff --git a/scenes/seader_scene_read_common.c b/scenes/seader_scene_read_common.c new file mode 100644 index 0000000..0a6e069 --- /dev/null +++ b/scenes/seader_scene_read_common.c @@ -0,0 +1,55 @@ +#include "seader_scene_read_common.h" + +#include "../seader_i.h" +#include "../trace_log.h" + +void seader_scene_read_prepare(Seader* seader) { + furi_assert(seader); + FURI_LOG_D("SceneRead", "Prepare session sam=%d", seader->samCommand); + seader_trace( + "SceneRead", + "prepare sam=%d state=%d intent=%d", + seader->samCommand, + seader->sam_state, + seader->sam_intent); + if(seader->sam_state == SeaderSamStateIdle) { + seader->samCommand = SamCommand_PR_NOTHING; + } + memset(seader->read_error, 0, sizeof(seader->read_error)); + seader_worker_reset_poller_session(seader->worker); +} + +void seader_scene_read_cleanup(Seader* seader) { + furi_assert(seader); + FURI_LOG_D("SceneRead", "Cleanup session sam=%d", seader->samCommand); + seader_trace( + "SceneRead", + "cleanup sam=%d state=%d intent=%d", + seader->samCommand, + seader->sam_state, + seader->sam_intent); + seader_worker_cancel_poller_session(seader->worker); + + if(seader_sam_has_active_card(seader)) { + seader_send_no_card_detected(seader); + } + + if(seader->poller) { + nfc_poller_stop(seader->poller); + nfc_poller_free(seader->poller); + seader->poller = NULL; + } + + if(seader->picopass_poller) { + picopass_poller_stop(seader->picopass_poller); + picopass_poller_free(seader->picopass_poller); + seader->picopass_poller = NULL; + } + + popup_reset(seader->popup); + seader_worker_reset_poller_session(seader->worker); + if(seader->sam_state == SeaderSamStateIdle) { + seader->samCommand = SamCommand_PR_NOTHING; + } + seader_blink_stop(seader); +} diff --git a/scenes/seader_scene_read_common.h b/scenes/seader_scene_read_common.h new file mode 100644 index 0000000..6261c0a --- /dev/null +++ b/scenes/seader_scene_read_common.h @@ -0,0 +1,6 @@ +#pragma once + +typedef struct Seader Seader; + +void seader_scene_read_prepare(Seader* seader); +void seader_scene_read_cleanup(Seader* seader);