BLE CPS - 具有位排序功能

问题描述 投票:0回答:1

我正在尝试为 CPS 服务(循环供电服务)编写一个 BLE 服务器。 客户端(极地手表)正确捕获功率数据,但我无法让手表捕获车轮旋转和曲柄旋转对。至少手表上没有显示速度和节奏的数据。 节奏应该定义。与使用相同服务的另一个 stagePower 传感器一起工作。

我尝试捕获控制点调用,以防这是不受支持的根本原因,但没有发生......

然后我想到问题可能出在功能位上。我仍然不清楚这些位应该如何发送。 像数据一样的字节小尾数?或者 LSbit -> MSbit ?

从我能找到的参考示例来看,它是按正常顺序发送的,但我怀疑情况是否如此。 我现在要发送的是:

uint8_t fBuffer[4];
fBuffer[0] = 0x00;
fBuffer[1] = 0x00;
fBuffer[2] = 0x00;
fBuffer[3] = 0x0C;
         
CyclePowerFeature.writeValue(fBuffer, 4);

为了完整起见,以下是发送的一些特征数据帧(由 nRF Connect 捕获):

30002A001500000070190800E3F9
30002A001A00000004300A0067FF
30002A001C00000053380B002A02
30002A0020000000B4480C00EC04
30002A002600000065610E00700A
30002A0028000000B4690F00320D
30002C002C00000063771000F80F
30002B002F0000005A8812005F15
30002A0033000000F89813001818
30002A003700000059A915009C1D
30002B003D0000000AC217001923
30002B003F00000059CA1800D325
30002B00420000009DD819008E28
30002A00460000001FE91B00062E

标志:0030(位 4 和 5 激活)用于激活车轮和曲柄数据对 功率输出:42-43瓦(2A00 - 2C00) 该组的计算速度(车轮尺寸:2.35m):11.9-16.4 kph 从这组计算出的踏频:87-89 RPM

轮子细节: 转数计数器:15000000 -> 46000000(即十六进制 B-endian 中的 15->46 / 即:十进制中的 21->70) 革命时间戳:7090 -> 1FE9(即十六进制 B-endian 中的 1970->E91F / 即:十进制的 6512->59679 - s 的 1/2048)

节奏详细信息: 曲柄计数器:0800 -> 1B00(即十六进制 B 字节序中的 08->1B / 即:十进制中的 8->27) 曲柄时间戳:EFF9 -> 062E(即十六进制 B-endian 中的 F9E3->2E06 / 即:十进制的 63971->11782 - s 的 1/1024)

按照逻辑,每帧的解码值对我来说看起来没问题:g

  • 计算并转换与前一帧的time_diff(对于曲柄和车轮)
  • 使用前一帧计算#revolutions(对于曲柄和车轮)
  • 计算 RPM :frame_crank_revolutions x 60 x 1000/crank_time_diff
  • 计算速度:frame_wheel_revolutions¡x 2.35 x 1000 /wheel_time_diff

尝试联系 Polar(签署了 CPS 规范...)以获取一些信息,但他们只回复“我们与 X 和 Y 传感器兼容”

bluetooth-lowenergy
1个回答
0
投票

在您的情况下,规范指示字节顺序。

根据骑行速度和踏频服务,第1章。 1.7 字节传输顺序,此服务使用的所有特性均应首先以最低有效八位字节(即小端字节序)传输。

© www.soinside.com 2019 - 2024. All rights reserved.