Browse Source

Merge pull request #1 from EstebanFuentealba/main

Add DG7 File (Signature)
Eric Betts 9 months ago
parent
commit
780b0a2aa1
5 changed files with 20 additions and 20 deletions
  1. 1 0
      passy_i.h
  2. 15 19
      passy_reader.c
  3. 2 0
      scenes/passy_scene_read.c
  4. 1 0
      scenes/passy_scene_read_error.c
  5. 1 1
      scenes/passy_scene_read_success.c

+ 1 - 0
passy_i.h

@@ -53,6 +53,7 @@ enum PassyCustomEvent {
     PassyCustomEventReaderDetected,
     PassyCustomEventReaderAuthenticated,
     PassyCustomEventReaderReading,
+    PassyCustomEventReaderNoDGXData,
 };
 
 struct Passy {

+ 15 - 19
passy_reader.c

@@ -410,7 +410,7 @@ NfcCommand passy_reader_state_machine(Passy* passy, PassyReader* passy_reader) {
                 body_offset += Le;
             } while(body_offset < body_size);
             passy_log_bitbuffer(TAG, "DG1", passy_reader->DG1);
-        } else if(passy->read_type == PassyReadDG2) {
+        }  else if(passy->read_type == PassyReadDG2 || passy->read_type == PassyReadDG7) {
             uint8_t header[100];
             ret = passy_reader_read_binary(passy_reader, 0x00, sizeof(header), header);
             if(ret != NfcCommandContinue) {
@@ -422,7 +422,15 @@ NfcCommand passy_reader_state_machine(Passy* passy, PassyReader* passy_reader) {
                 passy->view_dispatcher, PassyCustomEventReaderReading);
 
             size_t body_size = 1 + asn1_length_length(header + 1) + asn1_length(header + 1);
-            FURI_LOG_I(TAG, "DG2 length: %d", body_size);
+            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));
@@ -431,18 +439,19 @@ NfcCommand passy_reader_state_machine(Passy* passy, PassyReader* passy_reader) {
 
             FuriString* path = furi_string_alloc();
             uint8_t start = 0;
+            const char* dg_type = passy->read_type == PassyReadDG2 ? "DG2" : "DG7";
 
             if(jpeg) {
-                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, "DG2", ".jpeg");
+                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, dg_type, ".jpeg");
                 start = (uint8_t*)jpeg - header;
             } else if(jpeg2k) {
-                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, "DG2", ".jp2");
+                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, dg_type, ".jp2");
                 start = (uint8_t*)jpeg2k - header;
             } else if(jpeg2k_cs) {
-                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, "DG2", ".jpc");
+                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, dg_type, ".jpc");
                 start = (uint8_t*)jpeg2k_cs - header;
             } else {
-                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, "DG2", ".bin");
+                furi_string_printf(path, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, dg_type, ".bin");
                 start = 0;
                 passy_log_buffer(TAG, "header", header, sizeof(header));
             }
@@ -475,19 +484,6 @@ NfcCommand passy_reader_state_machine(Passy* passy, PassyReader* passy_reader) {
             file_stream_close(stream);
             furi_record_close(RECORD_STORAGE);
             furi_string_free(path);
-        } else if(passy->read_type == PassyReadDG7) {
-            uint8_t header[100];
-            ret = passy_reader_read_binary(passy_reader, 0x00, sizeof(header), header);
-            if(ret != NfcCommandContinue) {
-                view_dispatcher_send_custom_event(
-                    passy->view_dispatcher, PassyCustomEventReaderError);
-                break;
-            }
-            view_dispatcher_send_custom_event(
-                passy->view_dispatcher, PassyCustomEventReaderReading);
-
-            size_t body_size = asn1_length(header + 1);
-            FURI_LOG_I(TAG, "DG7 length: %d", body_size);
         }
 
         // Everything done

+ 2 - 0
scenes/passy_scene_read.c

@@ -52,6 +52,8 @@ 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(

+ 1 - 0
scenes/passy_scene_read_error.c

@@ -21,6 +21,7 @@ void passy_scene_read_error_on_enter(void* context) {
     FuriString* primary_str = furi_string_alloc_set("Read Errror");
     FuriString* secondary_str = furi_string_alloc_set("Try again?");
 
+
     widget_add_button_element(
         widget, GuiButtonTypeLeft, "Retry", passy_scene_read_error_widget_callback, passy);
 

+ 1 - 1
scenes/passy_scene_read_success.c

@@ -122,7 +122,7 @@ void passy_scene_read_success_on_enter(void* context) {
         free(dg1);
         dg1 = 0;
 
-    } else if(passy->read_type == PassyReadDG2) {
+    } else if(passy->read_type == PassyReadDG2 || passy->read_type == PassyReadDG7) {
         furi_string_cat_printf(str, "Saved to disk in apps_data/passy/\n");
     }
     text_box_set_font(passy->text_box, TextBoxFontText);