mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 20:49:49 +04:00
Merge branch 'dev' into reborned/open_from_browser
This commit is contained in:
@@ -96,6 +96,7 @@ static void expansion_test_app_start(ExpansionTestApp* instance) {
|
|||||||
instance->thread_id = furi_thread_get_current_id();
|
instance->thread_id = furi_thread_get_current_id();
|
||||||
instance->expansion = furi_record_open(RECORD_EXPANSION);
|
instance->expansion = furi_record_open(RECORD_EXPANSION);
|
||||||
instance->handle = furi_hal_serial_control_acquire(MODULE_SERIAL_ID);
|
instance->handle = furi_hal_serial_control_acquire(MODULE_SERIAL_ID);
|
||||||
|
furi_check(instance->handle);
|
||||||
// Configure the serial port
|
// Configure the serial port
|
||||||
furi_hal_serial_init(instance->handle, EXPANSION_PROTOCOL_DEFAULT_BAUD_RATE);
|
furi_hal_serial_init(instance->handle, EXPANSION_PROTOCOL_DEFAULT_BAUD_RATE);
|
||||||
// Start waiting for the initial pulse
|
// Start waiting for the initial pulse
|
||||||
|
|||||||
@@ -70,7 +70,12 @@ GpioApp* gpio_app_alloc() {
|
|||||||
GpioAppViewUsbUartCfg,
|
GpioAppViewUsbUartCfg,
|
||||||
variable_item_list_get_view(app->var_item_list));
|
variable_item_list_get_view(app->var_item_list));
|
||||||
|
|
||||||
scene_manager_next_scene(app->scene_manager, GpioSceneStart);
|
if(furi_hal_serial_control_is_busy(FuriHalSerialIdUsart) ||
|
||||||
|
furi_hal_serial_control_is_busy(FuriHalSerialIdLpuart)) {
|
||||||
|
scene_manager_next_scene(app->scene_manager, GpioSceneErrorExpansion);
|
||||||
|
} else {
|
||||||
|
scene_manager_next_scene(app->scene_manager, GpioSceneStart);
|
||||||
|
}
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,4 +3,5 @@ ADD_SCENE(gpio, test, Test)
|
|||||||
ADD_SCENE(gpio, usb_uart, UsbUart)
|
ADD_SCENE(gpio, usb_uart, UsbUart)
|
||||||
ADD_SCENE(gpio, usb_uart_cfg, UsbUartCfg)
|
ADD_SCENE(gpio, usb_uart_cfg, UsbUartCfg)
|
||||||
ADD_SCENE(gpio, usb_uart_close_rpc, UsbUartCloseRpc)
|
ADD_SCENE(gpio, usb_uart_close_rpc, UsbUartCloseRpc)
|
||||||
|
ADD_SCENE(gpio, error_expansion, ErrorExpansion)
|
||||||
ADD_SCENE(gpio, exit_confirm, ExitConfirm)
|
ADD_SCENE(gpio, exit_confirm, ExitConfirm)
|
||||||
|
|||||||
43
applications/main/gpio/scenes/gpio_scene_error_expansion.c
Normal file
43
applications/main/gpio/scenes/gpio_scene_error_expansion.c
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include "../gpio_app_i.h"
|
||||||
|
#include "../gpio_custom_event.h"
|
||||||
|
|
||||||
|
void gpio_scene_error_expansion_on_enter(void* context) {
|
||||||
|
GpioApp* app = context;
|
||||||
|
|
||||||
|
widget_add_icon_element(app->widget, 78, 0, &I_ActiveConnection_50x64);
|
||||||
|
widget_add_string_multiline_element(
|
||||||
|
app->widget, 3, 2, AlignLeft, AlignTop, FontPrimary, "Ext. Module\nis connected!");
|
||||||
|
widget_add_string_multiline_element(
|
||||||
|
app->widget,
|
||||||
|
3,
|
||||||
|
30,
|
||||||
|
AlignLeft,
|
||||||
|
AlignTop,
|
||||||
|
FontSecondary,
|
||||||
|
"Disconnect External\n"
|
||||||
|
"Module\n"
|
||||||
|
"to use this function.");
|
||||||
|
|
||||||
|
view_dispatcher_switch_to_view(app->view_dispatcher, GpioAppViewUsbUartCloseRpc);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool gpio_scene_error_expansion_on_event(void* context, SceneManagerEvent event) {
|
||||||
|
GpioApp* app = context;
|
||||||
|
bool consumed = false;
|
||||||
|
|
||||||
|
if(event.type == SceneManagerEventTypeCustom) {
|
||||||
|
if(event.event == GpioCustomEventErrorBack) {
|
||||||
|
if(!scene_manager_previous_scene(app->scene_manager)) {
|
||||||
|
scene_manager_stop(app->scene_manager);
|
||||||
|
view_dispatcher_stop(app->view_dispatcher);
|
||||||
|
}
|
||||||
|
consumed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return consumed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpio_scene_error_expansion_on_exit(void* context) {
|
||||||
|
GpioApp* app = context;
|
||||||
|
widget_reset(app->widget);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
entry,status,name,type,params
|
entry,status,name,type,params
|
||||||
Version,+,52.0,,
|
Version,+,53.0,,
|
||||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||||
Header,+,applications/services/cli/cli.h,,
|
Header,+,applications/services/cli/cli.h,,
|
||||||
Header,+,applications/services/cli/cli_vcp.h,,
|
Header,+,applications/services/cli/cli_vcp.h,,
|
||||||
@@ -1277,11 +1277,12 @@ Function,+,furi_hal_serial_async_rx_stop,void,FuriHalSerialHandle*
|
|||||||
Function,+,furi_hal_serial_control_acquire,FuriHalSerialHandle*,FuriHalSerialId
|
Function,+,furi_hal_serial_control_acquire,FuriHalSerialHandle*,FuriHalSerialId
|
||||||
Function,+,furi_hal_serial_control_deinit,void,
|
Function,+,furi_hal_serial_control_deinit,void,
|
||||||
Function,+,furi_hal_serial_control_init,void,
|
Function,+,furi_hal_serial_control_init,void,
|
||||||
|
Function,+,furi_hal_serial_control_is_busy,_Bool,FuriHalSerialId
|
||||||
Function,+,furi_hal_serial_control_release,void,FuriHalSerialHandle*
|
Function,+,furi_hal_serial_control_release,void,FuriHalSerialHandle*
|
||||||
Function,+,furi_hal_serial_control_resume,void,
|
Function,-,furi_hal_serial_control_resume,void,
|
||||||
Function,+,furi_hal_serial_control_set_expansion_callback,void,"FuriHalSerialId, FuriHalSerialControlExpansionCallback, void*"
|
Function,+,furi_hal_serial_control_set_expansion_callback,void,"FuriHalSerialId, FuriHalSerialControlExpansionCallback, void*"
|
||||||
Function,+,furi_hal_serial_control_set_logging_config,void,"FuriHalSerialId, uint32_t"
|
Function,+,furi_hal_serial_control_set_logging_config,void,"FuriHalSerialId, uint32_t"
|
||||||
Function,+,furi_hal_serial_control_suspend,void,
|
Function,-,furi_hal_serial_control_suspend,void,
|
||||||
Function,+,furi_hal_serial_deinit,void,FuriHalSerialHandle*
|
Function,+,furi_hal_serial_deinit,void,FuriHalSerialHandle*
|
||||||
Function,+,furi_hal_serial_disable_direction,void,"FuriHalSerialHandle*, FuriHalSerialDirection"
|
Function,+,furi_hal_serial_disable_direction,void,"FuriHalSerialHandle*, FuriHalSerialDirection"
|
||||||
Function,+,furi_hal_serial_dma_rx,size_t,"FuriHalSerialHandle*, uint8_t*, size_t"
|
Function,+,furi_hal_serial_dma_rx,size_t,"FuriHalSerialHandle*, uint8_t*, size_t"
|
||||||
|
|||||||
|
@@ -1,5 +1,5 @@
|
|||||||
entry,status,name,type,params
|
entry,status,name,type,params
|
||||||
Version,+,52.0,,
|
Version,+,53.0,,
|
||||||
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
|
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
|
||||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||||
Header,+,applications/services/cli/cli.h,,
|
Header,+,applications/services/cli/cli.h,,
|
||||||
@@ -1443,11 +1443,12 @@ Function,+,furi_hal_serial_async_rx_stop,void,FuriHalSerialHandle*
|
|||||||
Function,+,furi_hal_serial_control_acquire,FuriHalSerialHandle*,FuriHalSerialId
|
Function,+,furi_hal_serial_control_acquire,FuriHalSerialHandle*,FuriHalSerialId
|
||||||
Function,+,furi_hal_serial_control_deinit,void,
|
Function,+,furi_hal_serial_control_deinit,void,
|
||||||
Function,+,furi_hal_serial_control_init,void,
|
Function,+,furi_hal_serial_control_init,void,
|
||||||
|
Function,+,furi_hal_serial_control_is_busy,_Bool,FuriHalSerialId
|
||||||
Function,+,furi_hal_serial_control_release,void,FuriHalSerialHandle*
|
Function,+,furi_hal_serial_control_release,void,FuriHalSerialHandle*
|
||||||
Function,+,furi_hal_serial_control_resume,void,
|
Function,-,furi_hal_serial_control_resume,void,
|
||||||
Function,+,furi_hal_serial_control_set_expansion_callback,void,"FuriHalSerialId, FuriHalSerialControlExpansionCallback, void*"
|
Function,+,furi_hal_serial_control_set_expansion_callback,void,"FuriHalSerialId, FuriHalSerialControlExpansionCallback, void*"
|
||||||
Function,+,furi_hal_serial_control_set_logging_config,void,"FuriHalSerialId, uint32_t"
|
Function,+,furi_hal_serial_control_set_logging_config,void,"FuriHalSerialId, uint32_t"
|
||||||
Function,+,furi_hal_serial_control_suspend,void,
|
Function,-,furi_hal_serial_control_suspend,void,
|
||||||
Function,+,furi_hal_serial_deinit,void,FuriHalSerialHandle*
|
Function,+,furi_hal_serial_deinit,void,FuriHalSerialHandle*
|
||||||
Function,+,furi_hal_serial_disable_direction,void,"FuriHalSerialHandle*, FuriHalSerialDirection"
|
Function,+,furi_hal_serial_disable_direction,void,"FuriHalSerialHandle*, FuriHalSerialDirection"
|
||||||
Function,+,furi_hal_serial_dma_rx,size_t,"FuriHalSerialHandle*, uint8_t*, size_t"
|
Function,+,furi_hal_serial_dma_rx,size_t,"FuriHalSerialHandle*, uint8_t*, size_t"
|
||||||
|
|||||||
|
@@ -38,7 +38,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if(TL_SHCI_CMD_DBG_RAW_EN != 0)
|
#if(TL_SHCI_CMD_DBG_RAW_EN != 0)
|
||||||
#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
|
#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_log_tx(_PDATA_, _SIZE_)
|
||||||
#else
|
#else
|
||||||
#define TL_SHCI_CMD_DBG_RAW(...)
|
#define TL_SHCI_CMD_DBG_RAW(...)
|
||||||
#endif
|
#endif
|
||||||
@@ -52,7 +52,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if(TL_SHCI_EVT_DBG_RAW_EN != 0)
|
#if(TL_SHCI_EVT_DBG_RAW_EN != 0)
|
||||||
#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
|
#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_log_tx(_PDATA_, _SIZE_)
|
||||||
#else
|
#else
|
||||||
#define TL_SHCI_EVT_DBG_RAW(...)
|
#define TL_SHCI_EVT_DBG_RAW(...)
|
||||||
#endif
|
#endif
|
||||||
@@ -69,7 +69,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if(TL_HCI_CMD_DBG_RAW_EN != 0)
|
#if(TL_HCI_CMD_DBG_RAW_EN != 0)
|
||||||
#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
|
#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_log_tx(_PDATA_, _SIZE_)
|
||||||
#else
|
#else
|
||||||
#define TL_HCI_CMD_DBG_RAW(...)
|
#define TL_HCI_CMD_DBG_RAW(...)
|
||||||
#endif
|
#endif
|
||||||
@@ -83,7 +83,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if(TL_HCI_EVT_DBG_RAW_EN != 0)
|
#if(TL_HCI_EVT_DBG_RAW_EN != 0)
|
||||||
#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
|
#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_log_tx(_PDATA_, _SIZE_)
|
||||||
#else
|
#else
|
||||||
#define TL_HCI_EVT_DBG_RAW(...)
|
#define TL_HCI_EVT_DBG_RAW(...)
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -194,7 +194,8 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
|
|||||||
if(completed_ticks > 0) {
|
if(completed_ticks > 0) {
|
||||||
if(completed_ticks > expected_idle_ticks) {
|
if(completed_ticks > expected_idle_ticks) {
|
||||||
#ifdef FURI_HAL_OS_DEBUG
|
#ifdef FURI_HAL_OS_DEBUG
|
||||||
furi_hal_console_printf(">%lu\r\n", completed_ticks - expected_idle_ticks);
|
furi_log_print_raw_format(
|
||||||
|
FuriLogLevelDebug, ">%lu\r\n", completed_ticks - expected_idle_ticks);
|
||||||
#endif
|
#endif
|
||||||
completed_ticks = expected_idle_ticks;
|
completed_ticks = expected_idle_ticks;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,7 +173,13 @@ static inline bool furi_hal_power_deep_sleep_available() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void furi_hal_power_light_sleep() {
|
static inline void furi_hal_power_light_sleep() {
|
||||||
|
#ifdef FURI_HAL_POWER_DEBUG
|
||||||
|
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_WFI_GPIO, 1);
|
||||||
|
#endif
|
||||||
__WFI();
|
__WFI();
|
||||||
|
#ifdef FURI_HAL_POWER_DEBUG
|
||||||
|
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_WFI_GPIO, 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void furi_hal_power_suspend_aux_periphs() {
|
static inline void furi_hal_power_suspend_aux_periphs() {
|
||||||
@@ -223,7 +229,13 @@ static inline void furi_hal_power_deep_sleep() {
|
|||||||
__force_stores();
|
__force_stores();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef FURI_HAL_POWER_DEBUG
|
||||||
|
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 1);
|
||||||
|
#endif
|
||||||
__WFI();
|
__WFI();
|
||||||
|
#ifdef FURI_HAL_POWER_DEBUG
|
||||||
|
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
LL_LPM_EnableSleep();
|
LL_LPM_EnableSleep();
|
||||||
|
|
||||||
@@ -250,21 +262,9 @@ static inline void furi_hal_power_deep_sleep() {
|
|||||||
|
|
||||||
void furi_hal_power_sleep() {
|
void furi_hal_power_sleep() {
|
||||||
if(furi_hal_power_deep_sleep_available()) {
|
if(furi_hal_power_deep_sleep_available()) {
|
||||||
#ifdef FURI_HAL_POWER_DEBUG
|
|
||||||
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 1);
|
|
||||||
#endif
|
|
||||||
furi_hal_power_deep_sleep();
|
furi_hal_power_deep_sleep();
|
||||||
#ifdef FURI_HAL_POWER_DEBUG
|
|
||||||
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 0);
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
#ifdef FURI_HAL_POWER_DEBUG
|
|
||||||
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_WFI_GPIO, 1);
|
|
||||||
#endif
|
|
||||||
furi_hal_power_light_sleep();
|
furi_hal_power_light_sleep();
|
||||||
#ifdef FURI_HAL_POWER_DEBUG
|
|
||||||
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_WFI_GPIO, 0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,9 @@
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FuriHalSerialControlMessageTypeStop,
|
FuriHalSerialControlMessageTypeStop,
|
||||||
FuriHalSerialControlMessageTypeSuspend,
|
|
||||||
FuriHalSerialControlMessageTypeResume,
|
|
||||||
FuriHalSerialControlMessageTypeAcquire,
|
FuriHalSerialControlMessageTypeAcquire,
|
||||||
FuriHalSerialControlMessageTypeRelease,
|
FuriHalSerialControlMessageTypeRelease,
|
||||||
|
FuriHalSerialControlMessageTypeIsBusy,
|
||||||
FuriHalSerialControlMessageTypeLogging,
|
FuriHalSerialControlMessageTypeLogging,
|
||||||
FuriHalSerialControlMessageTypeExpansionSetCallback,
|
FuriHalSerialControlMessageTypeExpansionSetCallback,
|
||||||
FuriHalSerialControlMessageTypeExpansionIrq,
|
FuriHalSerialControlMessageTypeExpansionIrq,
|
||||||
@@ -92,29 +91,6 @@ static bool furi_hal_serial_control_handler_stop(void* input, void* output) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool furi_hal_serial_control_handler_suspend(void* input, void* output) {
|
|
||||||
UNUSED(input);
|
|
||||||
UNUSED(output);
|
|
||||||
|
|
||||||
for(size_t i = 0; i < FuriHalSerialIdMax; i++) {
|
|
||||||
furi_hal_serial_tx_wait_complete(&furi_hal_serial_control->handles[i]);
|
|
||||||
furi_hal_serial_suspend(&furi_hal_serial_control->handles[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool furi_hal_serial_control_handler_resume(void* input, void* output) {
|
|
||||||
UNUSED(input);
|
|
||||||
UNUSED(output);
|
|
||||||
|
|
||||||
for(size_t i = 0; i < FuriHalSerialIdMax; i++) {
|
|
||||||
furi_hal_serial_resume(&furi_hal_serial_control->handles[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool furi_hal_serial_control_handler_acquire(void* input, void* output) {
|
static bool furi_hal_serial_control_handler_acquire(void* input, void* output) {
|
||||||
FuriHalSerialId serial_id = *(FuriHalSerialId*)input;
|
FuriHalSerialId serial_id = *(FuriHalSerialId*)input;
|
||||||
if(furi_hal_serial_control->handles[serial_id].in_use) {
|
if(furi_hal_serial_control->handles[serial_id].in_use) {
|
||||||
@@ -148,6 +124,13 @@ static bool furi_hal_serial_control_handler_release(void* input, void* output) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool furi_hal_serial_control_handler_is_busy(void* input, void* output) {
|
||||||
|
FuriHalSerialId serial_id = *(FuriHalSerialId*)input;
|
||||||
|
*(bool*)output = furi_hal_serial_control->handles[serial_id].in_use;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool furi_hal_serial_control_handler_logging(void* input, void* output) {
|
static bool furi_hal_serial_control_handler_logging(void* input, void* output) {
|
||||||
UNUSED(output);
|
UNUSED(output);
|
||||||
|
|
||||||
@@ -211,10 +194,9 @@ typedef bool (*FuriHalSerialControlCommandHandler)(void* input, void* output);
|
|||||||
|
|
||||||
static const FuriHalSerialControlCommandHandler furi_hal_serial_control_handlers[] = {
|
static const FuriHalSerialControlCommandHandler furi_hal_serial_control_handlers[] = {
|
||||||
[FuriHalSerialControlMessageTypeStop] = furi_hal_serial_control_handler_stop,
|
[FuriHalSerialControlMessageTypeStop] = furi_hal_serial_control_handler_stop,
|
||||||
[FuriHalSerialControlMessageTypeSuspend] = furi_hal_serial_control_handler_suspend,
|
|
||||||
[FuriHalSerialControlMessageTypeResume] = furi_hal_serial_control_handler_resume,
|
|
||||||
[FuriHalSerialControlMessageTypeAcquire] = furi_hal_serial_control_handler_acquire,
|
[FuriHalSerialControlMessageTypeAcquire] = furi_hal_serial_control_handler_acquire,
|
||||||
[FuriHalSerialControlMessageTypeRelease] = furi_hal_serial_control_handler_release,
|
[FuriHalSerialControlMessageTypeRelease] = furi_hal_serial_control_handler_release,
|
||||||
|
[FuriHalSerialControlMessageTypeIsBusy] = furi_hal_serial_control_handler_is_busy,
|
||||||
[FuriHalSerialControlMessageTypeLogging] = furi_hal_serial_control_handler_logging,
|
[FuriHalSerialControlMessageTypeLogging] = furi_hal_serial_control_handler_logging,
|
||||||
[FuriHalSerialControlMessageTypeExpansionSetCallback] =
|
[FuriHalSerialControlMessageTypeExpansionSetCallback] =
|
||||||
furi_hal_serial_control_handler_expansion_set_callback,
|
furi_hal_serial_control_handler_expansion_set_callback,
|
||||||
@@ -277,21 +259,18 @@ void furi_hal_serial_control_deinit(void) {
|
|||||||
void furi_hal_serial_control_suspend(void) {
|
void furi_hal_serial_control_suspend(void) {
|
||||||
furi_check(furi_hal_serial_control);
|
furi_check(furi_hal_serial_control);
|
||||||
|
|
||||||
FuriHalSerialControlMessage message;
|
for(size_t i = 0; i < FuriHalSerialIdMax; i++) {
|
||||||
message.type = FuriHalSerialControlMessageTypeSuspend;
|
furi_hal_serial_tx_wait_complete(&furi_hal_serial_control->handles[i]);
|
||||||
message.api_lock = api_lock_alloc_locked();
|
furi_hal_serial_suspend(&furi_hal_serial_control->handles[i]);
|
||||||
furi_message_queue_put(furi_hal_serial_control->queue, &message, FuriWaitForever);
|
}
|
||||||
api_lock_wait_unlock_and_free(message.api_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void furi_hal_serial_control_resume(void) {
|
void furi_hal_serial_control_resume(void) {
|
||||||
furi_check(furi_hal_serial_control);
|
furi_check(furi_hal_serial_control);
|
||||||
|
|
||||||
FuriHalSerialControlMessage message;
|
for(size_t i = 0; i < FuriHalSerialIdMax; i++) {
|
||||||
message.type = FuriHalSerialControlMessageTypeResume;
|
furi_hal_serial_resume(&furi_hal_serial_control->handles[i]);
|
||||||
message.api_lock = api_lock_alloc_locked();
|
}
|
||||||
furi_message_queue_put(furi_hal_serial_control->queue, &message, FuriWaitForever);
|
|
||||||
api_lock_wait_unlock_and_free(message.api_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FuriHalSerialHandle* furi_hal_serial_control_acquire(FuriHalSerialId serial_id) {
|
FuriHalSerialHandle* furi_hal_serial_control_acquire(FuriHalSerialId serial_id) {
|
||||||
@@ -322,6 +301,22 @@ void furi_hal_serial_control_release(FuriHalSerialHandle* handle) {
|
|||||||
api_lock_wait_unlock_and_free(message.api_lock);
|
api_lock_wait_unlock_and_free(message.api_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool furi_hal_serial_control_is_busy(FuriHalSerialId serial_id) {
|
||||||
|
furi_check(furi_hal_serial_control);
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
FuriHalSerialControlMessage message;
|
||||||
|
message.type = FuriHalSerialControlMessageTypeIsBusy;
|
||||||
|
message.api_lock = api_lock_alloc_locked();
|
||||||
|
message.input = &serial_id;
|
||||||
|
message.output = &result;
|
||||||
|
furi_message_queue_put(furi_hal_serial_control->queue, &message, FuriWaitForever);
|
||||||
|
api_lock_wait_unlock_and_free(message.api_lock);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void furi_hal_serial_control_set_logging_config(FuriHalSerialId serial_id, uint32_t baud_rate) {
|
void furi_hal_serial_control_set_logging_config(FuriHalSerialId serial_id, uint32_t baud_rate) {
|
||||||
furi_check(serial_id <= FuriHalSerialIdMax);
|
furi_check(serial_id <= FuriHalSerialIdMax);
|
||||||
furi_check(baud_rate >= 9600 && baud_rate <= 4000000);
|
furi_check(baud_rate >= 9600 && baud_rate <= 4000000);
|
||||||
|
|||||||
@@ -12,10 +12,18 @@ void furi_hal_serial_control_init(void);
|
|||||||
/** De-Initialize Serial Control */
|
/** De-Initialize Serial Control */
|
||||||
void furi_hal_serial_control_deinit(void);
|
void furi_hal_serial_control_deinit(void);
|
||||||
|
|
||||||
/** Suspend All Serial Interfaces */
|
/** Suspend All Serial Interfaces
|
||||||
|
*
|
||||||
|
* @warning this is internal method, can only be used in suppress tick
|
||||||
|
* callback
|
||||||
|
*/
|
||||||
void furi_hal_serial_control_suspend(void);
|
void furi_hal_serial_control_suspend(void);
|
||||||
|
|
||||||
/** Resume All Serial Interfaces */
|
/** Resume All Serial Interfaces
|
||||||
|
*
|
||||||
|
* @warning this is internal method, can only be used in suppress tick
|
||||||
|
* callback
|
||||||
|
*/
|
||||||
void furi_hal_serial_control_resume(void);
|
void furi_hal_serial_control_resume(void);
|
||||||
|
|
||||||
/** Acquire Serial Interface Handler
|
/** Acquire Serial Interface Handler
|
||||||
@@ -32,6 +40,14 @@ FuriHalSerialHandle* furi_hal_serial_control_acquire(FuriHalSerialId serial_id);
|
|||||||
*/
|
*/
|
||||||
void furi_hal_serial_control_release(FuriHalSerialHandle* handle);
|
void furi_hal_serial_control_release(FuriHalSerialHandle* handle);
|
||||||
|
|
||||||
|
/** Acquire Serial Interface Handler
|
||||||
|
*
|
||||||
|
* @param[in] serial_id The serial transceiver identifier
|
||||||
|
*
|
||||||
|
* @return true if handle is acquired by someone
|
||||||
|
*/
|
||||||
|
bool furi_hal_serial_control_is_busy(FuriHalSerialId serial_id);
|
||||||
|
|
||||||
/** Acquire Serial Interface Handler
|
/** Acquire Serial Interface Handler
|
||||||
*
|
*
|
||||||
* @param[in] serial_id The serial transceiver identifier. Use FuriHalSerialIdMax to disable logging.
|
* @param[in] serial_id The serial transceiver identifier. Use FuriHalSerialIdMax to disable logging.
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ void furi_hal_power_insomnia_enter();
|
|||||||
*/
|
*/
|
||||||
void furi_hal_power_insomnia_exit();
|
void furi_hal_power_insomnia_exit();
|
||||||
|
|
||||||
/** Check if sleep availble
|
/** Check if sleep available
|
||||||
*
|
*
|
||||||
* @return true if available
|
* @return true if available
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user