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

咨询关于GATT_Notification()的一点小问题

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

大家好,以下是我使用GATT_Notification的做法:

uint16 ConnHandle;
attHandleValueNoti_t Notify;

GAPRole_GetParameter( GAPROLE_CONNHANDLE, &ConnHandle );
Notify.handle = UartServiceAttTbl[2].handle;//特征值对应的handle
Notify.len = UartRxLen;//特征值的长度
osal_memcpy(Notify.value,UartRxData,UartRxLen);//特征值的数据 
GATT_Notification(ConnHandle,&Notify,FALSE);

我使用Andriod上位机与Keyfob通信,每次都要上位机先使能Notification之后才会收到通知的数据。

但是当我使用USBDongle与Keyfob通信时,即使未使能Notification,也能监听到Keyfob发送通知数据。如下

[74] : <Rx> - 10:53:06.421
-Type : 0x04 (Event)
-EventCode : 0xFF (HCI_LE_ExtEvent)
-Data Length : 0x1B (27) bytes(s)
Event : 0x051B (ATT_HandleValueNotification)
Status : 0x00 (Success)
ConnHandle : 0x0000 (0)
PduLen : 0x15 (21)
Handle : 0x0025 (37)
Value : 01:02:04:00:00:00:00:00:00:00:00:00:00:00:00:00:
00:00:00
Dump(Rx):
04 FF 1B 1B 05 00 00 00 15 25 00 01 02 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00

问题1:从机使用GATT_Notification发送通知时,不论主机有没有使能Notification,从机都可以发送通知,对吗?

问题2:主机使能Notification只是决定对从机发送的通知要不要处理,对吗?

问题3:如果不是的话,要怎么理解呢?求解~~~

Thanks

看来这个帖子要沉了啊...0.0

为什么....

为什么..

shaokai,

1. 不对。 做的好的逻辑的话,主机没有使能你从机的notification,从机不应该发notification出去。这是蓝牙协议栈的规定。请你检查一下你的Android代码,肯定有地方设置了按键notification的使能。TI默认的keyfob代码是不能在主机没法使能之前发送按键请求的。

2. 不对。从机要听从主机的使能安排。主机要确定从机是否能发送notification.

3. 这是逻辑问题,涉及两边的通信握手协议,数据交互的流程,保证数据通信的过程正确,主机能收到想要的数据。

Yan:

不好意思,有点让你误解了:

1. 我说的Keyfob其实不是Keyfob的工程代码,而是Keyfob开发小板,真正使用的工程代码是我在simpleBLEPeripheral基础上进行修改过的——从机不管主机有没有使能Notification,都调用GATT_Notification();

2. 按您所提议的:从机要听从主机的使能安排(主机没有使能你从机的notification,从机不应该发notification出去),这一点以后我会注意。

3. 我很想知道:

    在主机未使能从机Notification时,而从机发送Notification的情况下。

    从理论上 链路层还是会发送信号的,对吗?只是这不符合双方的握手协议,也不应该这么做!

Thanks

shaokai,

关于3, 是的!

Thanks Yan

第一个问题 不对  没有通知功能的 不会发送的

第二个问题  使能通知 是为了接收特性值啊

那第三个也就解决了啊

请不要只光看1楼的问题,留意下后面的回答撒~

你好,请问一下你在android平台上与ble连接的吞吐量达到多少啊?我的好慢啊,利用android开放的api如何操作能达到最大传输速度?谢谢

Android与BLE传输的吞吐量没有具体是测过。这个主要取决于传输间隔,不过BLE本身不太适合做大数据的传输,尤其是要求传输速度快的。

Android上我也找不到能修改参数的API,貌似是底层决定的。

Hi,Yan

在使能Notification时,已经得到char4的句柄,该句柄+1得到CCC句柄,但是写入失败,对BLE还不是很熟

Shaokai,

请教:

我使用如下代码发送UUID4的通知给手机,我的手机端为什么总是收不到UUID4的NOTICE更新值(0或1)呢?

代码如下:        

uint16 ConnHandle;        

GAPRole_GetParameter( GAPROLE_CONNHANDLE, &ConnHandle );        

attHandleValueNoti_t noti;

noti.handle = 0x2E; //特征值UUID4对应的handle0x2E,    试过地址0x2F, 0x30也不行的    

noti.len = 1;        

noti.value[0] = loginStatus; // 0 or 1

GATT_Notification( ConnHandle, &noti, FALSE );

Hi  tan,

我现在遇到了和你一样的问题,请问你解决了么?

Callon Huang,

问题搞定了,其实TI的例子里面有这个函数,如下:

”SimpleBLEPeripheral“ 项目下,

仔细看看文件"simpleBLEPeripher.c" 里面的函数

 static void performPeriodicTask( void ) {   },将读取到的UUID3的内容换成你自己定义的一个变量的值就可以了。

 

然后,Enable  "performPeriodicTask()" in SBP_PERIODIC_EVT process for UUID4 notification(Dev_resp) sending(every 5s) ,

This function is very great to this project!!!!!

APP一定要勾选UUID4页面里面那个“NOTIFICATION”复选框 。

 

祝你好运!

 

我的QQ: 2330708905

 

 

 

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

网站地图

Top