0.98.0-rc various fixes (#3402)

This commit is contained in:
あく 2024-01-29 21:35:46 +09:00 committed by GitHub
parent 027ea9ea36
commit c8ea167a06
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 128 additions and 64 deletions

View file

@ -96,6 +96,7 @@ static void expansion_test_app_start(ExpansionTestApp* instance) {
instance->thread_id = furi_thread_get_current_id();
instance->expansion = furi_record_open(RECORD_EXPANSION);
instance->handle = furi_hal_serial_control_acquire(MODULE_SERIAL_ID);
furi_check(instance->handle);
// Configure the serial port
furi_hal_serial_init(instance->handle, EXPANSION_PROTOCOL_DEFAULT_BAUD_RATE);
// Start waiting for the initial pulse

View file

@ -70,7 +70,12 @@ GpioApp* gpio_app_alloc() {
GpioAppViewUsbUartCfg,
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;
}

View file

@ -3,4 +3,5 @@ ADD_SCENE(gpio, test, Test)
ADD_SCENE(gpio, usb_uart, UsbUart)
ADD_SCENE(gpio, usb_uart_cfg, UsbUartCfg)
ADD_SCENE(gpio, usb_uart_close_rpc, UsbUartCloseRpc)
ADD_SCENE(gpio, error_expansion, ErrorExpansion)
ADD_SCENE(gpio, exit_confirm, ExitConfirm)

View 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);
}

View file

@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,52.0,,
Version,+,53.0,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.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_deinit,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_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_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_disable_direction,void,"FuriHalSerialHandle*, FuriHalSerialDirection"
Function,+,furi_hal_serial_dma_rx,size_t,"FuriHalSerialHandle*, uint8_t*, size_t"

1 entry status name type params
2 Version + 52.0 53.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
1277 Function + furi_hal_serial_control_acquire FuriHalSerialHandle* FuriHalSerialId
1278 Function + furi_hal_serial_control_deinit void
1279 Function + furi_hal_serial_control_init void
1280 Function + furi_hal_serial_control_is_busy _Bool FuriHalSerialId
1281 Function + furi_hal_serial_control_release void FuriHalSerialHandle*
1282 Function + - furi_hal_serial_control_resume void
1283 Function + furi_hal_serial_control_set_expansion_callback void FuriHalSerialId, FuriHalSerialControlExpansionCallback, void*
1284 Function + furi_hal_serial_control_set_logging_config void FuriHalSerialId, uint32_t
1285 Function + - furi_hal_serial_control_suspend void
1286 Function + furi_hal_serial_deinit void FuriHalSerialHandle*
1287 Function + furi_hal_serial_disable_direction void FuriHalSerialHandle*, FuriHalSerialDirection
1288 Function + furi_hal_serial_dma_rx size_t FuriHalSerialHandle*, uint8_t*, size_t

View file

@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,52.0,,
Version,+,53.0,,
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
Header,+,applications/services/bt/bt_service/bt.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_deinit,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_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_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_disable_direction,void,"FuriHalSerialHandle*, FuriHalSerialDirection"
Function,+,furi_hal_serial_dma_rx,size_t,"FuriHalSerialHandle*, uint8_t*, size_t"

1 entry status name type params
2 Version + 52.0 53.0
3 Header + applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h
4 Header + applications/services/bt/bt_service/bt.h
5 Header + applications/services/cli/cli.h
1443 Function + furi_hal_serial_control_acquire FuriHalSerialHandle* FuriHalSerialId
1444 Function + furi_hal_serial_control_deinit void
1445 Function + furi_hal_serial_control_init void
1446 Function + furi_hal_serial_control_is_busy _Bool FuriHalSerialId
1447 Function + furi_hal_serial_control_release void FuriHalSerialHandle*
1448 Function + - furi_hal_serial_control_resume void
1449 Function + furi_hal_serial_control_set_expansion_callback void FuriHalSerialId, FuriHalSerialControlExpansionCallback, void*
1450 Function + furi_hal_serial_control_set_logging_config void FuriHalSerialId, uint32_t
1451 Function + - furi_hal_serial_control_suspend void
1452 Function + furi_hal_serial_deinit void FuriHalSerialHandle*
1453 Function + furi_hal_serial_disable_direction void FuriHalSerialHandle*, FuriHalSerialDirection
1454 Function + furi_hal_serial_dma_rx size_t FuriHalSerialHandle*, uint8_t*, size_t

View file

