Просмотр исходного кода

Merge picopass from https://gitlab.com/bettse/picopass

Willy-JL 1 год назад
Родитель
Сommit
d55ac141f5
1 измененных файлов с 19 добавлено и 1 удалено
  1. 19 1
      picopass/scenes/picopass_scene_saved_menu.c

+ 19 - 1
picopass/scenes/picopass_scene_saved_menu.c

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