TollyH 2 лет назад
Родитель
Сommit
bd63867da4

+ 1 - 0
scenes/mfc_editor_scene_config.h

@@ -1,3 +1,4 @@
 ADD_SCENE(mfc_editor, start, Start)
 ADD_SCENE(mfc_editor, file_select, FileSelect)
 ADD_SCENE(mfc_editor, invalid_file, InvalidFile)
+ADD_SCENE(mfc_editor, sector_select, SectorSelect)

+ 2 - 3
scenes/mfc_editor_scene_file_select.c

@@ -5,9 +5,8 @@ void mfc_editor_scene_file_select_on_enter(void* context) {
 
     if(mfc_editor_prompt_load_file(instance)) {
         if(nfc_device_get_protocol(instance->nfc_device) == NfcProtocolMfClassic) {
-            FURI_LOG_I(
-                TAG, "Valid MFC file selected at '%s'", furi_string_get_cstr(instance->file_path));
-            scene_manager_previous_scene(instance->scene_manager);
+            scene_manager_set_scene_state(instance->scene_manager, MfcEditorSceneSectorSelect, 0);
+            scene_manager_next_scene(instance->scene_manager, MfcEditorSceneSectorSelect);
         } else {
             scene_manager_next_scene(instance->scene_manager, MfcEditorSceneInvalidFile);
         }

+ 2 - 1
scenes/mfc_editor_scene_invalid_file.c

@@ -10,7 +10,8 @@ void mfc_editor_scene_invalid_file_on_enter(void* context) {
 
     Popup* popup = instance->popup;
     popup_set_header(popup, "Invalid file", 63, 10, AlignCenter, AlignTop);
-    popup_set_text(popup, "Only MIFARE Classic files\nare supported", 63, 40, AlignCenter, AlignCenter);
+    popup_set_text(
+        popup, "Only MIFARE Classic files\nare supported", 63, 40, AlignCenter, AlignCenter);
     popup_set_context(popup, instance);
     popup_set_callback(popup, mfc_editor_scene_invalid_file_popup_callback);
 

+ 47 - 0
scenes/mfc_editor_scene_sector_select.c

@@ -0,0 +1,47 @@
+#include "../mfc_editor_app_i.h"
+
+void mfc_editor_scene_sector_select_submenu_callback(void* context, uint32_t index) {
+    MfcEditorApp* instance = context;
+    view_dispatcher_send_custom_event(instance->view_dispatcher, index);
+}
+
+void mfc_editor_scene_sector_select_on_enter(void* context) {
+    MfcEditorApp* instance = context;
+
+    const MfClassicData* mf_classic_data =
+        nfc_device_get_data(instance->nfc_device, NfcProtocolMfClassic);
+
+    Submenu* submenu = instance->submenu;
+    submenu_set_header(submenu, "Select sector");
+
+    for(int i = 0; i < mf_classic_get_total_sectors_num(mf_classic_data->type); i++) {
+        char label[sizeof("Sector ") + 20];
+        snprintf(label, sizeof(label), "Sector %i", i);
+        submenu_add_item(
+            submenu, label, i, mfc_editor_scene_sector_select_submenu_callback, instance);
+    }
+
+    submenu_set_selected_item(
+        submenu,
+        scene_manager_get_scene_state(instance->scene_manager, MfcEditorSceneSectorSelect));
+    view_dispatcher_switch_to_view(instance->view_dispatcher, MfcEditorAppViewSubmenu);
+}
+
+bool mfc_editor_scene_sector_select_on_event(void* context, SceneManagerEvent event) {
+    MfcEditorApp* instance = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeCustom) {
+        FURI_LOG_I(TAG, "Opened sector %lu", event.event);
+        scene_manager_search_and_switch_to_previous_scene(
+            instance->scene_manager, MfcEditorSceneStart);
+    }
+
+    return consumed;
+}
+
+void mfc_editor_scene_sector_select_on_exit(void* context) {
+    MfcEditorApp* instance = context;
+
+    submenu_reset(instance->submenu);
+}