Просмотр исходного кода

track last status word and show on error

Eric Betts 9 месяцев назад
Родитель
Сommit
57bcc65f35
5 измененных файлов с 14 добавлено и 15 удалено
  1. 2 1
      passy_i.h
  2. 1 10
      passy_reader.c
  3. 1 0
      passy_reader.h
  4. 1 2
      scenes/passy_scene_read.c
  5. 9 2
      scenes/passy_scene_read_error.c

+ 2 - 1
passy_i.h

@@ -53,7 +53,6 @@ enum PassyCustomEvent {
     PassyCustomEventReaderDetected,
     PassyCustomEventReaderAuthenticated,
     PassyCustomEventReaderReading,
-    PassyCustomEventReaderNoDGXData,
 };
 
 struct Passy {
@@ -94,6 +93,8 @@ struct Passy {
 
     size_t offset;
     size_t bytes_total;
+
+    uint16_t last_sw;
 };
 
 typedef enum {

+ 1 - 10
passy_reader.c

@@ -104,6 +104,7 @@ NfcCommand passy_reader_send(PassyReader* passy_reader) {
         FURI_LOG_W(TAG, "Invalid response length %d", length);
         return NfcCommandStop;
     }
+    passy_reader->last_sw = (data[length - 2] << 8) | data[length - 1];
     if(memcmp(data + length - 2, SW_success, sizeof(SW_success)) != 0) {
         FURI_LOG_W(TAG, "Invalid SW %02x %02x", data[length - 2], data[length - 1]);
         return NfcCommandStop;
@@ -356,16 +357,6 @@ NfcCommand passy_reader_state_machine(PassyReader* passy_reader) {
             FURI_LOG_I(
                 TAG, "%s length: %d", passy->read_type == PassyReadDG2 ? "DG2" : "DG7", body_size);
 
-            if(body_size == 0) {
-                FURI_LOG_W(
-                    TAG,
-                    "This document does not contain data in %s.",
-                    passy->read_type == PassyReadDG2 ? "DG2" : "DG7");
-                view_dispatcher_send_custom_event(
-                    passy->view_dispatcher, PassyCustomEventReaderNoDGXData);
-                break;
-            }
-
             void* jpeg = memmem(header, sizeof(header), jpeg_header, sizeof(jpeg_header));
             void* jpeg2k = memmem(header, sizeof(header), jpeg2k_header, sizeof(jpeg2k_header));
             void* jpeg2k_cs =

+ 1 - 0
passy_reader.h

@@ -31,6 +31,7 @@ typedef struct {
 
     SecureMessaging* secure_messaging;
 
+    uint16_t last_sw;
 } PassyReader;
 
 PassyReader* passy_reader_alloc(Passy* passy);

+ 1 - 2
scenes/passy_scene_read.c

@@ -35,6 +35,7 @@ bool passy_scene_read_on_event(void* context, SceneManagerEvent event) {
             scene_manager_next_scene(passy->scene_manager, PassySceneReadSuccess);
             consumed = true;
         } else if(event.event == PassyCustomEventReaderError) {
+            passy->last_sw = passy_reader->last_sw;
             scene_manager_next_scene(passy->scene_manager, PassySceneReadError);
             consumed = true;
         } else if(event.event == PassyCustomEventReaderDetected) {
@@ -55,8 +56,6 @@ bool passy_scene_read_on_event(void* context, SceneManagerEvent event) {
                     (passy->bytes_total / 1024));
                 popup_set_header(popup, header, 68, 30, AlignLeft, AlignTop);
             }
-        } else if(event.event == PassyCustomEventReaderNoDGXData) {
-            popup_set_header(popup, "No Data", 68, 30, AlignLeft, AlignTop);
         }
     } else if(event.type == SceneManagerEventTypeBack) {
         scene_manager_search_and_switch_to_previous_scene(

+ 9 - 2
scenes/passy_scene_read_error.c

@@ -16,10 +16,17 @@ void passy_scene_read_error_on_enter(void* context) {
     Passy* passy = context;
     Widget* widget = passy->widget;
 
+    FuriString* primary_str = furi_string_alloc_set("Read Error");
+    FuriString* secondary_str = furi_string_alloc();
+
     // Send notification
     notification_message(passy->notifications, &sequence_error);
-    FuriString* primary_str = furi_string_alloc_set("Read Errror");
-    FuriString* secondary_str = furi_string_alloc_set("Try again?");
+
+    if(passy->last_sw == 0x6a82) {
+        furi_string_printf(secondary_str, "File not found\nTry again?");
+    } else {
+        furi_string_printf(secondary_str, "%04x\nTry again?", passy->last_sw);
+    }
 
     widget_add_button_element(
         widget, GuiButtonTypeLeft, "Retry", passy_scene_read_error_widget_callback, passy);