notify问题咨询
现在看串口透传的程序,想知道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中的代码如何操作,非常感谢!