From b3c330640b3f3adf29d2c7635e055a8e3173ffc1 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:31:17 -0500 Subject: [PATCH 01/16] add rttrpm encoder --- src/encoders/index.ts | 4 +++- src/encoders/motion/rttrpm.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/encoders/motion/rttrpm.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index 15fcaa5..1fd0c55 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -1,5 +1,7 @@ -import RTTrPHeader from './rttrp'; +import RTTrPM from './motion/rttrpm'; +import RTTrPHeader from './rttrp-header'; export const Encoders = { RTTrPHeader, + RTTrPM, }; diff --git a/src/encoders/motion/rttrpm.ts b/src/encoders/motion/rttrpm.ts new file mode 100644 index 0000000..ce9e5f3 --- /dev/null +++ b/src/encoders/motion/rttrpm.ts @@ -0,0 +1,30 @@ +import RTTrPHeader from '../rttrp-header'; + +export default ( + packetId: number, + context: number, + trackables: Uint8Array[], + isLittleEndian: boolean = false +): Uint8Array => { + let totalPacketSize = 18; //header size + + trackables.forEach((trackable) => { + totalPacketSize += trackable.length; + }); + console.log(totalPacketSize); + const bytes = new Uint8Array(totalPacketSize); + + let dataOffset = 0; + + const headerBytes = RTTrPHeader(0x4334, 0x02, packetId, 0x00, context, trackables, isLittleEndian); + console.log(headerBytes.length); + + bytes.set(headerBytes, dataOffset); + dataOffset += headerBytes.length; + trackables.forEach((trackable) => { + console.log('dataOffset', dataOffset); + bytes.set(trackable, dataOffset); + dataOffset += trackable.length; + }); + return bytes; +}; From 07f46432c619e76ccb32aa182851589fa0e89370 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:32:19 -0500 Subject: [PATCH 02/16] add encoder for trackable sub module --- src/encoders/index.ts | 2 ++ src/encoders/motion/trackable.ts | 47 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/encoders/motion/trackable.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index 1fd0c55..b9f358a 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -1,7 +1,9 @@ import RTTrPM from './motion/rttrpm'; +import Trackable from './motion/trackable'; import RTTrPHeader from './rttrp-header'; export const Encoders = { RTTrPHeader, RTTrPM, + Trackable, }; diff --git a/src/encoders/motion/trackable.ts b/src/encoders/motion/trackable.ts new file mode 100644 index 0000000..3349ae6 --- /dev/null +++ b/src/encoders/motion/trackable.ts @@ -0,0 +1,47 @@ +const textEncoder = new TextEncoder(); + +export default ( + name: string, + subModules: Uint8Array[], + timestamp?: number, + isLittleEndian: boolean = false +): Uint8Array => { + let totalTrackableSize = 1 + 2 + 1 + name.length + 1; + let type = 0x01; + if (timestamp !== undefined) { + totalTrackableSize += 4; + type = 0x51; + } + subModules.forEach((subModule) => { + totalTrackableSize += subModule.length; + }); + const bytes = new Uint8Array(totalTrackableSize); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, type); + dataOffset += 1; + view.setUint16(dataOffset, totalTrackableSize, isLittleEndian); + dataOffset += 2; + const nameBytes = textEncoder.encode(name); + view.setUint8(dataOffset, nameBytes.length); + dataOffset += 1; + + nameBytes.forEach((byte) => { + view.setUint8(dataOffset, byte); + dataOffset += 1; + }); + + if (timestamp !== undefined) { + view.setUint32(dataOffset, timestamp, isLittleEndian); + dataOffset += 4; + } + + view.setUint8(dataOffset, subModules.length); + dataOffset += 1; + subModules.forEach((subModule) => { + bytes.set(subModule, dataOffset); + dataOffset += subModule.length; + }); + return new Uint8Array(view.buffer, view.byteOffset, view.byteLength); +}; From 7b966bc25cc449eef0878e36bb1cc1c5c19e798c Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:32:50 -0500 Subject: [PATCH 03/16] 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; +}; From b99a0224e8fe2a15783362426a1d2ca55261987f Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:33:41 -0500 Subject: [PATCH 04/16] add encoder for orientation sub modules --- src/encoders/index.ts | 4 +++ src/encoders/motion/orientation-euler.ts | 27 +++++++++++++++++++ src/encoders/motion/orientation-quaternion.ts | 27 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 src/encoders/motion/orientation-euler.ts create mode 100644 src/encoders/motion/orientation-quaternion.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index b3164a0..55be6cf 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -1,4 +1,6 @@ import CentroidPosition from './motion/centroid-position'; +import OrientationEuler from './motion/orientation-euler'; +import OrientationQuaternion from './motion/orientation-quaternion'; import RTTrPM from './motion/rttrpm'; import Trackable from './motion/trackable'; import RTTrPHeader from './rttrp-header'; @@ -8,4 +10,6 @@ export const Encoders = { RTTrPM, Trackable, CentroidPosition, + OrientationQuaternion, + OrientationEuler, }; diff --git a/src/encoders/motion/orientation-euler.ts b/src/encoders/motion/orientation-euler.ts new file mode 100644 index 0000000..7890170 --- /dev/null +++ b/src/encoders/motion/orientation-euler.ts @@ -0,0 +1,27 @@ +export default ( + latency: number, + order: number, + R1: number, + R2: number, + R3: number, + isLittleEndian: boolean = false +): Uint8Array => { + const bytes = new Uint8Array(31); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, 0x04); + dataOffset += 1; + view.setUint16(dataOffset, bytes.byteLength, isLittleEndian); + dataOffset += 2; + view.setUint16(dataOffset, latency, isLittleEndian); + dataOffset += 2; + view.setUint16(dataOffset, order, isLittleEndian); + dataOffset += 2; + view.setFloat64(dataOffset, R1, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, R2, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, R3, isLittleEndian); + return bytes; +}; diff --git a/src/encoders/motion/orientation-quaternion.ts b/src/encoders/motion/orientation-quaternion.ts new file mode 100644 index 0000000..64a8206 --- /dev/null +++ b/src/encoders/motion/orientation-quaternion.ts @@ -0,0 +1,27 @@ +export default ( + latency: number, + Qx: number, + Qy: number, + Qz: number, + Qw: number, + isLittleEndian: boolean = false +): Uint8Array => { + const bytes = new Uint8Array(37); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, 0x03); + dataOffset += 1; + view.setUint16(dataOffset, bytes.byteLength, isLittleEndian); + dataOffset += 2; + view.setUint16(dataOffset, latency, isLittleEndian); + dataOffset += 2; + view.setFloat64(dataOffset, Qx, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, Qy, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, Qz, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, Qw, isLittleEndian); + return bytes; +}; From 488aa81ad6f5d654ca81a3f3458a95428b169b58 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:34:41 -0500 Subject: [PATCH 05/16] add encoder for tracked point position sub module --- src/encoders/index.ts | 2 ++ src/encoders/motion/tracked-point-position.ts | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/encoders/motion/tracked-point-position.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index 55be6cf..e174b89 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -3,6 +3,7 @@ import OrientationEuler from './motion/orientation-euler'; import OrientationQuaternion from './motion/orientation-quaternion'; import RTTrPM from './motion/rttrpm'; import Trackable from './motion/trackable'; +import TrackedPointPosition from './motion/tracked-point-position'; import RTTrPHeader from './rttrp-header'; export const Encoders = { @@ -12,4 +13,5 @@ export const Encoders = { CentroidPosition, OrientationQuaternion, OrientationEuler, + TrackedPointPosition, }; diff --git a/src/encoders/motion/tracked-point-position.ts b/src/encoders/motion/tracked-point-position.ts new file mode 100644 index 0000000..f13f2c4 --- /dev/null +++ b/src/encoders/motion/tracked-point-position.ts @@ -0,0 +1,28 @@ +export default ( + latency: number, + x: number, + y: number, + z: number, + index: number, + isLittleEndian: boolean = false +): Uint8Array => { + const bytes = new Uint8Array(30); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, 0x06); + 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); + dataOffset += 8; + view.setUint8(dataOffset, index); + + return bytes; +}; From 5ac515bf8a3feea7bb5080208e960c3b66950a7b Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:35:10 -0500 Subject: [PATCH 06/16] add encoder for accel velocity sub modules --- src/encoders/index.ts | 4 ++ .../motion/centroid-accel-velocity.ts | 43 +++++++++++++++++ .../motion/tracked-point-accel-velocity.ts | 46 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 src/encoders/motion/centroid-accel-velocity.ts create mode 100644 src/encoders/motion/tracked-point-accel-velocity.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index e174b89..bde4ce3 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -1,8 +1,10 @@ +import CentroidAccelVelocity from './motion/centroid-accel-velocity'; import CentroidPosition from './motion/centroid-position'; import OrientationEuler from './motion/orientation-euler'; import OrientationQuaternion from './motion/orientation-quaternion'; import RTTrPM from './motion/rttrpm'; import Trackable from './motion/trackable'; +import TrackedPointAccelVelocity from './motion/tracked-point-accel-velocity'; import TrackedPointPosition from './motion/tracked-point-position'; import RTTrPHeader from './rttrp-header'; @@ -14,4 +16,6 @@ export const Encoders = { OrientationQuaternion, OrientationEuler, TrackedPointPosition, + CentroidAccelVelocity, + TrackedPointAccelVelocity, }; diff --git a/src/encoders/motion/centroid-accel-velocity.ts b/src/encoders/motion/centroid-accel-velocity.ts new file mode 100644 index 0000000..c98cfa4 --- /dev/null +++ b/src/encoders/motion/centroid-accel-velocity.ts @@ -0,0 +1,43 @@ +export default ( + x: number, + y: number, + z: number, + accelX: number, + accelY: number, + accelZ: number, + velocityX: number, + velocityY: number, + velocityZ: number, + isLittleEndian: boolean = false +): Uint8Array => { + const bytes = new Uint8Array(51); + 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.setFloat64(dataOffset, x, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, y, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, z, isLittleEndian); + dataOffset += 8; + + view.setFloat32(dataOffset, accelX, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, accelY, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, accelZ, isLittleEndian); + dataOffset += 4; + + view.setFloat32(dataOffset, velocityX, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, velocityY, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, velocityZ, isLittleEndian); + + return bytes; +}; diff --git a/src/encoders/motion/tracked-point-accel-velocity.ts b/src/encoders/motion/tracked-point-accel-velocity.ts new file mode 100644 index 0000000..815c802 --- /dev/null +++ b/src/encoders/motion/tracked-point-accel-velocity.ts @@ -0,0 +1,46 @@ +export default ( + x: number, + y: number, + z: number, + accelX: number, + accelY: number, + accelZ: number, + velocityX: number, + velocityY: number, + velocityZ: number, + index: number, + isLittleEndian: boolean = false +): Uint8Array => { + const bytes = new Uint8Array(52); + 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.setFloat64(dataOffset, x, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, y, isLittleEndian); + dataOffset += 8; + view.setFloat64(dataOffset, z, isLittleEndian); + dataOffset += 8; + + view.setFloat32(dataOffset, accelX, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, accelY, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, accelZ, isLittleEndian); + dataOffset += 4; + + view.setFloat32(dataOffset, velocityX, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, velocityY, isLittleEndian); + dataOffset += 4; + view.setFloat32(dataOffset, velocityZ, isLittleEndian); + dataOffset += 4; + view.setUint8(dataOffset, index); + + return bytes; +}; From f35648659f929845dd844d0f557b4ddfc7bc059f Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:51:20 -0500 Subject: [PATCH 07/16] add encoder for zone sub modules --- src/encoders/index.ts | 4 ++++ .../motion/zone-collision-detection.ts | 23 +++++++++++++++++++ src/encoders/motion/zone-object.ts | 20 ++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/encoders/motion/zone-collision-detection.ts create mode 100644 src/encoders/motion/zone-object.ts diff --git a/src/encoders/index.ts b/src/encoders/index.ts index bde4ce3..77121f3 100644 --- a/src/encoders/index.ts +++ b/src/encoders/index.ts @@ -6,6 +6,8 @@ import RTTrPM from './motion/rttrpm'; import Trackable from './motion/trackable'; import TrackedPointAccelVelocity from './motion/tracked-point-accel-velocity'; import TrackedPointPosition from './motion/tracked-point-position'; +import ZoneCollisionDetection from './motion/zone-collision-detection'; +import ZoneObject from './motion/zone-object'; import RTTrPHeader from './rttrp-header'; export const Encoders = { @@ -18,4 +20,6 @@ export const Encoders = { TrackedPointPosition, CentroidAccelVelocity, TrackedPointAccelVelocity, + ZoneCollisionDetection, + ZoneObject, }; diff --git a/src/encoders/motion/zone-collision-detection.ts b/src/encoders/motion/zone-collision-detection.ts new file mode 100644 index 0000000..8c37ddc --- /dev/null +++ b/src/encoders/motion/zone-collision-detection.ts @@ -0,0 +1,23 @@ +export default (zoneObjectModules: Uint8Array[], isLittleEndian: boolean = false): Uint8Array => { + let totalZoneModuleSize = 1 + 2 + 1; + + zoneObjectModules.forEach((zoneObjectModule) => { + totalZoneModuleSize += zoneObjectModule.byteLength; + }); + + const bytes = new Uint8Array(totalZoneModuleSize); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, 0x22); + dataOffset += 1; + view.setUint16(dataOffset, bytes.byteLength, isLittleEndian); + dataOffset += 2; + view.setUint8(dataOffset, zoneObjectModules.length); + dataOffset += 1; + zoneObjectModules.forEach((zoneObjectModule) => { + bytes.set(zoneObjectModule, dataOffset); + dataOffset += zoneObjectModule.length; + }); + return bytes; +}; diff --git a/src/encoders/motion/zone-object.ts b/src/encoders/motion/zone-object.ts new file mode 100644 index 0000000..e9731c1 --- /dev/null +++ b/src/encoders/motion/zone-object.ts @@ -0,0 +1,20 @@ +const textEncoder = new TextEncoder(); + +export default (name: string): Uint8Array => { + const totalZoneObjectModuleSize = 1 + 1 + name.length; + const bytes = new Uint8Array(totalZoneObjectModuleSize); + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + + let dataOffset = 0; + view.setUint8(dataOffset, totalZoneObjectModuleSize); + dataOffset += 1; + view.setUint8(dataOffset, name.length); + dataOffset += 1; + + const nameBytes = textEncoder.encode(name); + nameBytes.forEach((byte) => { + view.setUint8(dataOffset, byte); + dataOffset += 1; + }); + return bytes; +}; From cd7a5f4b89822417e5b5a3a41cb160d07c46de4b Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:58:32 -0500 Subject: [PATCH 08/16] start on encode example --- example/encode.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 example/encode.js diff --git a/example/encode.js b/example/encode.js new file mode 100644 index 0000000..65495fc --- /dev/null +++ b/example/encode.js @@ -0,0 +1,18 @@ +const { Encoders } = require('../'); +const dgram = require('dgram'); + +const motionBytes = Encoders.RTTrPM(0x01, 0x12345678, [ + Encoders.Trackable('Test', [Encoders.CentroidPosition(100, 1.0, 2.0, 3.0)], undefined), +]); +console.log(motionBytes); + +const socket = dgram.createSocket('udp4'); + +socket.send(motionBytes, 3434, '127.0.0.1', (error) => { + if (error) { + console.error(error); + } + socket.close(() => { + process.exit(); + }); +}); From c1bb84695f8f990a94f624f8cec4915c83c72596 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 08:59:24 -0500 Subject: [PATCH 09/16] fix syntax error in models --- src/models.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/models.ts b/src/models.ts index 67745f7..6e65521 100644 --- a/src/models.ts +++ b/src/models.ts @@ -8,4 +8,3 @@ export type RTTrPHeader = { context: number; subModuleCount: number; }; -}; From d4f6e1c651968c843bdabda5581837b99af3eb44 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:08:17 -0500 Subject: [PATCH 10/16] fix types on velocity sub modules --- src/encoders/motion/centroid-accel-velocity.ts | 2 +- src/encoders/motion/tracked-point-accel-velocity.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/encoders/motion/centroid-accel-velocity.ts b/src/encoders/motion/centroid-accel-velocity.ts index c98cfa4..aedd91f 100644 --- a/src/encoders/motion/centroid-accel-velocity.ts +++ b/src/encoders/motion/centroid-accel-velocity.ts @@ -14,7 +14,7 @@ export default ( const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); let dataOffset = 0; - view.setUint8(dataOffset, 0x02); + view.setUint8(dataOffset, 0x20); dataOffset += 1; view.setUint16(dataOffset, bytes.byteLength, isLittleEndian); dataOffset += 2; diff --git a/src/encoders/motion/tracked-point-accel-velocity.ts b/src/encoders/motion/tracked-point-accel-velocity.ts index 815c802..c8e4e0a 100644 --- a/src/encoders/motion/tracked-point-accel-velocity.ts +++ b/src/encoders/motion/tracked-point-accel-velocity.ts @@ -15,7 +15,7 @@ export default ( const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); let dataOffset = 0; - view.setUint8(dataOffset, 0x02); + view.setUint8(dataOffset, 0x21); dataOffset += 1; view.setUint16(dataOffset, bytes.byteLength, isLittleEndian); dataOffset += 2; From 14d27dfc6274513887b1c0280a235eb48d4c3f25 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:16:28 -0500 Subject: [PATCH 11/16] cleanup logging --- src/encoders/motion/rttrpm.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/encoders/motion/rttrpm.ts b/src/encoders/motion/rttrpm.ts index ce9e5f3..6c2ab41 100644 --- a/src/encoders/motion/rttrpm.ts +++ b/src/encoders/motion/rttrpm.ts @@ -11,18 +11,15 @@ export default ( trackables.forEach((trackable) => { totalPacketSize += trackable.length; }); - console.log(totalPacketSize); const bytes = new Uint8Array(totalPacketSize); let dataOffset = 0; const headerBytes = RTTrPHeader(0x4334, 0x02, packetId, 0x00, context, trackables, isLittleEndian); - console.log(headerBytes.length); bytes.set(headerBytes, dataOffset); dataOffset += headerBytes.length; trackables.forEach((trackable) => { - console.log('dataOffset', dataOffset); bytes.set(trackable, dataOffset); dataOffset += trackable.length; }); From 1f231d426f1ea8dea0c14b3264a38d6b16b1ca25 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:17:05 -0500 Subject: [PATCH 12/16] add multiple submodules to encode example and remove sending --- example/encode.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/example/encode.js b/example/encode.js index 65495fc..f35d4df 100644 --- a/example/encode.js +++ b/example/encode.js @@ -2,17 +2,19 @@ const { Encoders } = require('../'); const dgram = require('dgram'); const motionBytes = Encoders.RTTrPM(0x01, 0x12345678, [ - Encoders.Trackable('Test', [Encoders.CentroidPosition(100, 1.0, 2.0, 3.0)], undefined), + Encoders.Trackable( + 'Test', + [ + Encoders.CentroidPosition(100, 1.0, 2.0, 3.0), + Encoders.CentroidAccelVelocity(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), + Encoders.TrackedPointPosition(100, 1.0, 2.0, 3.0, 1), + Encoders.TrackedPointAccelVelocity(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 1), + Encoders.TrackedPointPosition(100, 1.0, 2.0, 3.0, 2), + Encoders.TrackedPointAccelVelocity(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 2), + Encoders.OrientationEuler(100, 0x0123, 1, 2, 3), + Encoders.OrientationQuaternion(100, 1, 2, 3, 4), + ], + Math.floor(Date.now() / 1000) + ), ]); console.log(motionBytes); - -const socket = dgram.createSocket('udp4'); - -socket.send(motionBytes, 3434, '127.0.0.1', (error) => { - if (error) { - console.error(error); - } - socket.close(() => { - process.exit(); - }); -}); From f5352f30b6cfd2f8a8b0fe5ccdf1d38d59410a25 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:24:59 -0500 Subject: [PATCH 13/16] fix syntax error in models --- src/models.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/models.ts b/src/models.ts index 67745f7..6e65521 100644 --- a/src/models.ts +++ b/src/models.ts @@ -8,4 +8,3 @@ export type RTTrPHeader = { context: number; subModuleCount: number; }; -}; From 5523a50089f9ff3f54b878ad71c9382fd2a4355f Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:26:00 -0500 Subject: [PATCH 14/16] fix syntax error in encode tests --- tests/encode.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/encode.test.js b/tests/encode.test.js index 519c523..4d0aecf 100644 --- a/tests/encode.test.js +++ b/tests/encode.test.js @@ -12,7 +12,6 @@ const goodTests = [ return Encoders.RTTrPHeader(0x4334, 2, 0x12345678, 0, 0x12345678, [], false); }, }, - }, ]; describe('RTTrP Message Encoding', () => { From 70795b07c4ca3271264ffc3be8e4bbf06dd65f76 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:30:30 -0500 Subject: [PATCH 15/16] add encode test for little endian header --- tests/encode.test.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/encode.test.js b/tests/encode.test.js index 4d0aecf..eb03362 100644 --- a/tests/encode.test.js +++ b/tests/encode.test.js @@ -12,6 +12,15 @@ const goodTests = [ return Encoders.RTTrPHeader(0x4334, 2, 0x12345678, 0, 0x12345678, [], false); }, }, + { + description: 'RTTrP Header Little Endian', + expected: new Uint8Array([ + 0x54, 0x41, 0x34, 0x43, 0x00, 0x02, 0x78, 0x56, 0x34, 0x12, 0x00, 0x12, 0x00, 0x78, 0x56, 0x34, 0x12, 0x00, + ]), + bytes: () => { + return Encoders.RTTrPHeader(0x4334, 2, 0x12345678, 0, 0x12345678, [], true); + }, + }, ]; describe('RTTrP Message Encoding', () => { From a769cd73a5e33c30bf8fb46cbb0c10d7e29ba161 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 15 Mar 2025 09:30:52 -0500 Subject: [PATCH 16/16] add encode test for empty rttrpm packet --- tests/encode.test.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/encode.test.js b/tests/encode.test.js index eb03362..bc86b13 100644 --- a/tests/encode.test.js +++ b/tests/encode.test.js @@ -21,6 +21,15 @@ const goodTests = [ return Encoders.RTTrPHeader(0x4334, 2, 0x12345678, 0, 0x12345678, [], true); }, }, + { + description: 'Empty RTTrPM', + expected: new Uint8Array([ + 65, 84, 67, 52, 0, 2, 0, 0, 0, 1, 0, 0, 27, 18, 52, 86, 120, 1, 1, 0, 9, 4, 84, 101, 115, 116, 0, + ]), + bytes: () => { + return Encoders.RTTrPM(0x01, 0x12345678, [Encoders.Trackable('Test', [])]); + }, + }, ]; describe('RTTrP Message Encoding', () => {