关于主机与从机数据的发送和接收
我使用的硬件 usbdongle与miniDK 使用IAR8.1.0
//MiniDK载入simpleBLEPeripheral这个例程hex UsbDongle载入simpleBLECentral这个例程hex
问题1:我如果要从UsbDongle发送数据(如“hello!abcdefghijklmn,ok”)字符串,此时UsbDongle为Client,将字符串写进自定义特性值中,然后serve端由于特性值改变后会有个回调,再从回调函数中读取数据,这样的过程对吗?
还有什么方法能实现Client到Serve的数据传输?
问题2:当Serve要发送数据往Client 我通过往 simpleBLEPeripheral的特性值4的handle+1写入0x01来使能通知,这样当写入特性值4的时候Client会触发通知的事件,如果我所要传输的字符串为 “hello!abcdefghijklmn,ok”,那么是不是还是要自定义特性值来实现呢?还能通过什么方法来实现?
问题3:自定义特性值有没有限制传输字符串的大小还有个数,在哪个文档能看到?
问题4:例程中有个Keyfob的例程,里面有个加速度传感器的自定义特性值 accelerometer.c和accelerometer.h文件,我是不是把这两文件加到simpleBLEPeripheral中,并添加相应的服务,那么我就能通过通知的方式来把xyz加速度的值传给UsbDongle了?
问题5:通过通知发送的数据是否都存储在下面的pMsg中?有没有相应的文档能参考参考?
static void simpleBLECentralProcessGATTMsg( gattMsgEvent_t *pMsg )
{
if ( simpleBLEState != BLE_STATE_CONNECTED )
{
// In case a GATT message came after a connection has dropped,
// ignore the message
return;
}
if(pMsg->method == ATT_HANDLE_VALUE_NOTI)
{
}
}
谢谢查看与回答!
史蒂文,
问题1,没错,有个回调函数处理接收到的数据。在你的simpleBLEPeripheral工程中,SimpleGATTProfile.c中,查找 simpleProfile_WriteAttrCB(), 就是这个回调函数。
write 是 唯一的从client 到 server的数据传输方式。 所有的从client 到 server 都是以不同的write 方式来实现。
问题2,没错,server 到 client, 最常用的方法是notification, 但是必须得从client端来使能先。你可以通过再自定义一个特征值来实现,也可以修改已经存在的特征值,把特征值的值,从一个字节修改成一个数组,然后再修改相应的代码就能实现。注意哦, notification 的最大长度是20个字节,协议栈规定的哦。
问题3, 20个字节,如上所述。
问题4,可以,你可以这么做,只要在keyfob硬件上面运行。
问题5,是的,你找对地方了。特别是 ATT_HANDLE_VALUE_NOTI。 关于开发文档,你可以看你安装的协议栈里面的documents目录,里面有。
steven wang,您好
请参考我写的入门指导贴,希望对您有帮助
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/61462.aspx