diff --git a/lib/nfc/protocols/mf_classic/mf_classic_listener.c b/lib/nfc/protocols/mf_classic/mf_classic_listener.c index 3423e89e4..bd25aba23 100644 --- a/lib/nfc/protocols/mf_classic/mf_classic_listener.c +++ b/lib/nfc/protocols/mf_classic/mf_classic_listener.c @@ -40,10 +40,11 @@ static void mf_classic_listener_reset_state(MfClassicListener* instance) { static MfClassicListenerCommand mf_classic_listener_halt_handler(MfClassicListener* instance, BitBuffer* buff) { + UNUSED(instance); + MfClassicListenerCommand command = MfClassicListenerCommandNack; if(bit_buffer_get_byte(buff, 1) == MF_CLASSIC_CMD_HALT_LSB) { - mf_classic_listener_reset_state(instance); command = MfClassicListenerCommandSleep; } @@ -59,10 +60,7 @@ static MfClassicListenerCommand mf_classic_listener_auth_first_part_handler( do { instance->state = MfClassicListenerStateIdle; - if(block_num >= instance->total_block_num) { - mf_classic_listener_reset_state(instance); - break; - } + if(block_num >= instance->total_block_num) break; uint8_t sector_num = mf_classic_get_sector_by_block(block_num); @@ -135,7 +133,7 @@ static MfClassicListenerCommand instance->cmd_in_progress = false; if(bit_buffer_get_size_bytes(buff) != (sizeof(MfClassicNr) + sizeof(MfClassicAr))) { - mf_classic_listener_reset_state(instance); + command = MfClassicListenerCommandSleep; break; } bit_buffer_write_bytes_mid(buff, instance->auth_context.nr.data, 0, sizeof(MfClassicNr)); @@ -157,7 +155,7 @@ static MfClassicListenerCommand if(secret_poller != prng_successor(nt_num, 64)) { FURI_LOG_T( TAG, "Wrong reader key: %08lX != %08lX", secret_poller, prng_successor(nt_num, 64)); - mf_classic_listener_reset_state(instance); + command = MfClassicListenerCommandSleep; break; } @@ -610,9 +608,11 @@ NfcCommand mf_classic_listener_run(NfcGenericEvent event, void* context) { } mf_classic_listener_send_short_frame(instance, nack); + mf_classic_listener_reset_state(instance); } else if(mfc_command == MfClassicListenerCommandSilent) { command = NfcCommandReset; } else if(mfc_command == MfClassicListenerCommandSleep) { + mf_classic_listener_reset_state(instance); command = NfcCommandSleep; } } else if(iso3_event->type == Iso14443_3aListenerEventTypeHalted) {