Expansion is_connected in event queue

This commit is contained in:
Willy-JL
2024-03-05 22:19:08 +00:00
parent e79e49edc6
commit 25965abed3

View File

@@ -28,10 +28,14 @@ typedef enum {
ExpansionMessageTypeModuleConnected, ExpansionMessageTypeModuleConnected,
ExpansionMessageTypeModuleDisconnected, ExpansionMessageTypeModuleDisconnected,
ExpansionMessageTypeConnectionEstablished, ExpansionMessageTypeConnectionEstablished,
ExpansionMessageTypeIsConnected,
} ExpansionMessageType; } ExpansionMessageType;
typedef union { typedef union {
union {
FuriHalSerialId serial_id; FuriHalSerialId serial_id;
bool* is_connected;
};
} ExpansionMessageData; } ExpansionMessageData;
typedef struct { typedef struct {
@@ -196,6 +200,11 @@ static void expansion_control_handler_connection_established(
instance->state = ExpansionStateConnectionEstablished; instance->state = ExpansionStateConnectionEstablished;
} }
static void
expansion_control_handler_is_connected(Expansion* instance, const ExpansionMessageData* data) {
*data->is_connected = instance->state == ExpansionStateConnectionEstablished;
}
typedef void (*ExpansionControlHandler)(Expansion*, const ExpansionMessageData*); typedef void (*ExpansionControlHandler)(Expansion*, const ExpansionMessageData*);
static const ExpansionControlHandler expansion_control_handlers[] = { static const ExpansionControlHandler expansion_control_handlers[] = {
@@ -205,6 +214,7 @@ static const ExpansionControlHandler expansion_control_handlers[] = {
[ExpansionMessageTypeModuleConnected] = expansion_control_handler_module_connected, [ExpansionMessageTypeModuleConnected] = expansion_control_handler_module_connected,
[ExpansionMessageTypeModuleDisconnected] = expansion_control_handler_module_disconnected, [ExpansionMessageTypeModuleDisconnected] = expansion_control_handler_module_disconnected,
[ExpansionMessageTypeConnectionEstablished] = expansion_control_handler_connection_established, [ExpansionMessageTypeConnectionEstablished] = expansion_control_handler_connection_established,
[ExpansionMessageTypeIsConnected] = expansion_control_handler_is_connected,
}; };
static int32_t expansion_control(void* context) { static int32_t expansion_control(void* context) {
@@ -278,7 +288,18 @@ void expansion_disable(Expansion* instance) {
bool expansion_is_connected(Expansion* instance) { bool expansion_is_connected(Expansion* instance) {
furi_check(instance); furi_check(instance);
return instance->state == ExpansionStateConnectionEstablished; bool is_connected;
ExpansionMessage message = {
.type = ExpansionMessageTypeIsConnected,
.data.is_connected = &is_connected,
.api_lock = api_lock_alloc_locked(),
};
furi_message_queue_put(instance->queue, &message, FuriWaitForever);
api_lock_wait_unlock_and_free(message.api_lock);
return is_connected;
} }
void expansion_set_listen_serial(Expansion* instance, FuriHalSerialId serial_id) { void expansion_set_listen_serial(Expansion* instance, FuriHalSerialId serial_id) {