diff --git a/include/zble_module.h b/include/zble_module.h index 3c42aa1..96fc963 100644 --- a/include/zble_module.h +++ b/include/zble_module.h @@ -1,4 +1,5 @@ #pragma once +#include #include /** @@ -6,15 +7,29 @@ */ typedef void (*on_service_init_t)(void); +typedef enum { + kzble_event_none, + kzble_event_connected, + kzble_event_disconnected, +} zble_event_type_t; + +typedef struct { + zble_event_type_t eventType; +} zble_event_t; typedef struct { const char* deviceName; on_service_init_t on_service_init; } zble_module_cfg_t; +typedef void (*zble_event_listener_t)(zble_event_t* event); + void zble_module_init(zble_module_cfg_t* cfg); +void zble_module_reglistener(zble_event_listener_t event_listener); + void zble_module_start_adv(); void zble_module_stop_adv(); +bool zble_module_is_connected(); int32_t zble_module_get_mtu_size(); \ No newline at end of file diff --git a/src/zble_module.c b/src/zble_module.c index b89e6c8..bbf24f1 100644 --- a/src/zble_module.c +++ b/src/zble_module.c @@ -36,18 +36,24 @@ NRF_BLE_GATT_DEF(m_gatt); /**< GATT module instance. */ * CODE * *******************************************************************************/ -static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; /**< 当前连接句柄 */ -static uint16_t m_mtu_size = BLE_GATT_ATT_MTU_DEFAULT - 3; +static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; /**< 当前连接句柄 */ +static uint16_t m_mtu_size = BLE_GATT_ATT_MTU_DEFAULT - 3; +static zble_event_listener_t m_event_listener; static void ble_evt_handler(ble_evt_t const* p_ble_evt, void* p_context) { - uint32_t err_code; + uint32_t err_code; + static zble_event_t zevent; switch (p_ble_evt->header.evt_id) { case BLE_GAP_EVT_CONNECTED: - m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; + m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; + zevent.eventType = kzble_event_connected; + if (m_event_listener) m_event_listener(&zevent); break; case BLE_GAP_EVT_DISCONNECTED: - m_conn_handle = BLE_CONN_HANDLE_INVALID; + m_conn_handle = BLE_CONN_HANDLE_INVALID; + zevent.eventType = kzble_event_disconnected; + if (m_event_listener) m_event_listener(&zevent); break; case BLE_GAP_EVT_PHY_UPDATE_REQUEST: { @@ -128,10 +134,13 @@ void zble_module_stop_adv() { uint32_t err_code = sd_ble_gap_adv_stop(m_advertising.adv_handle); ZERROR_CHECK(err_code); } +bool zble_module_is_connected() { return m_conn_handle != BLE_CONN_HANDLE_INVALID; } /******************************************************************************* * INIT * *******************************************************************************/ +void zble_module_reglistener(zble_event_listener_t event_listener) { m_event_listener = event_listener; } + void zble_module_init(zble_module_cfg_t* cfg) { /** * @brief