Kaynağa Gözat

merge fixes pt2

by Willy-JL
MX 2 yıl önce
ebeveyn
işleme
3c8d7b9674

+ 23 - 21
scenes/uart_terminal_scene_console_output.c

@@ -6,19 +6,19 @@ void uart_terminal_console_output_handle_rx_data_cb(uint8_t* buf, size_t len, vo
     FuriString* new_str = furi_string_alloc();
 
     if(app->hex_mode) {
-        while (len--) {
+        while(len--) {
             uint8_t byte = *(buf++);
             if(byte == '\0') break;
             furi_string_cat_printf(new_str, "%02X ", byte);
         }
-    }
-    else {
+    } else {
         buf[len] = '\0';
         furi_string_cat_printf(new_str, "%s", buf);
     }
 
     // If text box store gets too big, then truncate it
-    app->text_box_store_strlen += furi_string_size(new_str);;
+    app->text_box_store_strlen += furi_string_size(new_str);
+    ;
     while(app->text_box_store_strlen >= UART_TERMINAL_TEXT_BOX_STORE_SIZE - 1) {
         furi_string_right(app->text_box_store, app->text_box_store_strlen / 2);
         app->text_box_store_strlen = furi_string_size(app->text_box_store) + len;
@@ -33,13 +33,13 @@ void uart_terminal_console_output_handle_rx_data_cb(uint8_t* buf, size_t len, vo
 
 static uint8_t hex_char_to_byte(const char c) {
     if(c >= '0' && c <= '9') {
-        return c-'0';
+        return c - '0';
     }
     if(c >= 'A' && c <= 'F') {
-        return c-'A'+10;
+        return c - 'A' + 10;
     }
-    if (c >= 'a' && c <= 'f') {
-        return c-'a'+10;
+    if(c >= 'a' && c <= 'f') {
+        return c - 'a' + 10;
     }
     return 0;
 }
@@ -86,19 +86,17 @@ void uart_terminal_scene_console_output_on_enter(void* context) {
     uart_terminal_uart_set_handle_rx_data_cb(
         app->uart, uart_terminal_console_output_handle_rx_data_cb); // setup callback for rx thread
 
-    uint8_t uart_ch = app->uart_ch;
-
     if(app->hex_mode) {
         // Send binary packet
         if(app->selected_tx_string) {
-            const char *str = app->selected_tx_string;
+            const char* str = app->selected_tx_string;
             uint8_t digit_num = 0;
             uint8_t byte = 0;
-            while (*str) {
+            while(*str) {
                 byte |= (hex_char_to_byte(*str) << ((1 - digit_num) * 4));
 
                 if(++digit_num == 2) {
-                    uart_terminal_uart_tx(uart_ch, &byte, 1);
+                    uart_terminal_uart_tx(app->uart, &byte, 1);
                     digit_num = 0;
                     byte = 0;
                 }
@@ -106,20 +104,24 @@ void uart_terminal_scene_console_output_on_enter(void* context) {
             }
 
             if(digit_num) {
-                uart_terminal_uart_tx(uart_ch, &byte, 1);
+                uart_terminal_uart_tx(app->uart, &byte, 1);
             }
         }
     } else {
         // Send command with CR+LF or newline '\n'
         if(app->is_command && app->selected_tx_string) {
-            if(app->TERMINAL_MODE == 1){
-                uart_terminal_uart_tx(uart_ch, 
-                    (uint8_t*)(app->selected_tx_string), strlen(app->selected_tx_string));
-                uart_terminal_uart_tx(uart_ch, (uint8_t*)("\r\n"), 2);
+            if(app->TERMINAL_MODE == 1) {
+                uart_terminal_uart_tx(
+                    app->uart,
+                    (uint8_t*)(app->selected_tx_string),
+                    strlen(app->selected_tx_string));
+                uart_terminal_uart_tx(app->uart, (uint8_t*)("\r\n"), 2);
             } else {
-                uart_terminal_uart_tx(uart_ch, 
-                    (uint8_t*)(app->selected_tx_string), strlen(app->selected_tx_string));
-                uart_terminal_uart_tx(uart_ch, (uint8_t*)("\n"), 1);
+                uart_terminal_uart_tx(
+                    app->uart,
+                    (uint8_t*)(app->selected_tx_string),
+                    strlen(app->selected_tx_string));
+                uart_terminal_uart_tx(app->uart, (uint8_t*)("\n"), 1);
             }
         }
     }

+ 16 - 18
uart_terminal_uart.c

@@ -7,6 +7,7 @@ struct UART_TerminalUart {
     FuriStreamBuffer* rx_stream;
     uint8_t rx_buf[RX_BUF_SIZE + 1];
     void (*handle_rx_data_cb)(uint8_t* buf, size_t len, void* context);
+    FuriHalSerialHandle* serial_handle;
 };
 
 typedef enum {
@@ -23,10 +24,14 @@ void uart_terminal_uart_set_handle_rx_data_cb(
 
 #define WORKER_ALL_RX_EVENTS (WorkerEvtStop | WorkerEvtRxDone)
 
-void uart_terminal_uart_on_irq_cb(UartIrqEvent ev, uint8_t data, void* context) {
+void uart_terminal_uart_on_irq_cb(
+    FuriHalSerialHandle* handle,
+    FuriHalSerialRxEvent event,
+    void* context) {
     UART_TerminalUart* uart = (UART_TerminalUart*)context;
 
-    if(ev == UartIrqEventRXNE) {
+    if(event == FuriHalSerialRxEventData) {
+        uint8_t data = furi_hal_serial_async_rx(handle);
         furi_stream_buffer_send(uart->rx_stream, &data, 1, 0);
         furi_thread_flags_set(furi_thread_get_id(uart->rx_thread), WorkerEvtRxDone);
     }
@@ -53,8 +58,8 @@ static int32_t uart_worker(void* context) {
     return 0;
 }
 
-void uart_terminal_uart_tx(uint8_t uart_ch, uint8_t* data, size_t len) {
-    furi_hal_uart_tx(uart_ch, data, len);
+void uart_terminal_uart_tx(UART_TerminalUart* uart, uint8_t* data, size_t len) {
+    furi_hal_serial_tx(uart->serial_handle, data, len);
 }
 
 UART_TerminalUart* uart_terminal_uart_init(UART_TerminalApp* app) {
@@ -74,14 +79,11 @@ UART_TerminalUart* uart_terminal_uart_init(UART_TerminalApp* app) {
         app->BAUDRATE = 115200;
     }
 
-    if(app->uart_ch == FuriHalUartIdUSART1) {
-        furi_hal_console_disable();
-		furi_hal_uart_set_br(app->uart_ch, app->BAUDRATE);
-    } else if(app->uart_ch == FuriHalUartIdLPUART1) {
-        furi_hal_uart_init(app->uart_ch, app->BAUDRATE);
-    }
+    uart->serial_handle = furi_hal_serial_control_acquire(app->uart_ch);
+    furi_check(uart->serial_handle);
+    furi_hal_serial_init(uart->serial_handle, app->BAUDRATE);
 
-    furi_hal_uart_set_irq_cb(app->uart_ch, uart_terminal_uart_on_irq_cb, uart);
+    furi_hal_serial_async_rx_start(uart->serial_handle, uart_terminal_uart_on_irq_cb, uart, false);
 
     return uart;
 }
@@ -93,12 +95,8 @@ void uart_terminal_uart_free(UART_TerminalUart* uart) {
     furi_thread_join(uart->rx_thread);
     furi_thread_free(uart->rx_thread);
 
-    furi_hal_uart_set_irq_cb(uart->app->uart_ch, NULL, NULL);
-
-    if(uart->app->uart_ch == FuriHalUartIdUSART1)
-        furi_hal_console_enable();
-    else
-        furi_hal_uart_deinit(uart->app->uart_ch);
+    furi_hal_serial_deinit(uart->serial_handle);
+    furi_hal_serial_control_release(uart->serial_handle);
 
     free(uart);
-}
+}

+ 1 - 1
uart_terminal_uart.h

@@ -9,6 +9,6 @@ typedef struct UART_TerminalUart UART_TerminalUart;
 void uart_terminal_uart_set_handle_rx_data_cb(
     UART_TerminalUart* uart,
     void (*handle_rx_data_cb)(uint8_t* buf, size_t len, void* context));
-void uart_terminal_uart_tx(uint8_t uart_ch, uint8_t* data, size_t len);
+void uart_terminal_uart_tx(UART_TerminalUart* uart, uint8_t* data, size_t len);
 UART_TerminalUart* uart_terminal_uart_init(UART_TerminalApp* app);
 void uart_terminal_uart_free(UART_TerminalUart* uart);