EVT_HANDLE
时间: 2023-11-07 16:06:15 浏览: 56
在蓝牙协议栈中,EVT_HANDLE是一个事件处理器,用于处理蓝牙协议栈中的各种事件。在上述引用中,BLE_GAP_EVT_DISCONNECTED和BLE_GAP_EVT_CONNECTED都是蓝牙协议栈中的事件,分别表示蓝牙设备断开连接和连接成功。在事件处理函数ble_evt_handler中,通过判断事件类型,可以执行相应的操作,例如更新广播内容等。
相关问题
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context) { uint16_t conn_handle = p_ble_evt->evt.gap_evt.conn_handle; uint16_t role = ble_conn_state_role(conn_handle); #if __USER_1_DEBUG__ test_printf("role = %d\r\n", role); #endif // Based on the role this device plays in the connection, dispatch to the right handler. if (role == BLE_GAP_ROLE_PERIPH || ble_evt_is_advertising_timeout(p_ble_evt)) { ble_evt_dispatch(p_ble_evt, p_context); } else if ((role == BLE_GAP_ROLE_CENTRAL) || (p_ble_evt->header.evt_id == BLE_GAP_EVT_ADV_REPORT)) { ble_module_central_evt(p_ble_evt, p_context); } }
这段代码实现了一个 BLE 事件处理函数,当发生 BLE 事件时,该函数会被调用。函数首先通过连接句柄获取 BLE 设备的角色(是从设备还是主设备),然后根据角色类型分发事件到不同的事件处理函数中。
如果该设备是从设备(BLE_GAP_ROLE_PERIPH),或者广播超时(ble_evt_is_advertising_timeout(p_ble_evt)),则直接调用 ble_evt_dispatch() 函数处理该事件。
如果该设备是主设备(BLE_GAP_ROLE_CENTRAL),或者事件 ID 是 BLE_GAP_EVT_ADV_REPORT,则调用 ble_module_central_evt() 函数处理该事件。
其中,p_ble_evt 是一个 BLE 事件结构体指针,包含了 BLE 事件的各种信息,而 p_context 则是一个用户定义的上下文指针,可以用来传递一些额外的参数或数据。
static void on_disconnect(ble_cd_t * p_cd, ble_evt_t const * p_ble_evt) { UNUSED_PARAMETER(p_ble_evt); p_cd->conn_handle = BLE_CONN_HANDLE_INVALID; }
这是一个在 BLE 库中的回调函数,用于处理设备与中心设备(手机等)连接断开的情况。其中,p_cd 是一个指向连接描述符的指针,p_ble_evt 是一个指向 BLE 事件的指针。
在函数体中,首先使用 UNUSED_PARAMETER 宏将 p_ble_evt 参数标记为未使用,然后将连接句柄设置为 BLE_CONN_HANDLE_INVALID,表示设备当前未连接任何中心设备。