J'apprends le bluetooth, en particulier comment mettre en œuvre GATT characteristic specs afin que je puisse écrire des pilotes de périphériques. Dans presque toutes les spécifications, ils cherchent à utiliser des types de données entiers pour contenir des valeurs décimales (lorsque les données sont une valeur décimale). Par exemple, la spécification Cycling Power Measurement spec stocke le Pedal Power Balance
dans un uint8
. Comme vous pouvez voir la valeur Pedal Power Balance
a une résolution de 1 décimale (ex: 10.1
). Le GATT format types spec a beaucoup de types pour les nombres décimaux (float32
etc).BLE GATT: pourquoi stocker des décimales dans les types entiers?
Pourquoi le GATT n'utilise-t-il pas un type de données conçu pour contenir des nombres décimaux? Ma conjecture est de limiter la taille des données envoyées sur BLE. Est-ce exact? Je suis en train d'écrire du code NodeJs pour prouver rapidement un peu de technologie. Avec mon hypothèse, voici comment je suppose que l'on "emballe" une décimale avec un chiffre de précision dans un entier signé de 8 bits. J'utilise l'accélération ici (peut être +/- si l'aide signed 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);
L'exécution de cette sorties -9.8
comme je m'y attendais.
Questions:
- Est-GATT utiliser cette technique "emballage" pour économiser de l'espace sur l'air?
- Est-ce que je fais cela correctement?
- Est-ce que NodeJS dispose d'une bibliothèque qui gère ce conditionnement et ce déballage de données? On dirait un scénario très commun. J'ai cherché NPM mais je ne suis pas sûr de ce que ce concept est appelé.