Eric Betts 8 месяцев назад
Родитель
Сommit
0a692e53d9
4 измененных файлов с 90 добавлено и 14 удалено
  1. 1 0
      scenes/weebo_scene_config.h
  2. 1 1
      scenes/weebo_scene_saved_menu.c
  3. 88 0
      scenes/weebo_scene_write.c
  4. 0 13
      weebo.c

+ 1 - 0
scenes/weebo_scene_config.h

@@ -2,3 +2,4 @@ ADD_SCENE(weebo, main_menu, MainMenu)
 ADD_SCENE(weebo, keys_missing, KeysMissing)
 ADD_SCENE(weebo, keys_missing, KeysMissing)
 ADD_SCENE(weebo, file_select, FileSelect)
 ADD_SCENE(weebo, file_select, FileSelect)
 ADD_SCENE(weebo, saved_menu, SavedMenu)
 ADD_SCENE(weebo, saved_menu, SavedMenu)
+ADD_SCENE(weebo, write, Write)

+ 1 - 1
scenes/weebo_scene_saved_menu.c

@@ -31,7 +31,7 @@ bool weebo_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         scene_manager_set_scene_state(weebo->scene_manager, WeeboSceneSavedMenu, event.event);
         scene_manager_set_scene_state(weebo->scene_manager, WeeboSceneSavedMenu, event.event);
         if(event.event == SubmenuIndexWrite) {
         if(event.event == SubmenuIndexWrite) {
-            // scene_manager_next_scene(weebo->scene_manager, WeeboSceneWrite);
+            scene_manager_next_scene(weebo->scene_manager, WeeboSceneWrite);
             consumed = true;
             consumed = true;
         }
         }
     }
     }

+ 88 - 0
scenes/weebo_scene_write.c

@@ -0,0 +1,88 @@
+#include "../weebo_i.h"
+#include <nfc/protocols/mf_ultralight/mf_ultralight_poller.h>
+
+#define TAG "SceneWrite"
+
+NfcCommand weebo_scene_write_poller_callback(NfcGenericEvent event, void* context) {
+    furi_assert(event.protocol == NfcProtocolMfUltralight);
+    Weebo* weebo = context;
+    NfcCommand ret = NfcCommandContinue;
+
+    const MfUltralightPollerEvent* mf_ultralight_event = event.event_data;
+
+    if(mf_ultralight_event->type == MfUltralightPollerEventTypeReadSuccess) {
+        nfc_device_set_data(
+            weebo->nfc_device, NfcProtocolMfUltralight, nfc_poller_get_data(weebo->poller));
+        const MfUltralightData* data =
+            nfc_device_get_data(weebo->nfc_device, NfcProtocolMfUltralight);
+
+        if(!mf_ultralight_is_all_data_read(data)) {
+            ret = NfcCommandStop;
+        }
+        if(data->type != MfUltralightTypeNTAG215) {
+            ret = NfcCommandStop;
+        }
+
+        FURI_LOG_D(
+            TAG,
+            "UID: %02X%02X%02X%02X%02X%02X",
+            data->iso14443_3a_data->uid[0],
+            data->iso14443_3a_data->uid[1],
+            data->iso14443_3a_data->uid[2],
+            data->iso14443_3a_data->uid[3],
+            data->iso14443_3a_data->uid[4],
+            data->iso14443_3a_data->uid[5]);
+        ret = NfcCommandStop;
+    }
+    /*
+        } else if(instance->mf_ul_auth->type == MfUltralightAuthTypeAmiibo) {
+            if(mf_ultralight_generate_amiibo_pass(
+                   weebo->mf_ul_auth,
+                   data->iso14443_3a_data->uid,
+                   data->iso14443_3a_data->uid_len)) {
+                mf_ultralight_event->data->auth_context.skip_auth = false;
+            }
+*/
+
+    return ret;
+}
+
+void weebo_scene_write_on_enter(void* context) {
+    Weebo* weebo = context;
+    Popup* popup = weebo->popup;
+
+    popup_set_header(popup, "Writing", 58, 28, AlignCenter, AlignCenter);
+    //popup_set_icon(popup, 0, 3, &I_RFIDDolphinReceive_97x61);
+    // popup_set_text(popup, "words", 64, 36, AlignCenter, AlignTop);
+
+    weebo->poller = nfc_poller_alloc(weebo->nfc, NfcProtocolMfUltralight);
+    nfc_poller_start(weebo->poller, weebo_scene_write_poller_callback, weebo);
+
+    weebo_blink_start(weebo);
+
+    view_dispatcher_switch_to_view(weebo->view_dispatcher, WeeboViewPopup);
+}
+
+bool weebo_scene_write_on_event(void* context, SceneManagerEvent event) {
+    Weebo* weebo = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeCustom) {
+        scene_manager_set_scene_state(weebo->scene_manager, WeeboSceneWrite, event.event);
+    }
+
+    return consumed;
+}
+
+void weebo_scene_write_on_exit(void* context) {
+    Weebo* weebo = context;
+
+    if(weebo->poller) {
+        nfc_poller_stop(weebo->poller);
+        nfc_poller_free(weebo->poller);
+        weebo->poller = NULL;
+    }
+
+    popup_reset(weebo->popup);
+    weebo_blink_stop(weebo);
+}

+ 0 - 13
weebo.c

@@ -4,19 +4,6 @@
 
 
 #define WEEBO_KEY_RETAIL_FILENAME "key_retail"
 #define WEEBO_KEY_RETAIL_FILENAME "key_retail"
 
 
-/*
-uint8_t original[NTAG215_SIZE];
-uint8_t plain_base[NFC3D_AMIIBO_SIZE];
-uint8_t modified[NTAG215_SIZE];
-
-void calculate_pwd(uint8_t* uid, uint8_t* pwd) {
-    pwd[0] = uid[1] ^ uid[3] ^ 0xAA;
-    pwd[1] = uid[2] ^ uid[4] ^ 0x55;
-    pwd[2] = uid[3] ^ uid[5] ^ 0xAA;
-    pwd[3] = uid[4] ^ uid[6] ^ 0x55;
-}
-*/
-
 bool weebo_load_key_retail(Weebo* weebo) {
 bool weebo_load_key_retail(Weebo* weebo) {
     FuriString* path = furi_string_alloc();
     FuriString* path = furi_string_alloc();
     bool parsed = false;
     bool parsed = false;