5621| 1
|
对 GoBLE 库蓝牙4.0透传代码的研究,有几个问题请教一下 |
本帖最后由 robingao 于 2015-7-16 18:08 编辑 最近正在按 透传协议做安卓上的蓝牙4.0 开发,研究了一下这个协议。 本身并不复杂,只是在分析GoBLE 库代码 GoBLE.cpp 的时候产生了一些疑问。想请搞过这个的同好们讨论一下。 之前请教过 DF的技术支持-Cain,解答了疑惑还提供了不少帮助。非常感谢! 以下是我研究之后的一些理解和新问题: 1、“命 令:n字节(数字和模拟按键值)”按这个例子: "55 AA 11 01 08 04 00 00 00 5E 7B" 开头的三个字节 “55 AA 11” 为帧头和识别码,固定占3个字节。接下来的 “01”固定占一个字节,其值 是多少就表示有几个数值键按下,后面就有几个字节分别表示对应的键值。“08” 固定占一个字节表示模拟键,而且倒数第二到第五字节对应四个模拟键值 共4个字节也是固定的。最后一个字节 “7B”是校验和也是固定占一个字节。这样一共有 3 + 1 + 1 + 4 + 1 = 10 个字节是固定的,也就是说整个包里至少占10 个字节。 rDataPack.commandLength = DEFAULTPACKLENGTH + inputByte; 这一句是在常量 DEFAULTPACKLENGTH 也就是 10 的基础上加上数值键个数得出最终包的长度。并赋值给rDataPack.commandLength。 问题是 这段代码 “ if (bleQueue.count() == PACKBUTTONSIGN) {” 的常量 PACKBUTTONSIGN 为 4,表示读入 4个字节的帧头后,再读入“01” 这个数值键的长度。 难道 “AA” 占用两个字节而不是一个字节?!如果是这样的话常量 DEFAULTPACKLENGTH 应该是 11 而不是 10。一个字节完全可以表示 “AA”的话,就没必要用 4 个字节表示 “55 AA 11”。 2、倒数第二到第五字节表示的 4 个字节模拟键值,但在 GoBLE .cpp (接收端代码)中几乎忽略这个位值,只是简单地读取头两个字节作为 X和 Y 方向的模拟值。 void _GoBLE::updateJoystickVal(){ _joystickX = rDataPack.joystickPayload[0]; _joystickY = rDataPack.joystickPayload[1]; } 所以,可否理解为第五个字节 “08”并没有起实际作用? 3、按 GoBLE 在 iPhone上的说明, 当摇杆处于倾斜方向,也就是 X 和 Y 轴都有动作时,则输出 0x03,算法是 0x01 和 0x02 按位或运算。 问题是输出的 0x03放在什么位置? 如果四个模拟键中的上键和右键被同时触发,那应该输出什么值? 假设问题 2 所述成立, joystickPayload[0] 和 joystickPayload[1] 两个值是否是按位或运算出来的? 4、哪位用过 iPhone 版的 GoBLE 是否可以给出具体数据,需要将GoBLE 库代码 GoBLE.h 中的 DEBUGDATARECEIVER 对应值改为 true 后重新编译上传到 Arduino 板。 比如在按数值键和模拟摇杆键的同时,请特别注明模拟键摇杆向哪个方向推动的,推动的 X 和 Y 轴距离大概是多少。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed