最近在调试CC2540底层,USB串口蓝牙接收基本搞定了,唯独剩下蓝牙发送还是存在些问题。
因为开发的设备做从机,因此参考了网上部分资料,对于使用第四特征值的GATT_Notification()函数也有一定的了解。
使用的官方库版本为1.4.2.2
我在从机task内的周期事件内加入这段测试代码
static void performPeriodicTask( void )
{
uint8 valueToCopy=0;
static uint8 val2[4]={0x28,0x44,0x55,0x98};
NPI_SerialAppSendNoti(val2,4);
// Call to retrieve the value of the third characteristic in the profile
stat = SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR3, &valueToCopy);
}
黄色标注的函数内调用了GATT_Notification(),函数内容如下图;
该函数通过调GATT_Notification()函数将数据发送到手机端,之后又通过串口将pReport.pValue内的数据全部发到PC,这时问题来了,手机BLE调试助手的第四特征值内开启通知模式后收到的数据和PC串口助手接收到的数据不一致,但字节数正确;PC串口助手内接收到的数据与程序内测试数组数据一致,这表明pReport.pValue指针指向的地址没有问题以及地址内存放的数据也没有问题,此时我打断点抓取pReport.pValue的地址位置如下图:
按照XData给出的地址我看了下Memory内部数据,寻找到0X1247地址位如下图,数据正确。
然后看到pReport.pValue地址指向0x0000,发现数据也没有问题。
那么我初步判断,以attHandleValueNoti_t类型定义的 pReport结构体内部的pValue指针在进入GATT_Notification之后并没有被该函数用来发送数据,因此我去查找GATT_Notification函数本体,发现该函数是外部LIB内的函数,因此该问题无法解决。
问题总结,GATT_Notification函数内貌似并没有使用结构体内规定的数据存放指针指向地址内的数据发送,恳请技术大大们帮忙看看出现问题的原因是什么,十分感谢!
祝好!
JIAXIN LIU1:
自己顶一下
z z46:
你好,我是BLE初学者,想请问下你Notification相关的问题.请问数据允许Notification时,数据若发生变化,调用GATTServApp_ProcessCharCfg函数后,BLE底层会将参数的变化通知给连接到的设备吗?
我有点区分不清Notification和Indication的用法和意义,什么时候应该打开呢?
ZANGk:
这个问题后来有解决么????
ZANGk:
回复 ZANGk:
TI 技术支持一下是怎么回事????????????????????????????????
ZANGk:
回复 JIAXIN LIU1:
新协议栈中buf是指针,需要动态申请内存,所以和1.3.2不兼容;