当手机和从机连接后,lightblue选择“characteristic 1”,就会自动读到特征值1的初始值0x01,然后我点“write new value”,写入任意一个字节参数如0x05,“read again”不用点,就自动收到0x05,请问:
1)为什么手机写什么,就会自动收到什么,read again收到的值和从机的程序到底有没有关系,这个read again是不是对应协议栈中的GATT_ReadCharValue函数呢
2)从机发送数据给手机(或者主机)的流程是什么呢?是从机调用GATT_Notification发送数据后,主机执行GATT_ReadCharValue吗;还是主机先执行GATT_ReadCharValue,从机再调用GATT_Notification发送数据
期待各位的回答,谢谢
shen renren:
1. 写char1调用的函数是GATT_WriteCharValue,然后写进去后,根据BLE会返回写成功的数据发送给主机,主机收到之后就会更改这个显示。所以不用read again,read again是重读而已。
2.对于char 1 来说主机主动发起,写数据用的是GATT_WriteCharValue函数,读数据用的是GATT_ReadCharValue,从机收到之后会响应,返回值给主机。没有用到GATT_Notification来发送数据。
Chunsheng Wang:
回复 shen renren:
谢谢你的回答,不过我还是不太理解
1)我把断点设置在simpleProfileChangeCB, case SIMPLEPROFILE_CHAR1 中,这样对char1写值时,就运行到断点处,手机read again没有收到;那么请问从机是在哪里将写入的值返回给主机的呢
2)从机调用GATT_Notification发送数据后,lightblue打开listen for notifications就能收到数据,那么这个“listen for notifications”和主机的读有关系么
谢谢您的答复