|
@@ -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;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|