Merge branch 'gsurkov/3764_expansion_control' of https://github.com/flipperdevices/flipperzero-firmware into xfw-dev

This commit is contained in:
Willy-JL
2024-02-08 23:46:31 +00:00
2 changed files with 15 additions and 15 deletions

View File

@@ -142,10 +142,8 @@ static void expansion_control_handler_set_listen_serial(
static void expansion_control_handler_module_connected(
Expansion* instance,
const ExpansionMessageData* data) {
furi_check(instance->state != ExpansionStateDisabled);
UNUSED(data);
if(instance->state == ExpansionStateRunning) {
if(instance->state != ExpansionStateEnabled) {
return;
}
@@ -162,15 +160,14 @@ static void expansion_control_handler_module_disconnected(
Expansion* instance,
const ExpansionMessageData* data) {
UNUSED(data);
// This condition should be always true, but in some rare edge cases
// it is possible to change the settings while the module was being
// disconnected, hence the additional check.
if(instance->state == ExpansionStateRunning) {
instance->state = ExpansionStateEnabled;
expansion_worker_free(instance->worker);
furi_hal_serial_control_set_expansion_callback(
instance->serial_id, expansion_detect_callback, instance);
if(instance->state != ExpansionStateRunning) {
return;
}
instance->state = ExpansionStateEnabled;
expansion_worker_free(instance->worker);
furi_hal_serial_control_set_expansion_callback(
instance->serial_id, expansion_detect_callback, instance);
}
typedef void (*ExpansionControlHandler)(Expansion*, const ExpansionMessageData*);

View File

@@ -730,6 +730,13 @@ static void furi_hal_serial_async_rx_configure(
FuriHalSerialHandle* handle,
FuriHalSerialAsyncRxCallback callback,
void* context) {
// Handle must be configured before enabling RX interrupt
// as it might be triggered right away on a misconfigured handle
furi_hal_serial[handle->id].rx_byte_callback = callback;
furi_hal_serial[handle->id].handle = handle;
furi_hal_serial[handle->id].rx_dma_callback = NULL;
furi_hal_serial[handle->id].context = context;
if(handle->id == FuriHalSerialIdUsart) {
if(callback) {
furi_hal_serial_usart_deinit_dma_rx();
@@ -753,10 +760,6 @@ static void furi_hal_serial_async_rx_configure(
LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
}
}
furi_hal_serial[handle->id].rx_byte_callback = callback;
furi_hal_serial[handle->id].handle = handle;
furi_hal_serial[handle->id].rx_dma_callback = NULL;
furi_hal_serial[handle->id].context = context;
}
void furi_hal_serial_async_rx_start(