UNPKG

ojousima.ruuvi_endpoints.ts

Version:
69 lines (60 loc) 1.52 kB
import { FFTBroadcast } from './fftbroadcast'; const versionStart = 1; const versionEnd = versionStart + 1; const typeStart = versionEnd; const typeEnd = typeStart + 1; const scaleStart = typeEnd; const scaleEnd = scaleStart + 2; const frequencyStart = scaleEnd; const frequencyEnd = frequencyStart + 2; const bucketStart = frequencyEnd; const bucketEnd = bucketStart + 16; const bytestou16 = (data: Uint8Array): number => { const n = data[0] * 256 + data[1]; return n; }; const fixed88ToFload = (data: Uint8Array): number => { const value: number = bytestou16(data); return value / 256; }; export const dfafparser = (data: Uint8Array): FFTBroadcast => { if (0xaf !== data[0]) { throw new Error('Not DF AC data'); } const dataFormat = 0xac; const version = data[versionStart]; let type: string = 'unknown'; switch (data[typeStart]) { case 0: type = 'X'; break; case 1: type = 'Y'; break; case 2: type = 'Z'; break; default: break; } const frequency: number = bytestou16(data.slice(frequencyStart, frequencyEnd)); const scale: number = fixed88ToFload(data.slice(scaleStart, scaleEnd)); const buckets: number[] = []; for (let ii: number = 0; ii < 16; ii++) { buckets[ii] = data[bucketStart + ii] / scale; } const id = 0; const robject: FFTBroadcast = new FFTBroadcast( id, null, version, type, scale, frequency, buckets, null, null, dataFormat, ); return robject; };