BLE建立连接的一般流程



BLE建立连接的一般流程

1. 开始与Client连接之前

1. ESP_GATTS_REG_EVT			注册
2. ESP_GATTS_CREATE_EVT			创建
3. ESP_GATTS_START_EVT 			启动
4. ESP_GATTS_ADD_CHAR_EVT 		添加特征
5. ESP_GATTS_ADD_CHAR_DESCR_EVT	添加特征描述 

1) 注册:ESP_GATTS_REG_EVT

调用esp_ble_gap_set_device_name(char *)来设置蓝牙设备名字;

调用esp_ble_gap_config_adv_data(esp_ble_adv_data_t *adv_data)来配置广播数据;

最后调用esp_ble_gatts_create_service(esp_gatt_if_t gatts_if, esp_gatt_srvc_id_t *service_id, uint16_t num_handle)指定gatts_ifservice_id来创建服务(底层通过调用btc_transfer_context()来实现服务的创建和回调函数的调用)。
服务创建完成时触发回调函数,向profile报告状态和服务ID。Service_id对于后面添加included serivcescharacteristics/descriptor都要用到。
同时触发ESP_GATTS_CREATE_EVT事件。


2) ESP_GATTS_CREATE_EVT

调用esp_ble_gatts_start_service(uint16_t service_handle)来启动服务;

再调用esp_ble_gatts_add_char(uint16_t service_handle, esp_bt_uuid_t *char_uuid, esp_gatt_perm_t perm, esp_gatt_char_prop_t property, esp_attr_value_t *char_val, esp_attr_control_t *control)来添加特性(特征的UUID, 特征值描述符属性权限, 特征属性、特征值、属性响应控制字节)。
触发ESP_GATTS_START_EVTESP_GATTS_ADD_CHAR_EVT事件。


3) ESP_GATTS_START_EVT

(略)


4) ESP_GATTS_ADD_CHAR_EVT

获取特征值调用esp_err_tesp_ble_gatts_add_char_descr(uint16_t service_handle, esp_bt_uuid_t *descr_uuid, esp_gatt_perm_tperm, esp_attr_value_t *char_descr_val, esp_attr_control_t *control)来添加特征描述符。


5) ESP_GATTS_ADD_CHAR_DESCR_EVT

(略)


2. 开始与Client连接之后

1. CONNECT_EVT			连接
2. ESP_GATTS_MTU_EVT	
3. GATT_WRITE_EVT 		(client)写(server)事件
4. ESP_GATTS_CONF_EVT 	配置事件
5. GATT_READ_EVT		(client)读(server)事件

参考资料

https://blog.csdn.net/zhejfl/article/details/85136102#comments_14573948

猜你喜欢

转载自blog.csdn.net/weixin_39591031/article/details/112785326