Reset HF type prompt state on cancel

This commit is contained in:
CinderSocket
2026-06-17 15:43:00 -07:00
parent 85f3bb4940
commit c868b04a1c
4 changed files with 60 additions and 0 deletions
+39
View File
@@ -2,6 +2,7 @@
#include "munit.h"
#include "runtime_policy.h"
#include "seader_hf_read_plan.h"
static MunitResult test_reset_cached_sam_metadata_clears_all_fields(
const MunitParameter params[],
@@ -237,6 +238,43 @@ static MunitResult test_reset_hf_mode_clears_selection_and_detected_types(
return MUNIT_OK;
}
static MunitResult test_cancel_hf_type_prompt_resets_future_read_to_full_polling(
const MunitParameter params[],
void* fixture) {
(void)params;
(void)fixture;
bool hf_mode_active = true;
SeaderCredentialType selected_read_type = SeaderCredentialTypePicopass;
SeaderCredentialType detected_types[3] = {
SeaderCredentialType14A,
SeaderCredentialTypePicopass,
SeaderCredentialTypeNone,
};
size_t detected_type_count = 2U;
seader_runtime_cancel_hf_type_prompt(
&hf_mode_active,
&selected_read_type,
detected_types,
3U,
&detected_type_count);
munit_assert_false(hf_mode_active);
munit_assert_int(selected_read_type, ==, SeaderCredentialTypeNone);
munit_assert_size(detected_type_count, ==, 0U);
for(size_t i = 0; i < 3U; i++) {
munit_assert_int(detected_types[i], ==, SeaderCredentialTypeNone);
}
const SeaderHfReadPlan next_plan =
seader_hf_read_plan_build(selected_read_type, detected_types, detected_type_count);
munit_assert_int(next_plan.decision, ==, SeaderHfReadDecisionContinuePolling);
munit_assert_int(next_plan.type_to_read, ==, SeaderCredentialTypeNone);
munit_assert_size(next_plan.detected_type_count, ==, 0U);
return MUNIT_OK;
}
static MunitTest test_runtime_policy_cases[] = {
{(char*)"/reset-sam-metadata", test_reset_cached_sam_metadata_clears_all_fields, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL},
{(char*)"/begin-uhf-probe", test_begin_uhf_probe_sets_runtime_and_initializes_probe, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL},
@@ -248,6 +286,7 @@ static MunitTest test_runtime_policy_cases[] = {
{(char*)"/begin-board-auto-recover", test_begin_board_auto_recover_sets_pending_and_target, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL},
{(char*)"/begin-board-auto-recover-invalid", test_begin_board_auto_recover_rejects_invalid_or_duplicate_state, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL},
{(char*)"/reset-hf-mode", test_reset_hf_mode_clears_selection_and_detected_types, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL},
{(char*)"/cancel-hf-type-prompt", test_cancel_hf_type_prompt_resets_future_read_to_full_polling, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL},
{NULL, NULL, NULL, NULL, 0, NULL},
};
+14
View File
@@ -162,3 +162,17 @@ void seader_runtime_reset_hf_mode(
*hf_mode_active = false;
}
}
void seader_runtime_cancel_hf_type_prompt(
bool* hf_mode_active,
SeaderCredentialType* selected_read_type,
SeaderCredentialType detected_types[],
size_t detected_capacity,
size_t* detected_type_count) {
seader_runtime_reset_hf_mode(
hf_mode_active,
selected_read_type,
detected_types,
detected_capacity,
detected_type_count);
}
+6
View File
@@ -50,3 +50,9 @@ void seader_runtime_reset_hf_mode(
SeaderCredentialType detected_types[],
size_t detected_capacity,
size_t* detected_type_count);
void seader_runtime_cancel_hf_type_prompt(
bool* hf_mode_active,
SeaderCredentialType* selected_read_type,
SeaderCredentialType detected_types[],
size_t detected_capacity,
size_t* detected_type_count);
+1
View File
@@ -55,6 +55,7 @@ bool seader_scene_read_card_type_on_event(void* context, SceneManagerEvent event
consumed = true;
}
} else if(event.type == SceneManagerEventTypeBack) {
seader_hf_mode_deactivate(seader);
consumed = seader_hf_request_teardown(seader, SeaderHfTeardownActionSamPresent);
}