CCCD (Client Characteristic Configuration Descriptor) 是实现数据交互的关键机制之一。简单来说它是主机通常是手机告诉从机如传感器设备可以发送数据给我了。CCCD标准UUID: 0x2902值功能描述0x0000关闭禁止通知和指示默认状态0x0001开启通知 (Notify)设备发送数据手机无需回复确认。速度快但不可靠0x0002开启指示 (Indicate)设备发送数据手机必须回复确认。较可靠但速度较慢主机例程内会主动使能CCCD 相关的代码逻辑如下查找服务-发现服务回调中-查找特征-发现特征回调中-查找CCCD特征-获取CCCD特征值-延时使能CCCD部分代码在之前的文章有写到本文主要是介绍发现特征回调中-查找CCCD特征-获取CCCD特征值-延时使能CCCD查找CCCD handlereq.startHandlecentralSvcStartHdl;req.endHandlecentralSvcEndHdl;req.type.lenATT_BT_UUID_SIZE;req.type.uuid[0]LO_UINT16(GATT_CLIENT_CHAR_CFG_UUID);req.type.uuid[1]HI_UINT16(GATT_CLIENT_CHAR_CFG_UUID);GATT_ReadUsingCharUUID(centralConnHandle,req,centralTaskId);找到CCCD handle 并延时使能CCCDif(eventsSTART_WRITE_CCCD_EVT){if(centralProcedureInProgressFALSE){// Do a writeattWriteReq_treq;req.cmdFALSE;req.sigFALSE;req.handlecentralCCCDHdl;req.len2;req.pValueGATT_bm_alloc(centralConnHandle,ATT_WRITE_REQ,req.len,NULL,0);if(req.pValue!NULL){req.pValue[0]1;req.pValue[1]0;if(GATT_WriteCharValue(centralConnHandle,req,centralTaskId)SUCCESS){centralProcedureInProgressTRUE;}else{GATT_bm_free((gattMsg_t*)req,ATT_WRITE_REQ);}}}return(events^START_WRITE_CCCD_EVT);}使能CCCD 本质上就是往0x2902发送 0x0001如上
【沁恒蓝牙开发】主机主动使能从机CCCD(使能Notify)
CCCD (Client Characteristic Configuration Descriptor) 是实现数据交互的关键机制之一。简单来说它是主机通常是手机告诉从机如传感器设备可以发送数据给我了。CCCD标准UUID: 0x2902值功能描述0x0000关闭禁止通知和指示默认状态0x0001开启通知 (Notify)设备发送数据手机无需回复确认。速度快但不可靠0x0002开启指示 (Indicate)设备发送数据手机必须回复确认。较可靠但速度较慢主机例程内会主动使能CCCD 相关的代码逻辑如下查找服务-发现服务回调中-查找特征-发现特征回调中-查找CCCD特征-获取CCCD特征值-延时使能CCCD部分代码在之前的文章有写到本文主要是介绍发现特征回调中-查找CCCD特征-获取CCCD特征值-延时使能CCCD查找CCCD handlereq.startHandlecentralSvcStartHdl;req.endHandlecentralSvcEndHdl;req.type.lenATT_BT_UUID_SIZE;req.type.uuid[0]LO_UINT16(GATT_CLIENT_CHAR_CFG_UUID);req.type.uuid[1]HI_UINT16(GATT_CLIENT_CHAR_CFG_UUID);GATT_ReadUsingCharUUID(centralConnHandle,req,centralTaskId);找到CCCD handle 并延时使能CCCDif(eventsSTART_WRITE_CCCD_EVT){if(centralProcedureInProgressFALSE){// Do a writeattWriteReq_treq;req.cmdFALSE;req.sigFALSE;req.handlecentralCCCDHdl;req.len2;req.pValueGATT_bm_alloc(centralConnHandle,ATT_WRITE_REQ,req.len,NULL,0);if(req.pValue!NULL){req.pValue[0]1;req.pValue[1]0;if(GATT_WriteCharValue(centralConnHandle,req,centralTaskId)SUCCESS){centralProcedureInProgressTRUE;}else{GATT_bm_free((gattMsg_t*)req,ATT_WRITE_REQ);}}}return(events^START_WRITE_CCCD_EVT);}使能CCCD 本质上就是往0x2902发送 0x0001如上