From 7b966bc25cc449eef0878e36bb1cc1c5c19e798c Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:32:50 -0500 Subject: [PATCH] add encoder for centroid position sub module --- src/encoders/index.ts | 2 ++ src/encoders/motion/centroid-position.ts | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/encoders/motion/centroid-position.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index b9f358a..b3164a0 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -1,3 +1,4 @@ +import CentroidPosition from './motion/centroid-position'; import RTTrPM from './motion/rttrpm'; import Trackable from './motion/trackable'; import RTTrPHeader from './rttrp-header'; @@ -6,4 +7,5 @@ export const Encoders = { RTTrPHeader, RTTrPM, Trackable, + CentroidPosition, }; diff --git a/src/encoders/motion/centroid-position.ts b/src/encoders/motion/centroid-position.ts new file mode 100644 index 0000000..da271ef --- /dev/null +++ b/src/encoders/motion/centroid-position.ts @@ -0,0 +1,18 @@ +export default (latency: number, x: number, y: number, z: number, isLittleEndian: boolean = false): Uint8Array => { + const bytes = new Uint8Array(29); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, 0x02); + dataOffset += 1; + view.setUint16(dataOffset, bytes.byteLength, isLittleEndian); + dataOffset += 2; + view.setUint16(dataOffset, latency, isLittleEndian); + dataOffset += 2; + view.setFloat64(dataOffset, x, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, y, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, z, isLittleEndian); + return bytes; +};