2017-09-01 7 views
1

私はブルートゥースを学んでいます、具体的にはどのように実装するのですかGATT characteristic specs私は周辺機器ドライバを書くことができます。ほとんどの仕様では、整数データ型を使用して小数点の値を保持するように見えます(データが小数点の場合)。BLE GATT:なぜ整数型に10進数を格納するのですか?

たとえば、Cycling Power Measurement specの仕様では、Pedal Power Balanceuint8に格納されます。ご覧のとおり、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を出力し実行します。

質問:

  1. GATTは空気の上にスペースを節約するために、この "パッキング" 技術を使用していますか?
  2. これは正しく行われていますか?
  3. NodeJSには、このデータのパッキングとアンパッキングを処理するライブラリがありますか?非常に一般的なシナリオのようです。私はNPMを検索しましたが、このコンセプトが何であるかはわかりません。

答えて

1

これらのようなスケーリングされた整数は、小さな組み込みデバイスでの実装を簡略化するために使用されます。

コストと消費電力の理由から、使用されるマイクロコントローラにはFPU(浮動小数点計算のハードウェアサポート)がないことがよくあります。 FPUを持たないものでは、ソフトウェア浮動小数点ライブラリを使用することは可能ですが、これらは遅く(したがって消費するため)、コードスペースを占有します。浮動小数点数に4バイトを使用すると、FPUを持つマイクロコントローラでも消費電力が増加し、スケーリングされた整数バージョンの場合は1バイトに比べてRAM使用量が増加します(別の希少リソース)。

これらの理由から、小数量が必要な場合は、スケーリングされた整数を使用することが組み込み世界で一般的です。

GATT特性の場合、通常、特性の値を20バイト以下にする必要があるため、より小さなデータ型を使用することも望ましいです。これは、単一のLink Layerパケットに含めることができる最も長いATTパケットであるため、ATT MTUは通常23バイト(ATTは3バイトのオーバーヘッド)に設定されているためです(Bluetooth 4.2のData Length Extensionが実装された)。

関連する問題