微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > notify问题咨询

notify问题咨询

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

现在看串口透传的程序,想知道central开启notify的函数语句是哪个?

例程里面没找到有开启的语句。。。

yueliangz0123,

开启notification 用的是central的 write 命令。

找到notification对应的handle, 然后写0x0001 过去,就打开了。

例程里面没见这样的语句啊?

难道是连接的时候顺便开起来?

Hi Yan,

   以simpleBLECentral.c为例, 是不是

 if ( simpleBLEDoWrite )
      {
        // Do a write
        attWriteReq_t req;
       
        req.handle = simpleBLECharHdl;
        req.len = 1;
        req.value[0] = simpleBLECharVal;
        req.sig = 0;
        req.cmd = 0;
        status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );        
      }

 

 

这个是跟按键操作相关函数里面的吧?要是我不操作按键呢

从机代码里面哪里是修改notify以便开启的?

我看了你在其他帖子里面的回复,打了一些断点,根本就不进这些断点...

我把我看的串口透传代码发上来你看看,central代码好像没有开启notify的操作~~

yueliangz0123,

木有类似 “enableNotification()” 这样的接口。例程里面没有使能notification 的示例代码。

但如我前面所说, 是用write命令实现的。

也如Holly 描述的,她贴的代码里面,simpleBLECharHdl 就是你需要的notification CCCD的handle,simpleBLECharVal 就是 0x0001, 其他都一样。

前提是你先通过服务查找,找到你需要特征值的CCCD.

我记得之前坛子里有很多关于查找服务下多个特征值的帖子,你可以搜索一下。

这些我知道。。。。

我上传的代码里面我没看到有通过write来开启的操作,但是又可以发送接收通知,我就觉得很奇怪...

yueliangz0123,

我也没看到你代码里面有什么。

你确定central接收的是notification, 而不是read的回复?

最好的方法是你用packet sniffer 抓包看一下,到底是什么情况。

我是用串口发送数据给peripheral,peripheral发给安卓手机,这种情况应该不是read的回复吧?

BLE有直通模式?是啥样的?

packet sniffer抓包,只能抓到广播的包,问了其他一些人讲,通信数据是调频抓不到,不知道怎么抓应用数据的包。。。

附件为安卓APP的源码,在google给的demo上修改的,麻烦看一下,谢谢

sbpSerialAppCallback是串口的回调函数   sbpSerialAppCallback() -> sbpSerialAppSendNoti() -> GATT_Notification(),从这里看,串口的数据最后是通过GATT_Notification()发上来的,这应该是notify,不是read的回复吧?

yueliangz0123,

原来是android 手机。。。

关于抓包,请看这个帖子:http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/24372/99278.aspx#99278

你还是抓包看一下吧,android 的 app 上有可能打开了notification. 你用的啥 apk? 自己写的? 网上下的?

不用安卓手机,在开发板上用给的主从代码进行串口透传试验也是可以的,但是就是找不到central在哪里开启notify的~~~

android代码里面有打开notify,如果没错的话应该是mBluetoothLeService.setCharacteristicNotification(characteristic, true)这个函数吧?

附件是串口透传试验的说明,说明讲,一旦连接就可以进行透传了,但是在代码里找不出开启notify的操作,断点跟踪也没追踪到...

yueliangz0123,

android 打开notification 的函数你说的是对的。

关于central,抓包啊, 抓包, 跟你说了多少次了要抓包!看看空中交互到底是怎么样的,再做判断,到底有没有使能notification, 空中一看就能看出来,如果真的发了,这样追回去哪里发的也很快。

你的pdf 我们不关心。怎么抓到数据通信包的方法我也在前面的回复里告诉你了,试一下吧,贴出来给我们看看。

你看一下peripheral中对应characteristic的属性,如果为GATT_PROP_NOTIFY,那么peripheral可以发送notify数据。

我记得我没有打开这个notify peripheral也能发送数据。

可能默认是打开的吧~

yueliangz0123,

android 打开notification 的函数你说的是对的。

关于central,抓包啊, 抓包, 跟你说了多少次了要抓包!看看空中交互到底是怎么样的,再做判断,到底有没有使能notification, 空中一看就能看出来,如果真的发了,这样追回去哪里发的也很快。

你的pdf 我们不关心。怎么抓到数据通信包的方法我也在前面的回复里告诉你了,试一下吧,贴出来给我们看看。

加油!

yueliangz0123,

 以TI提供的BLE-CC254x-1.4.0中SimpleBLEPeripheral为例,在simpleGATTprofile.c里定义了Char4这个特征值具有Notify属性,

// Simple Profile Characteristic 4 Properties
static uint8 simpleProfileChar4Props = GATT_PROP_NOTIFY;

在一个周期任务中,我们将Char3复制到Char4中,当client使能Notification时,每当调用这个周期任务就会被发送。

 static void performPeriodicTask( void )
{
  uint8 valueToCopy;
  uint8 stat;

  // Call to retrieve the value of the third characteristic in the profile
  stat = SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR3, &valueToCopy);

  if( stat == SUCCESS )
  {
    /*
     * Call to set that value of the fourth characteristic in the profile. Note
     * that if notifications of the fourth characteristic have been enabled by
     * a GATT client device, then a notification will be sent every time this
     * function is called.
     */
    SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR4, sizeof(uint8), &valueToCopy);
  }
}

Hi,Holly Gu

             这两天关于notify的问题一直没弄出来,现在用的是Nodic 的芯片作为从机,2541作为Central,改了一些代码后,可以识别UUID(128bit)并向从机发送数据,但是从机发送的Notification Central一直收不到,用安卓的nRF Master 打开notify enable后可以收到。用Btool也不知道怎么打开notify enable 

            请问,Yan说的 notification cccd对应的handle如何找到,分别用BTool和Central中的代码如何操作,非常感谢!

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

网站地图

Top