大家过年好,对于simpleBLEPeripheral例程有些问题想请教。UUID4是从机向主机发送数据。在TI的上位机中,UUID4显示的是通知功能,而且需要点一下Notifications,就可以循环读到想要的数据了。
但是,在此之前我使用的是网上买的成品蓝牙模块,并使用STM32作为主控,蓝牙模块只是挂到STM32上。我们写了一个上位机,能正常读数据和发数据,当时并不知道还有Notifications这个问题。现在改用CC2640作为主控,还用以前自己写的上位机,从机向上位机发数据就不好使了。从机代码不变,再用TI的上位机并勾选Notifications,从机向上位机发数据就可以用了。说明就是这个勾选Notifications起了作用。
我现在想解决自己的上位机不能用的问题,不知道应该怎么改,是改上位机还是改下位机。
请问:
1、上位机中点的Notifications的作用是什么?和我过去使用的成品蓝牙模块有什么区别吗?
2、如果上位机不点这个Notifications,能否有其它方式代替?比如怎么改一改下位机,来实现不点Notifications就能在UUID4读到数据。
3、我如果用GATT_Notification函数替换原例程中的GATTServApp_ProcessCharCfg,是否可以解决问题1和问题2的情况?
xiao lang:
我怕没说明白。。。再发一句。现在问题就出现在这个Notifications身上。所以,请问勾选Notifications这一操作到底干了什么?我不知道我现在应该去改上位机还是改下位机。
这个自己写的上位机在以前使用成品蓝牙模块时是可以用的。而现在却用不了,所以感觉是下位机simpleBLEPeripheral代码的问题。使用相同的下位机代码,用TI的上位机可以实现双向通信,而使用自己写的上位机就不能收数据,这样又感觉是上位机的问题。这相互矛盾啊,我到底哪里理解有问题?
xiao lang:
回复 Lina Lian:
谢谢,搞定了。不过请帮忙看一下我的想法对不对呗?
在simpleProfile_WriteAttrCB函数中有这样一个条件:
case GATT_CLIENT_CHAR_CFG_UUID:
status = GATTServApp_ProcessCCCWriteReq( connHandle, pAttr, pValue, len, offset, GATT_CLIENT_CFG_NOTIFY ); break;
自己写的上位机不会满足这个case,而网上搜到的那些可以勾选Notifications的上位机就可以满足它。所以我们在上位机上加了一句话,调用一下这个UUID,就好使了,这就是您所说的成功enable notify吗?
之前用的也是我们自己写的上位机,不过和CC2541一起用时是好使的。改用CC2640后就突然多了这么个问题,不调用0x2902这个UUID就不好使。请问CC2541和CC2640为什么会有这种差异呢?
TI中文支持网


