Przeglądaj źródła

Save SR as legacy from saved menu

Eric Betts 1 rok temu
rodzic
commit
a33ca3a9f1
1 zmienionych plików z 19 dodań i 1 usunięć
  1. 19 1
      scenes/picopass_scene_saved_menu.c

+ 19 - 1
scenes/picopass_scene_saved_menu.c

@@ -7,6 +7,7 @@ enum SubmenuIndex {
     SubmenuIndexRename,
     SubmenuIndexDelete,
     SubmenuIndexSaveAsLF,
+    SubmenuIndexSaveLegacy,
 };
 
 void picopass_scene_saved_menu_submenu_callback(void* context, uint32_t index) {
@@ -25,6 +26,8 @@ void picopass_scene_saved_menu_on_enter(void* context) {
     bool secured = (card_data[PICOPASS_CONFIG_BLOCK_INDEX].data[7] & PICOPASS_FUSE_CRYPT10) !=
                    PICOPASS_FUSE_CRYPT0;
     bool no_credential = picopass_is_memset(pacs->credential, 0x00, sizeof(pacs->credential));
+    bool SR = card_data[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data[0] == 0xA3 &&
+              card_data[10].valid && 0x30 == card_data[10].data[0];
 
     submenu_add_item(
         submenu, "Info", SubmenuIndexInfo, picopass_scene_saved_menu_submenu_callback, picopass);
@@ -44,6 +47,15 @@ void picopass_scene_saved_menu_on_enter(void* context) {
             SubmenuIndexSaveAsLF,
             picopass_scene_saved_menu_submenu_callback,
             picopass);
+
+        if(SR) {
+            submenu_add_item(
+                submenu,
+                "Save as Legacy",
+                SubmenuIndexSaveLegacy,
+                picopass_scene_saved_menu_submenu_callback,
+                picopass);
+        }
     }
 
     submenu_add_item(
@@ -91,10 +103,16 @@ bool picopass_scene_saved_menu_on_event(void* context, SceneManagerEvent event)
             consumed = true;
         } else if(event.event == SubmenuIndexSaveAsLF) {
             scene_manager_set_scene_state(
-                picopass->scene_manager, PicopassSceneCardMenu, SubmenuIndexSaveAsLF);
+                picopass->scene_manager, PicopassSceneSavedMenu, SubmenuIndexSaveAsLF);
             picopass->dev->format = PicopassDeviceSaveFormatLF;
             scene_manager_next_scene(picopass->scene_manager, PicopassSceneSaveName);
             consumed = true;
+        } else if(event.event == SubmenuIndexSaveLegacy) {
+            scene_manager_set_scene_state(
+                picopass->scene_manager, PicopassSceneSavedMenu, SubmenuIndexSaveLegacy);
+            picopass->dev->format = PicopassDeviceSaveFormatLegacy;
+            scene_manager_next_scene(picopass->scene_manager, PicopassSceneSaveName);
+            consumed = true;
         }
     }