From f7830b8db7bbcae6c166d28f11fee6c0d837beb9 Mon Sep 17 00:00:00 2001 From: CinderSocket Date: Mon, 9 Mar 2026 10:26:37 -0700 Subject: [PATCH] Update SAM scenes for SNMP status --- scenes/seader_scene_sam_info.c | 18 +++++++++++++++++- scenes/seader_scene_sam_missing.c | 11 ++++++----- scenes/seader_scene_sam_present.c | 25 +++++++++++++------------ scenes/seader_scene_start.c | 6 ++++++ 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/scenes/seader_scene_sam_info.c b/scenes/seader_scene_sam_info.c index 2463497..357d25c 100644 --- a/scenes/seader_scene_sam_info.c +++ b/scenes/seader_scene_sam_info.c @@ -17,15 +17,27 @@ void seader_scene_sam_info_on_enter(void* context) { // Use reusable string instead of allocating new one FuriString* fw_str = seader->temp_string1; + FuriString* info_str = seader->temp_string2; + FuriString* uhf_str = seader->temp_string3; + + furi_string_reset(fw_str); + furi_string_reset(info_str); + furi_string_reset(uhf_str); furi_string_cat_printf( fw_str, "FW %d.%d", seader_worker->sam_version[0], seader_worker->sam_version[1]); + furi_string_set_str(info_str, seader->sam_key_label); + furi_string_set_str(uhf_str, seader->uhf_status_label); widget_add_button_element( seader->widget, GuiButtonTypeLeft, "Back", seader_scene_sam_info_widget_callback, seader); widget_add_string_element( - widget, 64, 5, AlignCenter, AlignCenter, FontSecondary, furi_string_get_cstr(fw_str)); + widget, 64, 14, AlignCenter, AlignCenter, FontPrimary, furi_string_get_cstr(info_str)); + widget_add_text_box_element( + widget, 5, 22, 118, 20, AlignCenter, AlignTop, furi_string_get_cstr(uhf_str), false); + widget_add_string_element( + widget, 64, 50, AlignCenter, AlignCenter, FontSecondary, furi_string_get_cstr(fw_str)); // No need to free fw_str as it's reused from seader struct @@ -39,6 +51,10 @@ bool seader_scene_sam_info_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { if(event.event == GuiButtonTypeLeft) { consumed = scene_manager_previous_scene(seader->scene_manager); + } else if(event.event == SeaderCustomEventSamStatusUpdated) { + seader_scene_sam_info_on_exit(context); + seader_scene_sam_info_on_enter(context); + consumed = true; } } else if(event.type == SceneManagerEventTypeBack) { consumed = scene_manager_search_and_switch_to_previous_scene( diff --git a/scenes/seader_scene_sam_missing.c b/scenes/seader_scene_sam_missing.c index 05463fa..ef00cc6 100644 --- a/scenes/seader_scene_sam_missing.c +++ b/scenes/seader_scene_sam_missing.c @@ -1,5 +1,6 @@ #include "../seader_i.h" enum SubmenuIndex { + SubmenuIndexNoSam, SubmenuIndexDetectSam, SubmenuIndexSaved, }; @@ -15,11 +16,9 @@ void seader_scene_sam_missing_on_enter(void* context) { Submenu* submenu = seader->submenu; submenu_add_item( - submenu, - "No SAM: Retry", - SubmenuIndexDetectSam, - seader_scene_sam_missing_submenu_callback, - seader); + submenu, "NO SAM", SubmenuIndexNoSam, seader_scene_sam_missing_submenu_callback, seader); + submenu_add_item( + submenu, "Retry", SubmenuIndexDetectSam, seader_scene_sam_missing_submenu_callback, seader); submenu_add_item( submenu, "Saved", SubmenuIndexSaved, seader_scene_sam_missing_submenu_callback, seader); @@ -37,6 +36,8 @@ bool seader_scene_sam_missing_on_event(void* context, SceneManagerEvent event) { if(event.event == SubmenuIndexDetectSam) { scene_manager_next_scene(seader->scene_manager, SeaderSceneStart); consumed = true; + } else if(event.event == SubmenuIndexNoSam) { + consumed = true; } else if(event.event == SubmenuIndexSaved) { scene_manager_next_scene(seader->scene_manager, SeaderSceneFileSelect); consumed = true; diff --git a/scenes/seader_scene_sam_present.c b/scenes/seader_scene_sam_present.c index c216c75..3c555a8 100644 --- a/scenes/seader_scene_sam_present.c +++ b/scenes/seader_scene_sam_present.c @@ -1,10 +1,9 @@ #include "../seader_i.h" enum SubmenuIndex { + SubmenuIndexSamInfo, SubmenuIndexRead, SubmenuIndexSaved, SubmenuIndexAPDURunner, - SubmenuIndexSamInfo, - SubmenuIndexFwVersion, SubmenuIndexReadConfigCard, }; @@ -45,19 +44,20 @@ void seader_scene_sam_present_on_update(void* context) { seader); } if(seader_worker->sam_version[0] != 0 && seader_worker->sam_version[1] != 0) { - // Use reusable string instead of allocating new one - FuriString* fw_str = seader->temp_string1; - furi_string_reset(fw_str); - furi_string_cat_printf( - fw_str, "FW %d.%d", seader_worker->sam_version[0], seader_worker->sam_version[1]); submenu_add_item( submenu, - furi_string_get_cstr(fw_str), - SubmenuIndexFwVersion, + seader->sam_key_label, + SubmenuIndexSamInfo, seader_scene_sam_present_submenu_callback, seader); - // No need to free fw_str as it's reused from seader struct fwChecks = 0; + } else { + submenu_add_item( + submenu, + seader->sam_key_label, + SubmenuIndexSamInfo, + seader_scene_sam_present_submenu_callback, + seader); } submenu_set_selected_item( @@ -91,14 +91,15 @@ bool seader_scene_sam_present_on_event(void* context, SceneManagerEvent event) { } else if(event.event == SubmenuIndexSaved) { scene_manager_next_scene(seader->scene_manager, SeaderSceneFileSelect); 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.event == SubmenuIndexAPDURunner) { scene_manager_next_scene(seader->scene_manager, SeaderSceneAPDURunner); consumed = true; + } else if(event.event == SeaderCustomEventSamStatusUpdated) { + seader_scene_sam_present_on_update(context); + consumed = true; } } else if(event.type == SceneManagerEventTypeBack) { scene_manager_stop(seader->scene_manager); diff --git a/scenes/seader_scene_start.c b/scenes/seader_scene_start.c index 33d6a27..3886c3c 100644 --- a/scenes/seader_scene_start.c +++ b/scenes/seader_scene_start.c @@ -46,9 +46,15 @@ bool seader_scene_start_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(seader->scene_manager, SeaderSceneSamPresent); consumed = true; } else if(event.event == SeaderWorkerEventSamMissing) { + seader->sam_present = false; + seader_sam_key_label_format( + false, NULL, 0U, seader->sam_key_label, sizeof(seader->sam_key_label)); scene_manager_next_scene(seader->scene_manager, SeaderSceneSamMissing); consumed = true; } else if(event.event == SeaderWorkerEventSamWrong) { + seader->sam_present = false; + seader_sam_key_label_format( + false, NULL, 0U, seader->sam_key_label, sizeof(seader->sam_key_label)); scene_manager_next_scene(seader->scene_manager, SeaderSceneSamWrong); consumed = true; }