1
1
#include <string.h>
2
2
3
- #include < minmea.h>
3
+ #include " minmea.h"
4
4
#include "gps_uart.h"
5
5
6
6
typedef enum {
@@ -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 ) {
14
- GpsUart * gps_uart = (GpsUart * )context ;
15
-
16
- if (ev == UartIrqEventRXNE ) {
13
+ static void gps_uart_on_irq_cb (FuriHalSerialHandle * handle , FuriHalSerialRxEvent ev , void * context ) {
14
+ GpsUart * gps_uart = (GpsUart * )context ;
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
- 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 );
23
+ void gps_uart_serial_init (GpsUart * gps_uart ) {
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 ;
@@ -204,7 +205,7 @@ GpsUart* gps_uart_enable() {
204
205
gps_uart -> baudrate = gps_baudrates [current_gps_baudrate ];
205
206
gps_uart -> changing_baudrate = false;
206
207
gps_uart -> backlight_on = false;
207
- gps_uart -> speed_units = KNOTS ;
208
+ gps_uart -> speed_units = KPH ;
208
209
209
210
gps_uart_init_thread (gps_uart );
210
211
0 commit comments