Преглед изворни кода

Restart NFC scanner is unhandled protocol is found

Eric Betts пре 9 месеци
родитељ
комит
80348d61d7
2 измењених фајлова са 12 додато и 5 уклоњено
  1. 1 0
      passy_i.h
  2. 11 5
      scenes/passy_scene_read.c

+ 1 - 0
passy_i.h

@@ -51,6 +51,7 @@ enum PassyCustomEvent {
     // Read card events
     PassyCustomEventReaderError,
     PassyCustomEventReaderSuccess,
+    PassyCustomEventReaderRestart,
     PassyCustomEventReaderDetected,
     PassyCustomEventReaderAuthenticated,
     PassyCustomEventReaderReading,

+ 11 - 5
scenes/passy_scene_read.c

@@ -16,14 +16,16 @@ void passy_scene_detect_scan_callback(NfcScannerEvent event, void* context) {
             passy->proto = "4a";
         } else if(event.data.protocols && *event.data.protocols == NfcProtocolIso14443_4b) {
             passy->proto = "4b";
-        } else if(event.data.protocols && *event.data.protocols == NfcProtocolIso14443_3b) {
-            passy->proto = "4b";
         } else {
             FURI_LOG_E(TAG, "Unknown protocol detected, %d", *event.data.protocols);
-            passy->proto = "";
-            // just continue as expected..
         }
-        view_dispatcher_send_custom_event(passy->view_dispatcher, PassyCustomEventReaderDetected);
+        if(passy->proto && strlen(passy->proto) > 0) {
+            view_dispatcher_send_custom_event(
+                passy->view_dispatcher, PassyCustomEventReaderDetected);
+        } else {
+            view_dispatcher_send_custom_event(
+                passy->view_dispatcher, PassyCustomEventReaderRestart);
+        }
     }
 }
 
@@ -61,6 +63,10 @@ bool passy_scene_read_on_event(void* context, SceneManagerEvent event) {
             passy->last_sw = passy_reader->last_sw;
             scene_manager_next_scene(passy->scene_manager, PassySceneReadError);
             consumed = true;
+        } else if(event.event == PassyCustomEventReaderRestart) {
+            nfc_scanner_stop(passy->scanner);
+            nfc_scanner_start(passy->scanner, passy_scene_detect_scan_callback, passy);
+            consumed = true;
         } else if(event.event == PassyCustomEventReaderDetected) {
             nfc_scanner_stop(passy->scanner);
             nfc_scanner_free(passy->scanner);