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

Fix UART deinit issues in multiple apps

Also thanks to Willy-JL for finding the issue and fixing part of the apps
MX 1 год назад
Родитель
Сommit
72464d037c
2 измененных файлов с 6 добавлено и 13 удалено
  1. 6 12
      uhf_uart.c
  2. 0 1
      uhf_uart.h

+ 6 - 12
uhf_uart.c

@@ -62,16 +62,10 @@ UHFUart* uhf_uart_alloc() {
     uart->bus = FuriHalBusUSART1;
     uart->handle = furi_hal_serial_control_acquire(FuriHalSerialIdUsart);
     // uart->rx_buff_stream = furi_stream_buffer_alloc(UHF_UART_RX_BUFFER_SIZE, 1);
-    uart->init_by_app = !furi_hal_bus_is_enabled(uart->bus);
     uart->tick = UHF_UART_WAIT_TICK;
     uart->baudrate = UHF_UART_DEFAULT_BAUDRATE;
-    // expansion_disable();
-    if(uart->init_by_app) {
-        FURI_LOG_E("UHF_UART", "UHF UART INIT BY APP");
-        furi_hal_serial_init(uart->handle, uart->baudrate);
-    } else {
-        FURI_LOG_E("UHF_UART", "UHF UART INIT BY HAL");
-    }
+    // expansion_disable -> is done at app start already
+    furi_hal_serial_init(uart->handle, uart->baudrate);
     uart->buffer = uhf_buffer_alloc(UHF_UART_RX_BUFFER_SIZE);
     // uart->thread = furi_thread_alloc_ex("UHFUartWorker", UHF_UART_WORKER_STACK_SIZE, uhf_uart_worker_callback, uart);
     // furi_thread_start(uart->thread);
@@ -86,11 +80,11 @@ void uhf_uart_free(UHFUart* uart) {
     // furi_thread_join(uart->thread);
     // furi_thread_free(uart->thread);
     // furi_stream_buffer_free(uart->rx_buff_stream);
-    uhf_buffer_free(uart->buffer);
-    if(uart->init_by_app) {
-        furi_hal_serial_deinit(uart->handle);
-    }
+    furi_hal_serial_async_rx_stop(uart->handle);
+    furi_hal_serial_deinit(uart->handle);
     furi_hal_serial_control_release(uart->handle);
+
+    uhf_buffer_free(uart->buffer);
     free(uart);
 }
 

+ 0 - 1
uhf_uart.h

@@ -27,7 +27,6 @@ typedef struct {
     CallbackFunction callback;
     Buffer* buffer;
     uint32_t baudrate;
-    bool init_by_app;
     void* ctx;
     volatile int tick;
 } UHFUart;