@@ -10,25 +10,30 @@ typedef enum {
10
10
11
11
#define WORKER_ALL_RX_EVENTS (WorkerEvtStop | WorkerEvtRxDone)
12
12
13
- static void gps_uart_on_irq_cb (UartIrqEvent ev , uint8_t data , void * context ) {
13
+ static void gps_uart_on_irq_cb (FuriHalSerialHandle * handle , FuriHalSerialRxEvent ev , void * context ) {
14
14
GpsUart * gps_uart = (GpsUart * )context ;
15
-
16
- if (ev == UartIrqEventRXNE ) {
15
+
16
+ if (ev == FuriHalSerialRxEventData ) {
17
+ uint8_t data = furi_hal_serial_async_rx (handle );
17
18
furi_stream_buffer_send (gps_uart -> rx_stream , & data , 1 , 0 );
18
19
furi_thread_flags_set (furi_thread_get_id (gps_uart -> thread ), WorkerEvtRxDone );
19
20
}
20
21
}
21
22
22
23
static void gps_uart_serial_init (GpsUart * gps_uart ) {
23
- furi_hal_console_disable ();
24
- furi_hal_uart_set_irq_cb (FuriHalUartIdUSART1 , gps_uart_on_irq_cb , gps_uart );
25
- furi_hal_uart_set_br (FuriHalUartIdUSART1 , gps_uart -> baudrate );
24
+ furi_assert (!gps_uart -> serial_handle );
25
+
26
+ gps_uart -> serial_handle = furi_hal_serial_control_acquire (UART_CH );
27
+ furi_assert (gps_uart -> serial_handle );
28
+ furi_hal_serial_init (gps_uart -> serial_handle , gps_uart -> baudrate );
29
+ furi_hal_serial_async_rx_start (gps_uart -> serial_handle , gps_uart_on_irq_cb , gps_uart , false);
26
30
}
27
31
28
32
static void gps_uart_serial_deinit (GpsUart * gps_uart ) {
29
- UNUSED (gps_uart );
30
- furi_hal_uart_set_irq_cb (FuriHalUartIdUSART1 , NULL , NULL );
31
- furi_hal_console_enable ();
33
+ furi_assert (gps_uart -> serial_handle );
34
+ furi_hal_serial_deinit (gps_uart -> serial_handle );
35
+ furi_hal_serial_control_release (gps_uart -> serial_handle );
36
+ gps_uart -> serial_handle = NULL ;
32
37
}
33
38
34
39
static void gps_uart_parse_nmea (GpsUart * gps_uart , char * line ) {
@@ -103,11 +108,7 @@ static int32_t gps_uart_worker(void* context) {
103
108
do {
104
109
// receive serial bytes into rx_buf, starting at rx_offset from the start of the buffer
105
110
// the maximum we can receive is RX_BUF_SIZE - 1 - rx_offset
106
- len = furi_stream_buffer_receive (
107
- gps_uart -> rx_stream ,
108
- gps_uart -> rx_buf + rx_offset ,
109
- RX_BUF_SIZE - 1 - rx_offset ,
110
- 0 );
111
+ len = furi_stream_buffer_receive (gps_uart -> rx_stream , gps_uart -> rx_buf + rx_offset , RX_BUF_SIZE - 1 - rx_offset , 0 );
111
112
if (len > 0 ) {
112
113
// increase rx_offset by the number of bytes received, and null-terminate rx_buf
113
114
rx_offset += len ;
0 commit comments