simpleBLEPeripheral例程,使用自己写的上位机,从机向主机发数据不成功。求助我应该改哪里。
大家过年好,对于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的情况?
我怕没说明白。。。再发一句。
现在问题就出现在这个Notifications身上。所以,请问勾选Notifications这一操作到底干了什么?我不知道我现在应该去改上位机还是改下位机。
这个自己写的上位机在以前使用成品蓝牙模块时是可以用的。而现在却用不了,所以感觉是下位机simpleBLEPeripheral代码的问题。
使用相同的下位机代码,用TI的上位机可以实现双向通信,而使用自己写的上位机就不能收数据,这样又感觉是上位机的问题。
这相互矛盾啊,我到底哪里理解有问题?
xiao lang,
如果你直接用的是BLE stack中自带的SimplePeripheral例程的话,是可以直接使用的。你可以配合IOS lightblue支持测试看看。要使用Notification的话,需要先在central端 enable notification. 然后从端才能成功notify数据到central端。
按照你的问题描述,怀疑你的上位机软件没有成功enable notify.你可以分别抓包对比看看。
谢谢,搞定了。不过请帮忙看一下我的想法对不对呗?
在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为什么会有这种差异呢?