随着穿戴设备的普及,运动数据的采集变的更加便捷,越来越多的运动健康类App步入人们的视野。对于日常运动数据的跟踪记录,成为形形色色运动类App的核心功能。
华为运动健康服务提供的南向服务-设备接入服务,可以帮助开发者实现运动数据的写入。开发者在开发过程中,需要在App中对设备回传的数据进行字段解析,还原成对应的参数,在App的用户界面进行展示。
那么运动设备返回的数据该如何解析呢?
首先我们要了解,华为运动健康提供的设备接入服务,是基于标准FTMS协议进行数据传输的,所谓FTMS - 健身器材服务是标准蓝牙协议针对运动健身中的训练数据传输做出的单独定义
从协议文档中我们可以了解到,标准的FMTS协议已经定义了运动状态(热身,低强度,高强度等),健身器材状态(开启,停滞等),以及支持的健身器材类型(跑步机,交叉训练器,阶梯攀登者,爬楼梯者,划艇者,室内自行车)
对于不同健身器材类型的支持情况,可以参考FTMS协议第三章
对于特定健身器材支持的具体参数,可以参考FTMS协议第四章
需要注意的是,在FTMS协议中,我们已经对字节顺序已经做了约定,FTMS协议中均采用小端序(little endian),即高的地址位存储的是低字节位数据。具体描述可以参考FTMS协议3.2章节
FMTS协议文档链接如下:
https://www.bluetooth.com/specifications/specs/fitness-machine-service-1-0/
好了,具备了上述基础,我们来举个例子
以划船机为例(Rower Data),我们收到划船机发来的一串数据,他代表什么含义呢
7e19002700d69c0000000061000000e4000d0000000024000000
我们先看下协议中的数据格式,数据可以分为两大段,第一段是Flags,第二段是参数
Flags字段解析
依据上图,我们看到数据是以2字节(16比特位)的Flags开头的,即7E19,这个16进制的表示转换成二进制,即为0111 1110 0001 1001
但是不要忘了,FTMS是小端序,即左边8位存储的其实是低比特位的数据,所以实际上的读取顺序应该是
依据文档,我们可以发现,这个Flags标识这段数据上报了以下字段的内容(需要参考FTMS协议中描述的字段含义)
比特位 |
定义 |
数据 |
意义 |
0 |
More Data |
0 |
已上报,需解析 |
1 |
Average Stroke </ |