1
1
#include "uhf_uart.h"
2
2
3
+ // int32_t uhf_uart_worker_callback(void *ctx){
4
+ // UHFUart* uart = (UHFUart*)ctx;
5
+ // Buffer* buffer = (Buffer*)uart->buffer;
6
+ // uint32_t events;
7
+ // size_t length_read = 0;
8
+ // uint8_t read_buffer[1];
9
+ // FURI_LOG_E("UHF_UART_WORKER", "UHF UART WORKER STARTED");
10
+ // do{
11
+ // events = furi_thread_flags_wait(
12
+ // UHFUartWorkerWaitingDataFlag | UHFUartWorkerExitingFlag, FuriFlagWaitAny, FuriWaitForever
13
+ // );
14
+ // FURI_LOG_E("UHF_UART_WORKER", "events = %lu", events);
15
+ // if(events & UHFUartWorkerWaitingDataFlag){
16
+ // FURI_LOG_E("UHF_UART_WORKER", "Waiting data...");
17
+ // length_read = furi_stream_buffer_receive(uart->rx_buff_stream, read_buffer, 1, 0);
18
+ // if(length_read){
19
+ // do{
20
+ // length_read = furi_stream_buffer_receive(uart->rx_buff_stream, read_buffer, 1, 0);
21
+ // uhf_buffer_append_single(buffer, read_buffer[0]);
22
+ // uhf_uart_tick_reset(uart);
23
+ // }while(read_buffer[0] != UHF_UART_FRAME_END && length_read > 0);
24
+ // FURI_LOG_E("UHF_UART_WORKER", "UHF Total length read = %u", uhf_buffer_get_size(buffer));
25
+ // uhf_buffer_close(buffer);
26
+ // furi_stream_buffer_reset(uart->rx_buff_stream);
27
+ // }
28
+ // }
29
+ // }while((events & UHFUartWorkerExitingFlag) != UHFUartWorkerExitingFlag);
30
+ // return 0;
31
+ // }
3
32
4
- int32_t uhf_uart_worker_callback (void * ctx ){
5
- UHFUart * uart = (UHFUart * )ctx ;
6
- Buffer * buffer = (Buffer * )uart -> buffer ;
7
- uint32_t events ;
8
- size_t length_read = 0 ;
9
- uint8_t read_buffer [1 ];
10
- FURI_LOG_E ("UHF_UART_WORKER" , "UHF UART WORKER STARTED" );
11
- do {
12
- events = furi_thread_flags_wait (
13
- UHFUartWorkerWaitingDataFlag | UHFUartWorkerExitingFlag , FuriFlagWaitAny , FuriWaitForever
14
- );
15
- FURI_LOG_E ("UHF_UART_WORKER" , "events = %lu" , events );
16
- if (events & UHFUartWorkerWaitingDataFlag ){
17
- FURI_LOG_E ("UHF_UART_WORKER" , "Waiting data..." );
18
- length_read = furi_stream_buffer_receive (uart -> rx_buff_stream , read_buffer , 1 , 0 );
19
- if (length_read ){
20
- do {
21
- length_read = furi_stream_buffer_receive (uart -> rx_buff_stream , read_buffer , 1 , 0 );
22
- uhf_buffer_append_single (buffer , read_buffer [0 ]);
23
- uhf_uart_tick_reset (uart );
24
- }while (read_buffer [0 ] != UHF_UART_FRAME_END && length_read > 0 );
25
- FURI_LOG_E ("UHF_UART_WORKER" , "UHF Total length read = %u" , uhf_buffer_get_size (buffer ));
26
- uhf_buffer_close (buffer );
27
- furi_stream_buffer_reset (uart -> rx_buff_stream );
28
- }
29
- }
30
- }while ((events & UHFUartWorkerExitingFlag ) != UHFUartWorkerExitingFlag );
31
- return 0 ;
32
- }
33
33
void uhf_uart_default_rx_callback (FuriHalSerialHandle * handle , FuriHalSerialRxEvent event , void * ctx ) {
34
34
UHFUart * uart = (UHFUart * )ctx ;
35
- if (event == FuriHalSerialRxEventData ){
35
+ // FURI_LOG_E("UHF_UART", "UHF UART RX CALLBACK");
36
+ if ((event & FuriHalSerialRxEventData ) == FuriHalSerialRxEventData ){
36
37
uint8_t data = furi_hal_serial_async_rx (handle );
37
- furi_stream_buffer_send (uart -> rx_buff_stream , (void * )& data , 1 , 0 );
38
- furi_thread_flags_set (furi_thread_get_id (uart -> thread ), UHFUartWorkerWaitingDataFlag );
38
+ // if(data == UHF_UART_FRAME_START){
39
+ // uhf_buffer_reset(uart->buffer);
40
+ // }
41
+ if (uhf_is_buffer_closed (uart -> buffer )){
42
+ return ;
43
+ }
44
+ if (data == UHF_UART_FRAME_END ){
45
+ uhf_buffer_append_single (uart -> buffer , data );
46
+ uhf_buffer_close (uart -> buffer );
47
+ FURI_LOG_E ("UHF_UART" , "UHF Total length read = %u" , uhf_buffer_get_size (uart -> buffer ));
48
+ }
49
+ uhf_buffer_append_single (uart -> buffer , data );
50
+ uhf_uart_tick_reset (uart );
51
+ // furi_stream_buffer_send(uart->rx_buff_stream, (void*)&data, 1, 0);
52
+ // furi_thread_flags_set(furi_thread_get_id(uart->thread), UHFUartWorkerWaitingDataFlag);
39
53
}
40
- // Buffer* buffer = (Buffer*)uart->buffer;
41
- // if(buffer->closed) return; // buffer closed
42
- // if(event != FuriHalSerialRxEventData) return; // not byte received
43
- // uint8_t data = furi_hal_serial_async_rx(handle); // read data
44
- // FURI_LOG_E("UHF_UART_CB", "UHF UART RX: %02X", data);
45
- // buffer_append_single(buffer, data); // append data
46
- // if(data == UHF_UART_FRAME_END) buffer_close(buffer); // end of frame
47
- // uart->tick = UHF_UART_WAIT_TICK; // reset tick
48
54
}
49
55
50
56
UHFUart * uhf_uart_alloc (){
51
57
UHFUart * uart = (UHFUart * )malloc (sizeof (UHFUart ));
52
58
uart -> bus = FuriHalBusUSART1 ;
53
59
uart -> handle = furi_hal_serial_control_acquire (FuriHalSerialIdUsart );
54
- uart -> rx_buff_stream = furi_stream_buffer_alloc (UHF_UART_RX_BUFFER_SIZE , 1 );
60
+ // uart->rx_buff_stream = furi_stream_buffer_alloc(UHF_UART_RX_BUFFER_SIZE, 1);
55
61
uart -> init_by_app = !furi_hal_bus_is_enabled (uart -> bus );
56
62
uart -> tick = UHF_UART_WAIT_TICK ;
57
63
uart -> baudrate = UHF_UART_DEFAULT_BAUDRATE ;
64
+ // expansion_disable();
58
65
if (uart -> init_by_app ){
59
66
FURI_LOG_E ("UHF_UART" , "UHF UART INIT BY APP" );
60
67
furi_hal_serial_init (uart -> handle , uart -> baudrate );
@@ -63,20 +70,20 @@ UHFUart* uhf_uart_alloc(){
63
70
FURI_LOG_E ("UHF_UART" , "UHF UART INIT BY HAL" );
64
71
}
65
72
uart -> buffer = uhf_buffer_alloc (UHF_UART_RX_BUFFER_SIZE );
66
- uart -> thread = furi_thread_alloc_ex ("UHFUartWorker" , UHF_UART_WORKER_STACK_SIZE , uhf_uart_worker_callback , uart );
67
- furi_thread_start (uart -> thread );
73
+ // uart->thread = furi_thread_alloc_ex("UHFUartWorker", UHF_UART_WORKER_STACK_SIZE, uhf_uart_worker_callback, uart);
74
+ // furi_thread_start(uart->thread);
68
75
furi_hal_serial_async_rx_start (uart -> handle , uhf_uart_default_rx_callback , uart , false);
69
76
return uart ;
70
77
}
71
78
72
79
void uhf_uart_free (UHFUart * uart ){
73
80
furi_assert (uart );
74
- furi_assert (uart -> thread );
81
+ // furi_assert(uart->thread);
75
82
76
- furi_thread_flags_set (furi_thread_get_id (uart -> thread ), UHFUartWorkerExitingFlag );
77
- furi_thread_join (uart -> thread );
78
- furi_thread_free (uart -> thread );
79
- furi_stream_buffer_free (uart -> rx_buff_stream );
83
+ // furi_thread_flags_set(furi_thread_get_id(uart->thread), UHFUartWorkerExitingFlag);
84
+ // furi_thread_join(uart->thread);
85
+ // furi_thread_free(uart->thread);
86
+ // furi_stream_buffer_free(uart->rx_buff_stream);
80
87
uhf_buffer_free (uart -> buffer );
81
88
if (uart -> init_by_app ){
82
89
furi_hal_serial_deinit (uart -> handle );
@@ -96,7 +103,7 @@ void uhf_uart_send(UHFUart* uart, uint8_t* data, size_t size){
96
103
void uhf_uart_send_wait (UHFUart * uart , uint8_t * data , size_t size ){
97
104
uhf_uart_send (uart , data , size );
98
105
furi_hal_serial_tx_wait_complete (uart -> handle );
99
- furi_thread_flags_set (furi_thread_get_id (uart -> thread ), UHFUartWorkerWaitingDataFlag );
106
+ // furi_thread_flags_set(furi_thread_get_id(uart->thread), UHFUartWorkerWaitingDataFlag);
100
107
}
101
108
102
109
void uhf_uart_set_baudrate (UHFUart * uart , uint32_t baudrate ){
0 commit comments