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

refractoring done, working or viewing data

frux-c 2 лет назад
Родитель
Сommit
9643e2ec70
5 измененных файлов с 58 добавлено и 76 удалено
  1. 10 32
      scenes/uhf_scene_read_tag_success.c
  2. 8 12
      uhf_app.c
  3. 6 6
      uhf_data.c
  4. 0 3
      uhf_device.c
  5. 34 23
      uhf_worker.c

+ 10 - 32
scenes/uhf_scene_read_tag_success.c

@@ -16,9 +16,7 @@ void uhf_scene_read_card_success_widget_callback(GuiButtonType result, InputType
 
 void uhf_scene_read_tag_success_on_enter(void* ctx) {
     UHFApp* uhf_app = ctx;
-    FURI_LOG_E("TAG", "working till here 6");
     UHFTag* uhf_tag = uhf_app->worker->uhf_tag;
-    FURI_LOG_E("TAG", "working till here 7");
     widget_add_string_element(
         uhf_app->widget, 32, 5, AlignLeft, AlignCenter, FontPrimary, "Read Success");
 
@@ -30,35 +28,13 @@ void uhf_scene_read_tag_success_on_enter(void* ctx) {
     widget_add_string_element(
         uhf_app->widget, 3, 32, AlignLeft, AlignCenter, FontPrimary, "EPC :");
 
-    FURI_LOG_E("TAG", "crc %02x %02x", uhf_tag->crc[0], uhf_tag->crc[1]);
-
-    // widget_add_string_element(
-    //     uhf_app->widget,
-    //     26,
-    //     19,
-    //     AlignLeft,
-    //     AlignCenter,
-    //     FontKeyboard,
-    //     convertToHexString((uint8_t*)&uhf_tag->pc, 2));
-    // FURI_LOG_E("TAG", "working till here 8");
-    // widget_add_string_element(
-    //     uhf_app->widget,
-    //     96,
-    //     19,
-    //     AlignLeft,
-    //     AlignCenter,
-    //     FontKeyboard,
-    //     convertToHexString((uint8_t*)&uhf_tag->crc, 2));
-    // FURI_LOG_E("TAG", "working till here 9");
-    // widget_add_string_multiline_element(
-    //     uhf_app->widget,
-    //     34,
-    //     29,
-    //     AlignLeft,
-    //     AlignTop,
-    //     FontKeyboard,
-    //     convertToHexString((uint8_t*)&uhf_tag->epc, uhf_tag->epc_length));
-    // FURI_LOG_E("TAG", "working till here 10");
+    char* pc = convertToHexString(uhf_tag->pc, 2);
+    widget_add_string_element(uhf_app->widget, 26, 19, AlignLeft, AlignCenter, FontKeyboard, pc);
+    char* crc = convertToHexString(uhf_tag->crc, 2);
+    widget_add_string_element(uhf_app->widget, 96, 19, AlignLeft, AlignCenter, FontKeyboard, crc);
+    char* epc = convertToHexString(uhf_tag->epc + 2, uhf_tag->epc_length - 2);
+    widget_add_string_multiline_element(
+        uhf_app->widget, 34, 29, AlignLeft, AlignTop, FontKeyboard, epc);
     widget_add_button_element(
         uhf_app->widget,
         GuiButtonTypeRight,
@@ -71,8 +47,10 @@ void uhf_scene_read_tag_success_on_enter(void* ctx) {
         "Exit",
         uhf_scene_read_card_success_widget_callback,
         uhf_app);
-
     view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewWidget);
+    free(pc);
+    free(crc);
+    free(epc);
 }
 
 bool uhf_scene_read_tag_success_on_event(void* ctx, SceneManagerEvent event) {

+ 8 - 12
uhf_app.c

@@ -11,23 +11,19 @@ char* convertToHexString(const uint8_t* array, size_t length) {
     if(array == NULL || length == 0) {
         return NULL;
     }
+    FuriString* temp_str = furi_string_alloc();
 
-    // Each byte takes 3 characters in the hex representation (2 characters + space), plus 1 for the null terminator
-    size_t hexLength = (length * 3) + 1;
-
-    char* hexArray = (char*)malloc(hexLength * sizeof(char));
-    if(hexArray == NULL) {
-        return NULL;
-    }
-
-    size_t index = 0;
     for(size_t i = 0; i < length; i++) {
-        index += snprintf(&hexArray[index], hexLength - index, "%02x ", array[i]);
+        furi_string_cat_printf(temp_str, "%02X ", array[i]);
     }
+    const char* furi_str = furi_string_get_cstr(temp_str);
 
-    hexArray[hexLength - 1] = '\0';
+    size_t str_len = strlen(furi_str);
+    char* str = (char*)malloc(sizeof(char) * str_len);
 
-    return hexArray;
+    memcpy(str, furi_str, str_len);
+    furi_string_free(temp_str);
+    return str;
 }
 
 bool uhf_custom_event_callback(void* ctx, uint32_t event) {

+ 6 - 6
uhf_data.c

@@ -110,20 +110,20 @@ UHFTag* uhf_tag_alloc() {
 }
 
 void uhf_tag_set_epc(UHFTag* uhf_tag, uint8_t* data, size_t length) {
-    memcpy(&uhf_tag->crc, &data, 2);
+    memcpy(uhf_tag->crc, data, 2);
     data += 2;
-    memcpy(&uhf_tag->pc, data, 2);
-    data += 2;
-    memcpy(&uhf_tag->epc, &data, length);
+    memcpy(uhf_tag->pc, data, 2);
+    memcpy(uhf_tag->epc, data, length);
+    uhf_tag->epc_length = length;
 }
 
 void uhf_tag_set_tid(UHFTag* uhf_tag, uint8_t* data, size_t length) {
-    memcpy(&uhf_tag->tid, &data, length);
+    memcpy(uhf_tag->tid, data, length);
     uhf_tag->tid_length = length;
 }
 
 void uhf_tag_set_user(UHFTag* uhf_tag, uint8_t* data, size_t length) {
-    memcpy(&uhf_tag->user, &data, length);
+    memcpy(uhf_tag->user, data, length);
     uhf_tag->user_length = length;
 }
 

+ 0 - 3
uhf_device.c

@@ -38,9 +38,6 @@ static bool uhf_device_save_file(
     FlipperFormat* file = flipper_format_file_alloc(dev->storage);
     FuriString* temp_str;
     temp_str = furi_string_alloc();
-    FURI_LOG_E("TAG", "epc_len = %d", uhf_tag->epc_length);
-    FURI_LOG_E("TAG", "tid_len = %d", uhf_tag->tid_length);
-    FURI_LOG_E("TAG", "user_len = %d", uhf_tag->user_length);
     do {
         if(use_load_path && !furi_string_empty(dev->load_path)) {
             // Get directory name

+ 34 - 23
uhf_worker.c

@@ -1,14 +1,13 @@
 #include "uhf_worker.h"
 #include "uhf_cmd.h"
 
-#define CB_DELAY 75
+#define CB_DELAY 50
 
 // uart callback functions
 void module_rx_callback(UartIrqEvent event, uint8_t data, void* ctx) {
     UNUSED(event);
     UHFData* uhf_data = ctx;
     uhf_data_append(uhf_data, data);
-    // FURI_LOG_E("module_rx_callback", "%02x", data);
 }
 
 // yrm100 module commands
@@ -69,7 +68,6 @@ static bool send_set_select_command(UHFData* selected_tag, UHFBank bank) {
     // set mask starting position
     select_cmd->length = 12;
     // set mask
-    // FURI_LOG_E("TAG", "Mask length (bits=%d, bytes=%d)", mask_length_bits, mask_length_bytes);
     for(size_t i = 0; i < mask_length_bytes; i++) {
         uhf_data_append(select_cmd, selected_tag->data[8 + i]);
     }
@@ -117,11 +115,6 @@ UHFWorkerEvent read_single_card(UHFWorker* uhf_worker) {
             return UHFWorkerEventAborted;
         }
         if(raw_read_data->end) {
-            for(size_t i = 0; i < raw_read_data->length; i++) {
-                furi_string_cat_printf(temp_str, "%02x ", raw_read_data->data[i]);
-            }
-            FURI_LOG_E("TAG", furi_string_get_cstr(temp_str));
-            furi_string_reset(temp_str);
             if(raw_read_data->data[1] == 0x01 && raw_read_data->data[5] == 0x15) {
                 uhf_data_reset(raw_read_data);
                 continue;
@@ -135,7 +128,7 @@ UHFWorkerEvent read_single_card(UHFWorker* uhf_worker) {
     // add to tag object
     UHFData* raw_bank_data = uhf_data_alloc();
     size_t epc_length = (size_t)get_epc_length_in_bits(raw_read_data->data[6]) / 8;
-    size_t offset = (size_t)(6 + epc_length);
+    size_t offset = (size_t)(8 + epc_length);
 
     UHFData* read_bank_cmd = uhf_data_alloc();
     read_bank_cmd->length = CMD_READ_LABEL_DATA_STORAGE.length;
@@ -146,23 +139,41 @@ UHFWorkerEvent read_single_card(UHFWorker* uhf_worker) {
 
     send_set_select_command(raw_read_data, EPC_BANK);
 
+    int retry = 3;
     do {
-        if(!read_bank(read_bank_cmd, raw_bank_data, EPC_BANK)) break;
-        uhf_tag_set_epc(uhf_tag, raw_bank_data->data + offset, epc_length);
-        uhf_data_reset(raw_bank_data);
-    } while(0);
-
-    do {
-        if(!read_bank(read_bank_cmd, raw_bank_data, TID_BANK)) break;
-        uhf_tag_set_tid(uhf_tag, raw_bank_data->data + offset, 12);
-        uhf_data_reset(raw_bank_data);
-    } while(0);
+        if(read_bank(read_bank_cmd, raw_bank_data, EPC_BANK)) {
+            uhf_tag_set_epc(uhf_tag, raw_bank_data->data + offset, epc_length + 2);
+            break;
+        }
 
+    } while(retry--);
+    furi_string_reset(temp_str);
+    for(size_t i = 0; i < raw_bank_data->length; i++) {
+        furi_string_cat_printf(temp_str, "%02x ", raw_bank_data->data[i]);
+    }
+    uhf_data_reset(raw_bank_data);
+    retry = 3;
     do {
-        if(!read_bank(read_bank_cmd, raw_bank_data, USER_BANK)) break;
-        uhf_tag_set_tid(uhf_tag, raw_bank_data->data + offset, 12);
-        uhf_data_reset(raw_bank_data);
-    } while(0);
+        if(read_bank(read_bank_cmd, raw_bank_data, TID_BANK)) {
+            uhf_tag_set_tid(uhf_tag, raw_bank_data->data + offset, 16);
+            break;
+        }
+    } while(retry--);
+    furi_string_reset(temp_str);
+    for(size_t i = 0; i < raw_bank_data->length; i++) {
+        furi_string_cat_printf(temp_str, "%02x ", raw_bank_data->data[i]);
+    }
+    uhf_data_reset(raw_bank_data);
+    retry = 3;
+    if(raw_read_data->data[6] & 0x04) {
+        do {
+            if(read_bank(read_bank_cmd, raw_bank_data, USER_BANK)) {
+                uhf_tag_set_user(uhf_tag, raw_bank_data->data + offset, 16);
+                break;
+            }
+        } while(retry--);
+    }
+    uhf_data_reset(raw_bank_data);
 
     uhf_data_free(raw_bank_data);
     uhf_data_free(read_bank_cmd);