MX 1 سال پیش
والد
کامیت
2bf612eb7b
8فایلهای تغییر یافته به همراه32 افزوده شده و 2 حذف شده
  1. 2 1
      application.fam
  2. BIN
      icons/mag_10px.png
  3. 24 0
      mag.c
  4. 4 1
      mag_device.h
  5. 2 0
      mag_i.h
  6. 0 0
      resources/SamyExampleImage.mag
  7. 0 0
      resources/SamyExpiredCard.mag
  8. 0 0
      resources/TestMagstripe.mag

+ 2 - 1
application.fam

@@ -12,7 +12,7 @@ App(
     ],
     provides=[],
     stack_size=6 * 1024,
-    order=64,  # keep it at the bottom of the list while still WIP
+    order=64,
     fap_icon="icons/mag_10px.png",
     fap_category="GPIO",
     fap_icon_assets="icons",
@@ -21,4 +21,5 @@ App(
     fap_description="Enables wireless transmission of magstripe data",
     fap_author="Zachary Weiss",
     fap_weburl="https://github.com/zacharyweiss/magspoof_flipper",
+    fap_file_assets="resources",
 )

BIN
icons/mag_10px.png


+ 24 - 0
mag.c

@@ -157,6 +157,7 @@ int32_t mag_app(void* p) {
     }
 
     mag_make_app_folder(mag);
+    mag_migrate_and_copy_files(mag);
 
     // Enable 5v power, multiple attempts to avoid issues with power chip protection false triggering
     uint8_t attempts = 0;
@@ -199,6 +200,29 @@ void mag_make_app_folder(Mag* mag) {
     }
 }
 
+void mag_migrate_and_copy_files(Mag* mag) {
+    furi_assert(mag);
+    Storage* storage = mag->storage;
+
+    storage_common_migrate(storage, EXT_PATH("magspoof"), STORAGE_APP_DATA_PATH_PREFIX);
+    storage_common_migrate(storage, EXT_PATH("mag"), STORAGE_APP_DATA_PATH_PREFIX);
+
+    if(!storage_common_exists(storage, APP_DATA_PATH(MAG_EXAMPLE_FILE_1))) {
+        storage_common_copy(
+            storage, APP_ASSETS_PATH(MAG_EXAMPLE_FILE_1), APP_DATA_PATH(MAG_EXAMPLE_FILE_1));
+    }
+
+    if(!storage_common_exists(storage, APP_DATA_PATH(MAG_EXAMPLE_FILE_2))) {
+        storage_common_copy(
+            storage, APP_ASSETS_PATH(MAG_EXAMPLE_FILE_2), APP_DATA_PATH(MAG_EXAMPLE_FILE_2));
+    }
+
+    if(!storage_common_exists(storage, APP_DATA_PATH(MAG_EXAMPLE_FILE_3))) {
+        storage_common_copy(
+            storage, APP_ASSETS_PATH(MAG_EXAMPLE_FILE_3), APP_DATA_PATH(MAG_EXAMPLE_FILE_3));
+    }
+}
+
 void mag_text_store_set(Mag* mag, const char* text, ...) {
     furi_assert(mag);
     va_list args;

+ 4 - 1
mag_device.h

@@ -8,13 +8,16 @@
 #include "mag_icons.h"
 #include "helpers/mag_types.h"
 
-
 #define MAG_DEV_NAME_MAX_LEN 22
 #define MAG_DEV_TRACKS 3
 
 #define MAG_APP_FOLDER STORAGE_APP_DATA_PATH_PREFIX
 #define MAG_APP_EXTENSION ".mag"
 
+#define MAG_EXAMPLE_FILE_1 "TestMagstripe.mag"
+#define MAG_EXAMPLE_FILE_2 "SamyExpiredCard.mag"
+#define MAG_EXAMPLE_FILE_3 "SamyExampleImage.mag"
+
 typedef void (*MagLoadingCallback)(void* context, bool state);
 
 typedef struct {

+ 2 - 0
mag_i.h

@@ -102,6 +102,8 @@ void mag_show_loading_popup(void* context, bool show);
 
 void mag_make_app_folder(Mag* mag);
 
+void mag_migrate_and_copy_files(Mag* mag);
+
 void mag_popup_timeout_callback(void* context);
 
 void mag_widget_callback(GuiButtonType result, InputType type, void* context);

+ 0 - 0
assets/SamyExampleImage.mag → resources/SamyExampleImage.mag


+ 0 - 0
assets/SamyExpiredCard.mag → resources/SamyExpiredCard.mag


+ 0 - 0
assets/TestMagstripe.mag → resources/TestMagstripe.mag