@ -38,7 +38,7 @@ extern "C" {
#endif
#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
#define TL_SHCI_CMD_DBG_RAW(...)
#endif
@ -52,7 +52,7 @@ extern "C" {
#endif
#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
#define TL_SHCI_EVT_DBG_RAW(...)
#endif
@ -69,7 +69,7 @@ extern "C" {
#endif
#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
#define TL_HCI_CMD_DBG_RAW(...)
#endif
@ -83,7 +83,7 @@ extern "C" {
#endif
#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
#define TL_HCI_EVT_DBG_RAW(...)
#endif

View file

@ -194,7 +194,8 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
if(completed_ticks > 0) {
if(completed_ticks > expected_idle_ticks) {
#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
completed_ticks = expected_idle_ticks;
}

View file

@ -173,7 +173,13 @@ static inline bool furi_hal_power_deep_sleep_available() {
}
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();
#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() {
@ -223,7 +229,13 @@ static inline void furi_hal_power_deep_sleep() {
__force_stores();
#endif
#ifdef FURI_HAL_POWER_DEBUG
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 1);
#endif
__WFI();
#ifdef FURI_HAL_POWER_DEBUG
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 0);
#endif
LL_LPM_EnableSleep();
@ -250,21 +262,9 @@ static inline void furi_hal_power_deep_sleep() {
void furi_hal_power_sleep() {
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();
#ifdef FURI_HAL_POWER_DEBUG
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_STOP_GPIO, 0);
#endif
} else {
#ifdef FURI_HAL_POWER_DEBUG
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_WFI_GPIO, 1);
#endif
furi_hal_power_light_sleep();
#ifdef FURI_HAL_POWER_DEBUG
furi_hal_gpio_write(FURI_HAL_POWER_DEBUG_WFI_GPIO, 0);
#endif
}
}

View file

@ -9,10 +9,9 @@
typedef enum {
FuriHalSerialControlMessageTypeStop,
FuriHalSerialControlMessageTypeSuspend,
FuriHalSerialControlMessageTypeResume,
FuriHalSerialControlMessageTypeAcquire,
FuriHalSerialControlMessageTypeRelease,
FuriHalSerialControlMessageTypeIsBusy,
FuriHalSerialControlMessageTypeLogging,
FuriHalSerialControlMessageTypeExpansionSetCallback,
FuriHalSerialControlMessageTypeExpansionIrq,
@ -92,29 +91,6 @@ static bool furi_hal_serial_control_handler_stop(void* input, void* output) {
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) {
FuriHalSerialId serial_id = *(FuriHalSerialId*)input;
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;
}
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) {
UNUSED(output);
@ -211,10 +194,9 @@ typedef bool (*FuriHalSerialControlCommandHandler)(void* input, void* output);
static const FuriHalSerialControlCommandHandler furi_hal_serial_control_handlers[] = {
[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,
[FuriHalSerialControlMessageTypeRelease] = furi_hal_serial_control_handler_release,
[FuriHalSerialControlMessageTypeIsBusy] = furi_hal_serial_control_handler_is_busy,
[FuriHalSerialControlMessageTypeLogging] = furi_hal_serial_control_handler_logging,
[FuriHalSerialControlMessageTypeExpansionSetCallback] =
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) {
furi_check(furi_hal_serial_control);
FuriHalSerialControlMessage message;
message.type = FuriHalSerialControlMessageTypeSuspend;
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);
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]);
}
}
void furi_hal_serial_control_resume(void) {
furi_check(furi_hal_serial_control);
FuriHalSerialControlMessage message;
message.type = FuriHalSerialControlMessageTypeResume;
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);
for(size_t i = 0; i < FuriHalSerialIdMax; i++) {
furi_hal_serial_resume(&furi_hal_serial_control->handles[i]);
}
}
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);
}
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) {
furi_check(serial_id <= FuriHalSerialIdMax);
furi_check(baud_rate >= 9600 && baud_rate <= 4000000);

View file

@ -12,10 +12,18 @@ void furi_hal_serial_control_init(void);
/** De-Initialize Serial Control */
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);
/** 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);
/** 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);
/** 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
*
* @param[in] serial_id The serial transceiver identifier. Use FuriHalSerialIdMax to disable logging.

View file

@ -58,7 +58,7 @@ void furi_hal_power_insomnia_enter();
*/
void furi_hal_power_insomnia_exit();
/** Check if sleep availble
/** Check if sleep available
*
* @return true if available
*/