|
|
@@ -8,6 +8,7 @@ enum SubmenuIndex {
|
|
|
SubmenuIndexDelete,
|
|
|
SubmenuIndexSaveAsLF,
|
|
|
SubmenuIndexSaveLegacy,
|
|
|
+ SubmenuIndexSaveAsSeader,
|
|
|
};
|
|
|
|
|
|
void picopass_scene_saved_menu_submenu_callback(void* context, uint32_t index) {
|
|
|
@@ -26,8 +27,11 @@ 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 SE = card_data[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].valid &&
|
|
|
+ 0x30 == card_data[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data[0];
|
|
|
bool SR = card_data[PICOPASS_ICLASS_PACS_CFG_BLOCK_INDEX].data[0] == 0xA3 &&
|
|
|
card_data[10].valid && 0x30 == card_data[10].data[0];
|
|
|
+ bool has_sio = SE || SR;
|
|
|
|
|
|
submenu_add_item(
|
|
|
submenu, "Info", SubmenuIndexInfo, picopass_scene_saved_menu_submenu_callback, picopass);
|
|
|
@@ -40,6 +44,15 @@ void picopass_scene_saved_menu_on_enter(void* context) {
|
|
|
picopass_scene_saved_menu_submenu_callback,
|
|
|
picopass);
|
|
|
|
|
|
+ if(secured && has_sio) {
|
|
|
+ submenu_add_item(
|
|
|
+ submenu,
|
|
|
+ "Save in Seader fmt",
|
|
|
+ SubmenuIndexSaveAsSeader,
|
|
|
+ picopass_scene_saved_menu_submenu_callback,
|
|
|
+ picopass);
|
|
|
+ }
|
|
|
+
|
|
|
if(secured && !no_credential) {
|
|
|
submenu_add_item(
|
|
|
submenu,
|
|
|
@@ -113,6 +126,12 @@ bool picopass_scene_saved_menu_on_event(void* context, SceneManagerEvent event)
|
|
|
picopass->dev->format = PicopassDeviceSaveFormatLegacy;
|
|
|
scene_manager_next_scene(picopass->scene_manager, PicopassSceneSaveName);
|
|
|
consumed = true;
|
|
|
+ } else if(event.event == SubmenuIndexSaveAsSeader) {
|
|
|
+ scene_manager_set_scene_state(
|
|
|
+ picopass->scene_manager, PicopassSceneSavedMenu, event.event);
|
|
|
+ scene_manager_next_scene(picopass->scene_manager, PicopassSceneSaveName);
|
|
|
+ picopass->dev->format = PicopassDeviceSaveFormatSeader;
|
|
|
+ consumed = true;
|
|
|
}
|
|
|
}
|
|
|
|