diff options
author | あく <alleteam@gmail.com> | 2022-04-14 19:41:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-14 19:41:15 +0300 |
commit | 9b9edf2fbffa2fc671a67ec2b629cc322952cd4a (patch) | |
tree | fb0664d13aa023858d41f0fe3be2b07cf9e540bd /firmware | |
parent | c078bbcb0ea7dc88a2079511450805a72773b68a (diff) |
[FL-2460] Rpc: debug request logging and cli log command (#1114)
* Rpc: debug request logging
* Furi, Cli: replace global thread callback with local ring buffers, fix log command
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/targets/f7/furi_hal/furi_hal_console.c | 34 | ||||
-rw-r--r-- | firmware/targets/f7/furi_hal/furi_hal_console.h | 4 |
2 files changed, 32 insertions, 6 deletions
diff --git a/firmware/targets/f7/furi_hal/furi_hal_console.c b/firmware/targets/f7/furi_hal/furi_hal_console.c index f3cf06da..e5db927b 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_console.c +++ b/firmware/targets/f7/furi_hal/furi_hal_console.c @@ -18,11 +18,21 @@ #define CONSOLE_BAUDRATE 230400 #endif -volatile bool furi_hal_console_alive = false; +typedef struct { + bool alive; + FuriHalConsoleTxCallback tx_callback; + void* tx_callback_context; +} FuriHalConsole; + +FuriHalConsole furi_hal_console = { + .alive = false, + .tx_callback = NULL, + .tx_callback_context = NULL, +}; void furi_hal_console_init() { furi_hal_uart_init(FuriHalUartIdUSART1, CONSOLE_BAUDRATE); - furi_hal_console_alive = true; + furi_hal_console.alive = true; } void furi_hal_console_enable() { @@ -30,20 +40,32 @@ void furi_hal_console_enable() { while(!LL_USART_IsActiveFlag_TC(USART1)) ; furi_hal_uart_set_br(FuriHalUartIdUSART1, CONSOLE_BAUDRATE); - furi_hal_console_alive = true; + furi_hal_console.alive = true; } void furi_hal_console_disable() { while(!LL_USART_IsActiveFlag_TC(USART1)) ; - furi_hal_console_alive = false; + furi_hal_console.alive = false; +} + +void furi_hal_console_set_tx_callback(FuriHalConsoleTxCallback callback, void* context) { + FURI_CRITICAL_ENTER(); + furi_hal_console.tx_callback = callback; + furi_hal_console.tx_callback_context = context; + FURI_CRITICAL_EXIT(); } void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) { - if(!furi_hal_console_alive) return; + if(!furi_hal_console.alive) return; FURI_CRITICAL_ENTER(); // Transmit data + + if(furi_hal_console.tx_callback) { + furi_hal_console.tx_callback(buffer, buffer_size, furi_hal_console.tx_callback_context); + } + furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size); // Wait for TC flag to be raised for last char while(!LL_USART_IsActiveFlag_TC(USART1)) @@ -52,7 +74,7 @@ void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) { } void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size) { - if(!furi_hal_console_alive) return; + if(!furi_hal_console.alive) return; FURI_CRITICAL_ENTER(); // Transmit data diff --git a/firmware/targets/f7/furi_hal/furi_hal_console.h b/firmware/targets/f7/furi_hal/furi_hal_console.h index 637c17f6..104515ce 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_console.h +++ b/firmware/targets/f7/furi_hal/furi_hal_console.h @@ -7,12 +7,16 @@ extern "C" { #endif +typedef void (*FuriHalConsoleTxCallback)(const uint8_t* buffer, size_t size, void* context); + void furi_hal_console_init(); void furi_hal_console_enable(); void furi_hal_console_disable(); +void furi_hal_console_set_tx_callback(FuriHalConsoleTxCallback callback, void* context); + void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size); void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size); |