Skip to content

Commit 010c5c2

Browse files
committed
pusing data straight to uhf_buffer
1 parent 6e9d1ba commit 010c5c2

File tree

2 files changed

+59
-51
lines changed

2 files changed

+59
-51
lines changed

uhf_uart.c

+56-49
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,67 @@
11
#include "uhf_uart.h"
22

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+
// }
332

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-
}
3333
void uhf_uart_default_rx_callback(FuriHalSerialHandle *handle, FuriHalSerialRxEvent event, void* ctx) {
3434
UHFUart* uart = (UHFUart*)ctx;
35-
if(event == FuriHalSerialRxEventData){
35+
// FURI_LOG_E("UHF_UART", "UHF UART RX CALLBACK");
36+
if((event & FuriHalSerialRxEventData) == FuriHalSerialRxEventData){
3637
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);
3953
}
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
4854
}
4955

5056
UHFUart* uhf_uart_alloc(){
5157
UHFUart *uart = (UHFUart*)malloc(sizeof(UHFUart));
5258
uart->bus = FuriHalBusUSART1;
5359
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);
5561
uart->init_by_app = !furi_hal_bus_is_enabled(uart->bus);
5662
uart->tick = UHF_UART_WAIT_TICK;
5763
uart->baudrate = UHF_UART_DEFAULT_BAUDRATE;
64+
// expansion_disable();
5865
if(uart->init_by_app){
5966
FURI_LOG_E("UHF_UART", "UHF UART INIT BY APP");
6067
furi_hal_serial_init(uart->handle, uart->baudrate);
@@ -63,20 +70,20 @@ UHFUart* uhf_uart_alloc(){
6370
FURI_LOG_E("UHF_UART", "UHF UART INIT BY HAL");
6471
}
6572
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);
6875
furi_hal_serial_async_rx_start(uart->handle, uhf_uart_default_rx_callback, uart, false);
6976
return uart;
7077
}
7178

7279
void uhf_uart_free(UHFUart* uart){
7380
furi_assert(uart);
74-
furi_assert(uart->thread);
81+
// furi_assert(uart->thread);
7582

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);
8087
uhf_buffer_free(uart->buffer);
8188
if(uart->init_by_app){
8289
furi_hal_serial_deinit(uart->handle);
@@ -96,7 +103,7 @@ void uhf_uart_send(UHFUart* uart, uint8_t* data, size_t size){
96103
void uhf_uart_send_wait(UHFUart* uart, uint8_t* data, size_t size){
97104
uhf_uart_send(uart, data, size);
98105
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);
100107
}
101108

102109
void uhf_uart_set_baudrate(UHFUart* uart, uint32_t baudrate){

uhf_uart.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22
#include <furi_hal.h>
3+
// #include <expansion/expansion.h>
34
#include <stdint.h>
45
#include <stdbool.h>
56
#include "uhf_buffer.h"
@@ -22,8 +23,8 @@ typedef enum{
2223
typedef struct{
2324
FuriHalBus bus;
2425
FuriHalSerialHandle *handle;
25-
FuriStreamBuffer *rx_buff_stream;
26-
FuriThread *thread;
26+
// FuriStreamBuffer *rx_buff_stream;
27+
// FuriThread *thread;
2728
CallbackFunction callback;
2829
Buffer *buffer;
2930
uint32_t baudrate;

0 commit comments

Comments
 (0)