Kaynağa Gözat

currently stableizied verify entry scene

frux-c 2 yıl önce
ebeveyn
işleme
0f3ee84ce6
5 değiştirilmiş dosya ile 103 ekleme ve 47 silme
  1. 0 8
      scenes/uhf_scene_card_menu.c
  2. 80 27
      scenes/uhf_scene_verify.c
  3. 11 0
      uhf_app.c
  4. 1 1
      uhf_data.c
  5. 11 11
      uhf_worker.c

+ 0 - 8
scenes/uhf_scene_card_menu.c

@@ -17,14 +17,6 @@ void uhf_scene_card_menu_on_enter(void* context) {
 
     submenu_add_item(
         submenu, "Save", SubmenuIndexSave, uhf_scene_card_menu_submenu_callback, uhf_app);
-    // if(picopass->dev->dev_data.pacs.record.valid) {
-    //     submenu_add_item(
-    //         submenu,
-    //         "Save as LF",
-    //         SubmenuIndexSaveAsLF,
-    //         picopass_scene_card_menu_submenu_callback,
-    //         picopass);
-    // }
     submenu_add_item(
         submenu,
         "Change Key",

+ 80 - 27
scenes/uhf_scene_verify.c

@@ -1,17 +1,13 @@
 #include "../uhf_app_i.h"
 
 bool verify_success = false;
+FuriString* temp_str;
 
 void uhf_scene_verify_callback_event(UHFWorkerEvent event, void* ctx) {
     UNUSED(ctx);
     UHFApp* uhf_app = ctx;
-    if(event == UHFWorkerEventSuccess) {
-        verify_success = true;
-        // FURI_LOG_E("verify", "UHFWorkerEventSuccess");
-        // FURI_LOG_E("verify", "%d", verify_success);
-    } else {
-        // FURI_LOG_E("verify", "UHFWorkerEventFail");
-    }
+    if(event == UHFWorkerEventSuccess) verify_success = true;
+
     view_dispatcher_send_custom_event(uhf_app->view_dispatcher, UHFCustomEventVerifyDone);
 }
 
@@ -28,6 +24,8 @@ void uhf_scene_verify_on_enter(void* ctx) {
     UHFApp* uhf_app = ctx;
     uhf_worker_start(
         uhf_app->worker, UHFWorkerStateVerify, uhf_scene_verify_callback_event, uhf_app);
+    temp_str = furi_string_alloc();
+    view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewWidget);
 }
 
 bool uhf_scene_verify_on_event(void* ctx, SceneManagerEvent event) {
@@ -39,35 +37,76 @@ bool uhf_scene_verify_on_event(void* ctx, SceneManagerEvent event) {
         if(event.event == GuiButtonTypeRight) {
             scene_manager_next_scene(uhf_app->scene_manager, UHFSceneStart);
             consumed = true;
+        } else if(event.event == GuiButtonTypeLeft) {
+            if(!verify_success) {
+                widget_reset(uhf_app->widget);
+                furi_string_reset(temp_str);
+                uhf_worker_stop(uhf_app->worker);
+                uhf_worker_start(
+                    uhf_app->worker,
+                    UHFWorkerStateVerify,
+                    uhf_scene_verify_callback_event,
+                    uhf_app);
+            }
         } else if(event.event == UHFCustomEventVerifyDone) {
             if(verify_success) {
-                // FuriString* temp_str = furi_string_alloc();
-                // UHFResponseData* response_data = uhf_app->worker->data;
-                // UHFData* software_version = uhf_response_data_get_uhf_data(response_data, 0);
-
+                widget_reset(uhf_app->widget);
+                furi_string_reset(temp_str);
+                UHFResponseData* response_data = uhf_app->worker->data;
+                UHFData* hardware_version = uhf_response_data_get_uhf_data(response_data, 0);
+                UHFData* software_version = uhf_response_data_get_uhf_data(response_data, 1);
+                UHFData* manufacturer = uhf_response_data_get_uhf_data(response_data, 2);
+                uint offset = 6;
                 widget_add_string_element(
                     uhf_app->widget, 64, 5, AlignCenter, AlignCenter, FontPrimary, "Module Info");
-                // furi_string_cat_str(temp_str, "Software Version: ");
-                // for(int i = 0; i < 10; i++) {
-                //     furi_string_cat_printf(temp_str, "%c ", software_version->data[6 + i]);
-                // }
-                // widget_add_string_element(
-                //     uhf_app->widget,
-                //     3,
-                //     10,
-                //     AlignLeft,
-                //     AlignBottom,
-                //     FontSecondary,
-                //     furi_string_get_cstr(temp_str));
+                // hardware info
+                furi_string_cat_str(temp_str, "HW Version: ");
+                for(int i = 0; i < 10; i++) {
+                    furi_string_cat_printf(temp_str, "%c", hardware_version->data[offset + i]);
+                }
                 widget_add_string_element(
-                    uhf_app->widget, 64, 5, AlignCenter, AlignCenter, FontPrimary, "Module Info");
+                    uhf_app->widget,
+                    1,
+                    15,
+                    AlignLeft,
+                    AlignCenter,
+                    FontSecondary,
+                    furi_string_get_cstr(temp_str));
+                furi_string_reset(temp_str);
+                // software info
+                furi_string_cat_str(temp_str, "SW Version: ");
+                for(int i = 0; i < 10; i++) {
+                    furi_string_cat_printf(temp_str, "%c", software_version->data[offset + i]);
+                }
+                widget_add_string_element(
+                    uhf_app->widget,
+                    1,
+                    27,
+                    AlignLeft,
+                    AlignCenter,
+                    FontSecondary,
+                    furi_string_get_cstr(temp_str));
+                furi_string_reset(temp_str);
+                // manufacturer info
+                furi_string_cat_str(temp_str, "Manufacturer: ");
+                for(int i = 0; i < 10; i++) {
+                    furi_string_cat_printf(temp_str, "%c", manufacturer->data[offset + i]);
+                }
+                widget_add_string_element(
+                    uhf_app->widget,
+                    1,
+                    39,
+                    AlignLeft,
+                    AlignCenter,
+                    FontSecondary,
+                    furi_string_get_cstr(temp_str));
+
                 widget_add_button_element(
                     uhf_app->widget,
                     GuiButtonTypeRight,
                     "Continue",
                     uhf_scene_verify_widget_callback,
                     uhf_app);
-                // furi_string_free(temp_str);
             } else {
                 widget_add_string_element(
                     uhf_app->widget,
@@ -77,6 +116,18 @@ bool uhf_scene_verify_on_event(void* ctx, SceneManagerEvent event) {
                     AlignCenter,
                     FontPrimary,
                     "No UHF Module found");
+                widget_add_button_element(
+                    uhf_app->widget,
+                    GuiButtonTypeLeft,
+                    "Retry",
+                    uhf_scene_verify_widget_callback,
+                    uhf_app);
+                widget_add_button_element(
+                    uhf_app->widget,
+                    GuiButtonTypeRight,
+                    "Skip",
+                    uhf_scene_verify_widget_callback,
+                    uhf_app);
             }
         }
     }
@@ -85,9 +136,11 @@ bool uhf_scene_verify_on_event(void* ctx, SceneManagerEvent event) {
 
 void uhf_scene_verify_on_exit(void* ctx) {
     UHFApp* uhf_app = ctx;
-    // // Stop worker
+    // Clear string
+    furi_string_free(temp_str);
+    // Stop worker
     uhf_worker_stop(uhf_app->worker);
-    // // Clear view
+    // Clear view
     // popup_reset(uhf_app->popup);
     // clear widget
     widget_reset(uhf_app->widget);

+ 11 - 0
uhf_app.c

@@ -3,6 +3,13 @@
 static const char* uhf_file_header = "Flipper UHF device";
 static const uint32_t uhf_file_version = 1;
 
+// empty callback
+void empty_rx_callback(UartIrqEvent event, uint8_t data, void* ctx) {
+    UNUSED(event);
+    UNUSED(data);
+    UNUSED(ctx);
+}
+
 char* convertToHexString(const uint8_t* array, size_t length) {
     if(array == NULL || length == 0) {
         return NULL;
@@ -217,6 +224,10 @@ int32_t uhf_app_main(void* ctx) {
     // disable 5v pin
     furi_hal_power_disable_otg();
 
+    // set uart callback to none
+    furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, empty_rx_callback, NULL);
+
+    // exit app
     uhf_free(uhf_app);
     return 0;
 }

+ 1 - 1
uhf_data.c

@@ -47,7 +47,7 @@ void uhf_data_free(UHFData* uhf_data) {
 UHFResponseData* uhf_response_data_alloc() {
     UHFResponseData* uhf_response_data = (UHFResponseData*)malloc(sizeof(UHFResponseData));
     uhf_response_data->data = uhf_data_alloc();
-    uhf_response_data->size = 0;
+    uhf_response_data->size = 1;
     return uhf_response_data;
 }
 

+ 11 - 11
uhf_worker.c

@@ -14,21 +14,21 @@ UHFWorkerEvent verify_module_connected(UHFWorker* uhf_worker) {
     UHFResponseData* uhf_response_data = uhf_worker->data;
     UHFData* hardware_version = uhf_response_data->data;
     uhf_data_reset(hardware_version);
-    // UHFData* software_version = uhf_response_data_add_new_uhf_data(uhf_response_data);
-    // UHFData* manufacturer = uhf_response_data_add_new_uhf_data(uhf_response_data);
+    UHFData* software_version = uhf_response_data_add_new_uhf_data(uhf_response_data);
+    UHFData* manufacturer = uhf_response_data_add_new_uhf_data(uhf_response_data);
     furi_hal_uart_set_br(FuriHalUartIdUSART1, DEFAULT_BAUD_RATE);
     // read hardware version
     furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, module_rx_callback, hardware_version);
     furi_hal_uart_tx(FuriHalUartIdUSART1, CMD_HARDWARE_VERSION.cmd, CMD_HARDWARE_VERSION.length);
-    furi_delay_ms(200);
-    // // read software version
-    // furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, module_rx_callback, software_version);
-    // furi_hal_uart_tx(FuriHalUartIdUSART1, CMD_SOFTWARE_VERSION.cmd, CMD_SOFTWARE_VERSION.length);
-    // furi_delay_ms(200);
-    // // read manufacturer
-    // furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, module_rx_callback, manufacturer);
-    // furi_hal_uart_tx(FuriHalUartIdUSART1, CMD_MANUFACTURERS.cmd, CMD_MANUFACTURERS.length);
-    // furi_delay_ms(200);
+    furi_delay_ms(150);
+    // read software version
+    furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, module_rx_callback, software_version);
+    furi_hal_uart_tx(FuriHalUartIdUSART1, CMD_SOFTWARE_VERSION.cmd, CMD_SOFTWARE_VERSION.length);
+    furi_delay_ms(150);
+    // read manufacturer
+    furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, module_rx_callback, manufacturer);
+    furi_hal_uart_tx(FuriHalUartIdUSART1, CMD_MANUFACTURERS.cmd, CMD_MANUFACTURERS.length);
+    furi_delay_ms(150);
 
     if(!hardware_version->end) { //|| !software_version->end || !manufacturer->end) {
         return UHFWorkerEventFail;