微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2540在哪里捕获上位机读取Characteristic的事件

cc2540在哪里捕获上位机读取Characteristic的事件

时间:10-02 整理:3721RD 点击:

亲爱的TI工程师,您好:

        想在上位机读取到下位机的Characteristic之后,下位机能够捕获到这个事件,然后就主动断开与主机的连接,以防止因与主机长时间保持连接,而增加从机的功耗。

所以,我想问一下,主机读取完从机Characteristic这个事件在哪个函数的哪个事件里面捕获,麻烦您了,谢谢~o(∩_∩)o 哈哈

在相应的Profile里面的读回调

您好,能具体描述一下怎么实现吗?

前期,在示例工程 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 change
  if( (notifyApp!=0xff) && simpleProfile_AppCBs && simpleProfile_AppCBs->pfnSimpleProfileChange )
  {
    simpleProfile_AppCBs->pfnSimpleProfileChange( notifyApp );
  }
}

这个函数中被调用。

不管是从字面解释上看,还是从函数的调用关系,他应该是Characteristic 值变化的时候,才会回调,即面向的是主机对从机的写过程。而主机对从机的读过程,因为不会改变Characteristic的值,所以并不会触发这个回调,不知道我理解的是否正确。

那如果这样的话,那 “相应的Profile里面的读回调”在哪儿啊?

还望您不惜赐教,谢谢~o(∩_∩)o 哈哈

static uint8 simpleProfile_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr, uint8 *pValue, uint8 *pLen, uint16 offset, uint8 maxLen )

留意一下这个函数

哈哈,非常感谢,将下面这段代码,添加到 static uint8 simpleProfile_ReadAttrCB(..)函数中,并作适当的修改之后,就成功响应了,并对CC2540的GATTProfile的实现方法有了进一步的了解~

//If a charactersitic value changed then callback function to notify application of change
  if( (notifyApp!=0xff) && simpleProfile_AppCBs && simpleProfile_AppCBs->pfnSimpleProfileChange )
  {
    simpleProfile_AppCBs->pfnSimpleProfileChange( notifyApp );
  }

再次表示感谢~o(∩_∩)o 哈哈

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top