4661浏览
查看: 4661|回复: 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 轴距离大概是多少。



Cain  初级技匠

发表于 2015-7-16 17:11:38

详细的晚点再研究哈。首先说一个大前提。GoBLE的整套协议是为了兼容之前一款实体的蓝牙手柄4.0。实体的手柄有两组4个数字按键,+2个状态按键以及两个模拟摇杆,所以需要位置判断与n个命令字节。而到了手机上只有一组4个数字按键,+2个状态按键以及一个模拟摇杆,所以会有不需要进行判断的情况
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail