mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
Merge branch 'gsurkov/3764_expansion_control' of https://github.com/flipperdevices/flipperzero-firmware into xfw-dev
This commit is contained in:
@@ -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*);
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user