亲爱的TI工程师,您好:
想在上位机读取到下位机的Characteristic之后,下位机能够捕获到这个事件,然后就主动断开与主机的连接,以防止因与主机长时间保持连接,而增加从机的功耗。
所以,我想问一下,主机读取完从机Characteristic这个事件在哪个函数的哪个事件里面捕获,麻烦您了,谢谢~o(∩_∩)o 哈哈
CC2540蓝牙4.0BLE开发:
在相应的Profile里面的读回调
Bob Chen2:
回复 CC2540蓝牙4.0BLE开发:
您好,能具体描述一下怎么实现吗?
前期,在示例工程 SimpleBLEPeripheral 中我看到 simpleBLEPeripheral.c 文件中有有一个关于Profile的回调函数
static void simpleProfileChangeCB( uint8 paramID )然后在其中插入CHAR5(我要读的那个characteristic)的代码,如下:
static void simpleProfileChangeCB( uint8 paramID ) {switch( paramID ){//..(其它case)case SIMPLEPROFILE_CHAR5://xxxx(其它代码)break;} }但是仿真的时候,发现,我用上位机读取CHAR5的时候,并不会进入这个回调函数,是不是说这个函数只对Profile的写有响应。
然后,上面那个函数即 simpleProfileChangeCB 是注册在 simpleBLEPeripheral_SimpleProfileCBs 这个结构体中,这个结构体是一个 simpleProfileCBs_t类型的结构体。
//Simple GATT Profile Callbacks static simpleProfileCBs_t simpleBLEPeripheral_SimpleProfileCBs= {simpleProfileChangeCB// Characteristic value change callback }并把这个结构体赋值给了 simpleProfile_AppCBs 这个同样是 simpleProfileCBs_t结构体类型的指针
最后在
static bStatus_t simpleProfile_WriteAttrB( uint16 connHandle, gattAttribute_t*pAttr, uint8 *pValue, uint8 len, uint16 offset ){//..(其它代码)//If a charactersitic value changed then callback function to notify application of changeif( (notifyApp!=0xff) && simpleProfile_AppCBs && simpleProfile_AppCBs->pfnSimpleProfileChange ){simpleProfile_AppCBs->pfnSimpleProfileChange( notifyApp );} }这个函数中被调用。
不管是从字面解释上看,还是从函数的调用关系,他应该是Characteristic 值变化的时候,才会回调,即面向的是主机对从机的写过程。而主机对从机的读过程,因为不会改变Characteristic的值,所以并不会触发这个回调,不知道我理解的是否正确。
那如果这样的话,那 “相应的Profile里面的读回调”在哪儿啊?
还望您不惜赐教,谢谢~o(∩_∩)o 哈哈
Bob Chen2:
回复 CC2540蓝牙4.0BLE开发:
哈哈,非常感谢,将下面这段代码,添加到 static uint8 simpleProfile_ReadAttrCB(..)函数中,并作适当的修改之后,就成功响应了,并对CC2540的GATTProfile的实现方法有了进一步的了解~//If a charactersitic value changed then callback function to notify application of changeif( (notifyApp!=0xff) && simpleProfile_AppCBs && simpleProfile_AppCBs->pfnSimpleProfileChange ){simpleProfile_AppCBs->pfnSimpleProfileChange( notifyApp );}再次表示感谢~o(∩_∩)o 哈哈