Explorar o código

Add SR format behind debug

Eric Betts %!s(int64=2) %!d(string=hai) anos
pai
achega
7a16401108
Modificáronse 3 ficheiros con 47 adicións e 1 borrados
  1. 19 0
      scenes/seader_scene_card_menu.c
  2. 27 1
      seader_credential.c
  3. 1 0
      seader_credential.h

+ 19 - 0
scenes/seader_scene_card_menu.c

@@ -4,6 +4,7 @@ enum SubmenuIndex {
     SubmenuIndexSave,
     SubmenuIndexSavePicopass,
     SubmenuIndexSaveRFID,
+    SubmenuIndexSaveSR,
 };
 
 void seader_scene_card_menu_submenu_callback(void* context, uint32_t index) {
@@ -14,6 +15,8 @@ void seader_scene_card_menu_submenu_callback(void* context, uint32_t index) {
 
 void seader_scene_card_menu_on_enter(void* context) {
     Seader* seader = context;
+    SeaderWorker* seader_worker = seader->worker;
+    SeaderCredential* credential = seader_worker->credential;
     Submenu* submenu = seader->submenu;
 
     submenu_add_item(
@@ -30,6 +33,16 @@ void seader_scene_card_menu_on_enter(void* context) {
         SubmenuIndexSaveRFID,
         seader_scene_card_menu_submenu_callback,
         seader);
+    if (seader->is_debug_enabled) {
+        if (credential->sio[0] != 0) {
+    submenu_add_item(
+        submenu,
+        "Save SR",
+        SubmenuIndexSaveSR,
+        seader_scene_card_menu_submenu_callback,
+        seader);
+        }
+    }
 
     submenu_set_selected_item(
         seader->submenu,
@@ -60,6 +73,12 @@ bool seader_scene_card_menu_on_event(void* context, SceneManagerEvent event) {
             seader->credential->save_format = SeaderCredentialSaveFormatRFID;
             scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
             consumed = true;
+        } else if(event.event == SubmenuIndexSaveSR) {
+            scene_manager_set_scene_state(
+                seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveSR);
+            seader->credential->save_format = SeaderCredentialSaveFormatSR;
+            scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
+            consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeBack) {
         consumed = scene_manager_search_and_switch_to_previous_scene(

+ 27 - 1
seader_credential.c

@@ -19,6 +19,7 @@
 #define AIA_INDEX 5
 #define PACS_CFG_INDEX 6
 #define PACS_INDEX 7
+#define SR_SIO_INDEX 10
 
 static const char* seader_file_header = "Flipper Seader Credential";
 static const uint32_t seader_file_version = 1;
@@ -158,9 +159,10 @@ bool seader_credential_save(SeaderCredential* cred, const char* name) {
 
     if(cred->save_format == SeaderCredentialSaveFormatAgnostic) {
         return seader_credential_save_agnostic(cred, name);
-    } else if(cred->save_format == SeaderCredentialSaveFormatPicopass) {
+    } else if(cred->save_format == SeaderCredentialSaveFormatPicopass || cred->save_format == SeaderCredentialSaveFormatSR) {
         bool use_load_path = true;
         bool saved = false;
+        bool withSIO = cred->save_format == SeaderCredentialSaveFormatSR;
         FlipperFormat* file = flipper_format_file_alloc(cred->storage);
         FuriString* temp_str = furi_string_alloc();
 
@@ -220,6 +222,9 @@ bool seader_credential_save(SeaderCredential* cred, const char* name) {
                     }
                     break;
                 case PACS_CFG_INDEX:
+                    if (withSIO) {
+                        pacs_cfg[0] = 0xA3;
+                    }
                     if(!flipper_format_write_hex(
                            file, furi_string_get_cstr(temp_str), pacs_cfg, sizeof(pacs_cfg))) {
                         block_saved = false;
@@ -234,6 +239,27 @@ bool seader_credential_save(SeaderCredential* cred, const char* name) {
                         block_saved = false;
                     }
                     break;
+                case SR_SIO_INDEX:
+                case SR_SIO_INDEX + 1:
+                case SR_SIO_INDEX + 2:
+                case SR_SIO_INDEX + 3:
+                case SR_SIO_INDEX + 4:
+                case SR_SIO_INDEX + 5:
+                case SR_SIO_INDEX + 6:
+                case SR_SIO_INDEX + 7:
+                    if (withSIO) {
+                        if(!flipper_format_write_hex(
+                               file, furi_string_get_cstr(temp_str), cred->sio + ((i - SR_SIO_INDEX) * PICOPASS_BLOCK_LEN), PICOPASS_BLOCK_LEN)) {
+                            block_saved = false;
+                        }
+                    } else {
+                        if(!flipper_format_write_hex(
+                               file, furi_string_get_cstr(temp_str), zero, sizeof(zero))) {
+                            block_saved = false;
+                        }
+
+                    }
+                    break;
                 default:
                     if(!flipper_format_write_hex(
                            file, furi_string_get_cstr(temp_str), zero, sizeof(zero))) {

+ 1 - 0
seader_credential.h

@@ -22,6 +22,7 @@ typedef enum {
     SeaderCredentialSaveFormatAgnostic,
     SeaderCredentialSaveFormatPicopass,
     SeaderCredentialSaveFormatRFID,
+    SeaderCredentialSaveFormatSR,
 } SeaderCredentialSaveFormat;
 
 typedef struct {