文章目录
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_if
和service_id
来创建服务(底层通过调用btc_transfer_context()
来实现服务的创建和回调函数的调用)。
服务创建完成时触发回调函数,向profile
报告状态和服务ID。Service_id
对于后面添加included serivces
和characteristics/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_EVT
和ESP_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