我正在學習藍牙,具體如何實現GATT characteristic specs,所以我可以寫周邊驅動程序。在幾乎所有的規格中,他們都希望使用整數數據類型來保存十進制值(當數據是十進制值時)。BLE GATT:爲什麼要在整數類型中存儲小數?
例如,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,但我不確定這個概念被稱爲什麼。