From 045d3a2c82c83f55e834d3202161bb34ac5cda52 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Fri, 2 Apr 2021 16:22:21 +0200 Subject: [PATCH] feat(ble): Delay epic con open ind until epicardium is done --- epicardium/ble/ble_api.h | 1 + epicardium/ble/ble_attc.c | 2 ++ epicardium/ble/epic_ble_api.c | 21 ++++++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/epicardium/ble/ble_api.h b/epicardium/ble/ble_api.h index dd4ae3c6d..7e2fbbf86 100644 --- a/epicardium/ble/ble_api.h +++ b/epicardium/ble/ble_api.h @@ -48,6 +48,7 @@ void ble_epic_att_api_free_att_write_data(struct epic_att_write *w); void ble_epic_ble_api_trigger_event(enum epic_ble_event_type type, void *data); void ble_epic_ble_api_init(void); void ble_epic_dm_api_event(dmEvt_t *dm_event); +void ble_epic_disc_cfg_complete(void); void ble_adv_init(void); void ble_adv_setup(void); diff --git a/epicardium/ble/ble_attc.c b/epicardium/ble/ble_attc.c index e9e290531..2cbf51a5b 100644 --- a/epicardium/ble/ble_attc.c +++ b/epicardium/ble/ble_attc.c @@ -1,6 +1,7 @@ #include <stdint.h> #include <stdbool.h> +#include "ble_api.h" #include "wsf_types.h" #include "util/bstream.h" #include "app_api.h" @@ -258,6 +259,7 @@ void bleDiscCback(dmConnId_t connId, uint8_t status) case APP_DISC_CFG_CMPL: AppDiscComplete(connId, APP_DISC_CFG_CMPL); + ble_epic_disc_cfg_complete(); break; case APP_DISC_CFG_CONN_START: diff --git a/epicardium/ble/epic_ble_api.c b/epicardium/ble/epic_ble_api.c index eb3d54e95..13f6a3e1b 100644 --- a/epicardium/ble/epic_ble_api.c +++ b/epicardium/ble/epic_ble_api.c @@ -24,6 +24,7 @@ static StaticQueue_t ble_event_queue_data; static uint8_t adv_data_buf[HCI_ADV_DATA_LEN]; static uint8_t sr_data_buf[HCI_ADV_DATA_LEN]; +static dmEvt_t connection_open_event; int epic_ble_free_event(struct epic_ble_event *e) { @@ -85,7 +86,7 @@ void ble_epic_ble_api_init(void) ble_epic_att_api_init(); } -void ble_epic_dm_api_event(dmEvt_t *dm_event) +static void send_dm_event(dmEvt_t *dm_event) { dmEvt_t *e = WsfBufAlloc(sizeof(*e)); @@ -97,6 +98,24 @@ void ble_epic_dm_api_event(dmEvt_t *dm_event) } } +void ble_epic_dm_api_event(dmEvt_t *dm_event) +{ + if (dm_event->hdr.event == DM_CONN_OPEN_IND) { + /* Cache the connection open indication until + * epicardium is done dicovering services. */ + memcpy(&connection_open_event, + dm_event, + sizeof(connection_open_event)); + } else { + send_dm_event(dm_event); + } +} + +void ble_epic_disc_cfg_complete(void) +{ + send_dm_event(&connection_open_event); +} + void epic_ble_close_connection(uint8_t connId) { AppConnClose(connId); -- GitLab