我正在反转跑步机使用的协议,尝试制作一个不那么糟糕的应用程序。
我想我已经从一些数据包捕获中得出了协议的要点:
UUID:
2AD9
(健身机控制点)
ATT 操作码:
0x012
(写请求)
操作 | 价值 |
---|---|
开始 |
|
停止 |
|
设定速度 |
|
XX XX
是速度,单位为 100 x kmh
UUID:
2ACD
(跑步机数据)
ATT 操作码:
0x1b
(收到句柄值通知)
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
开始 | 速度 | 米 | 卡路里 | ? | ? | 秒 | 步骤 | 结束 |
当我那天晚上通过 nRF Connect 向它发送请求时,这个 正在工作。这实际上就是我获取 UUID 的方式,我只是向每个端点发送 0 字节垃圾邮件,直到跑步机启动。然而,现在情况并非如此,我也不完全确定为什么。
因此,回顾一下数据包捕获,我会在应用程序连接后立即看到此写入序列,然后再执行任何操作:
所以,我认为这是我所缺少的某种设置/握手,并且当我那天晚上弄乱它时,它一定仍然存在于跑步机上。
现在,我正在使用 这个 MAUI lib 连接到跑步机并读取其特性。
不幸的是,它只是为我提供了每个特征的 UUID,我无法弄清楚如何将其绑定到数据包捕获中的句柄,以便我可以尝试重播握手并看看这是否是我的问题。
有没有办法做到这一点,或者我是否必须逐步检查每个特征,发送请求,然后捕获它并尝试手动将两者映射在一起?
FWIW,这些句柄在捕获之间似乎是一致的。
我的理解是,这在用户空间中根本不可能,并且需要在较低级别与蓝牙控制器进行交互。
为了解决这个问题,我最终在笔记本电脑上执行了以下操作:
这可能比我最初的想法更容易,即以编程方式将它们全部击中,然后尝试从完整的日志中将它们配对,但它仍然不理想。