想要确认主机在连接后,有没有使能CCCD,使能的是哪一个?可以通过以下的方法确认
简介
在 BLE(低功耗蓝牙)开发中,CCCD(Client Characteristic Configuration Descriptor,UUID: 0x2902)是实现设备间"异步通信"的核心机制。
它的存在是为了解决一个问题:从机(Server)什么时候可以主动给主机(Client)发数据,并且为了节省功耗,从机通常不能随意向主机推送数据,由主机决定是否开启 Notify(通知)或 Indicate(指示)。只有在主机明确写入 CCCD 允许后,从机才能主动推送数据。
每个具有 Notify 或 Indicate 属性的 Characteristic 都必须配有一个独立的 CCCD。
代码
使能与关闭CCCD Notify 本质上就是通过0x2902发送两字节数据, 开启 01 00 ;关闭 00 00
所以在写数据回调内打印0x2902就可以显示出对应的数据。

c
case GATT_CLIENT_CHAR_CFG_UUID:{
status = GATTServApp_ProcessCCCWriteReq(connHandle, pAttr, pValue, len,
offset, GATT_CLIENT_CFG_NOTIFY);
PRINT("------ GATT_CLIENT_CHAR_CFG_UUID offset %d handle %X -------\n",offset,pAttr->handle);
for(uint16_t i=0; i<len;i++){
PRINT(" %02x ",pValue[i]);
}
PRINT("\n-------------\n");
}
break;
注:handle 适用于区分主机通过哪一个UUID给从机发送CCCD的。
实验
