【发布时间】:2017-09-01 21:30:49
【问题描述】:
我正在学习蓝牙,特别是如何实现GATT characteristic specs,以便我可以编写外围驱动程序。在几乎所有规范中,它们看起来都在使用整数数据类型来保存十进制值(当数据是十进制值时)。
例如,Cycling Power Measurement spec 规范将Pedal Power Balance 存储到uint8 中。如您所见,Pedal Power Balance 值的分辨率为小数点后 1 位(例如:10.1)。 GATT format types spec 有很多小数点类型(float32 等)。
为什么 GATT 不使用旨在保存十进制数的数据类型?我的猜测是限制通过 BLE 发送的数据大小。对吗?
我正在编写 NodeJs 代码来快速证明一些技术。根据我的假设,这就是我猜测一个将一位精度的小数“打包”成有符号的 8 位整数的方式。我在这里使用加速(可以是 +/- 所以使用有符号整数):
'use strict';
const oneG = -9.806649999788;
let int8Buf = new Buffer.alloc(8); //to hold signed 8-bit integer
int8Buf.writeInt8(oneG * 10, 0);
console.log(int8Buf.readInt8(0) / 10);
按照我的预期运行此输出 -9.8。
问题:
- GATT 是否使用这种“打包”技术来节省空中空间?
- 我这样做是否正确?
- NodeJS 是否有一个库来处理这种数据打包和解包?似乎是一个非常常见的场景。我搜索过 NPM,但我不确定这个概念叫什么。
【问题讨论】:
标签: node.js bluetooth type-conversion gatt