私はブルートゥースを学んでいます、具体的にはどのように実装するのですかGATT characteristic specs私は周辺機器ドライバを書くことができます。ほとんどの仕様では、整数データ型を使用して小数点の値を保持するように見えます(データが小数点の場合)。BLE GATT:なぜ整数型に10進数を格納するのですか?
たとえば、Cycling Power Measurement specの仕様では、Pedal Power Balance
がuint8
に格納されます。ご覧のとおり、Pedal Power Balance
の値は小数点以下1桁の解像度(例:10.1
)です。 GATT format types specには、小数点以下の型の型がたくさんあります(float32
など)。
なぜGATTは、小数点以下の数字を保持するために設計されたデータ型を使用していないのですか?私の推測では、BLEを介して送信されるデータのサイズを制限することです。あれは正しいですか?
私はすぐにいくつかの技術を証明するためにNodeJsコードを書いています。私の仮説では、ここでは、1桁の精度の10進数を符号付き8ビット整数に「パックする」と推測しています。私は(そう署名int型を使用して+/-ことができる)、ここで加速を使用しています:
'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を検索しましたが、このコンセプトが何であるかはわかりません。