|
@@ -410,7 +410,7 @@ NfcCommand passy_reader_state_machine(Passy* passy, PassyReader* passy_reader) {
|
|
|
body_offset += Le;
|
|
body_offset += Le;
|
|
|
} while(body_offset < body_size);
|
|
} while(body_offset < body_size);
|
|
|
passy_log_bitbuffer(TAG, "DG1", passy_reader->DG1);
|
|
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];
|
|
uint8_t header[100];
|
|
|
ret = passy_reader_read_binary(passy_reader, 0x00, sizeof(header), header);
|
|
ret = passy_reader_read_binary(passy_reader, 0x00, sizeof(header), header);
|
|
|
if(ret != NfcCommandContinue) {
|
|
if(ret != NfcCommandContinue) {
|
|
@@ -422,7 +422,15 @@ NfcCommand passy_reader_state_machine(Passy* passy, PassyReader* passy_reader) {
|
|
|
passy->view_dispatcher, PassyCustomEventReaderReading);
|
|
passy->view_dispatcher, PassyCustomEventReaderReading);
|
|
|
|
|
|
|
|
size_t body_size = 1 + asn1_length_length(header + 1) + asn1_length(header + 1);
|
|
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* jpeg = memmem(header, sizeof(header), jpeg_header, sizeof(jpeg_header));
|
|
|
void* jpeg2k = memmem(header, sizeof(header), jpeg2k_header, sizeof(jpeg2k_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();
|
|
FuriString* path = furi_string_alloc();
|
|
|
uint8_t start = 0;
|
|
uint8_t start = 0;
|
|
|
|
|
+ const char* dg_type = passy->read_type == PassyReadDG2 ? "DG2" : "DG7";
|
|
|
|
|
|
|
|
if(jpeg) {
|
|
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;
|
|
start = (uint8_t*)jpeg - header;
|
|
|
} else if(jpeg2k) {
|
|
} 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;
|
|
start = (uint8_t*)jpeg2k - header;
|
|
|
} else if(jpeg2k_cs) {
|
|
} 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;
|
|
start = (uint8_t*)jpeg2k_cs - header;
|
|
|
} else {
|
|
} 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;
|
|
start = 0;
|
|
|
passy_log_buffer(TAG, "header", header, sizeof(header));
|
|
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);
|
|
file_stream_close(stream);
|
|
|
furi_record_close(RECORD_STORAGE);
|
|
furi_record_close(RECORD_STORAGE);
|
|
|
furi_string_free(path);
|
|
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
|
|
// Everything done
|