|
本帖最后由 lolifrog 于 2021-1-27 17:16 编辑
目前使用使用nrf52840作蓝牙主机连接带dfu的从机设备,从机设备已经刷入BootLoader,是Buttonless DFU的模板。现在想模仿“nrf conncet” 软件,开启DFU服务下Bottonless特征的indicate(如下图),并发送0x01命令使从机进入DFU
现在不知道主机端程序是否开启indicate成功,写CCCD的代码如下
- static uint32_t cccd_configure(ble_hrs_c_t * p_ble_hrs_c, bool enable)
- {
- NRF_LOG_INFO("Configuring CCCD. CCCD Handle = %x, Connection Handle = %x",
- p_ble_hrs_c->peer_hrs_db.hrm_cccd_handle,
- p_ble_hrs_c->conn_handle);
- nrf_ble_gq_req_t hrs_c_req;
- uint8_t cccd[BLE_CCCD_VALUE_LEN];
- uint16_t cccd_val = enable ? BLE_GATT_HVX_INDICATION : 0;
- cccd[0] = LSB_16(cccd_val);
- cccd[1] = MSB_16(cccd_val);
- memset(&hrs_c_req, 0, sizeof(hrs_c_req));
- hrs_c_req.type = NRF_BLE_GQ_REQ_GATTC_WRITE;
- hrs_c_req.error_handler.cb = gatt_error_handler;
- hrs_c_req.error_handler.p_ctx = p_ble_hrs_c;
- hrs_c_req.params.gattc_write.handle = p_ble_hrs_c->peer_hrs_db.hrm_cccd_handle;
- hrs_c_req.params.gattc_write.len = BLE_CCCD_VALUE_LEN;
- hrs_c_req.params.gattc_write.offset = 0;//偏移量设置为0
- hrs_c_req.params.gattc_write.p_value = cccd;
- hrs_c_req.params.gattc_write.write_op = BLE_GATT_OP_WRITE_REQ;
- hrs_c_req.params.gattc_write.flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE;//执行准备好的写
- return nrf_ble_gq_item_add(p_ble_hrs_c->p_gatt_queue, &hrs_c_req, p_ble_hrs_c->conn_handle);
- }
复制代码 请问
1.怎么检测成功开启indicate,主机开启indicate的时候会和从机交互数据吗?
2.成功开启indicate之后,能不能按照“开发指南(下册-主机)配套实验源码\实验8-1:串口透传主机”中的 ble_uarts_c_string_send 函数 来写0x01到 从机
谢谢!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|