Files
rttrp-js/src/encoders/rttrp-header.ts
T
2025-03-15 08:24:03 -05:00

46 lines
1.2 KiB
TypeScript

const HEADER_SIZE = 18;
export default (
floatSignature: number,
version: number,
packetID: number,
packetFormat: number,
context: number,
subModules: Uint8Array[],
isLittleEndian: boolean = false
): Uint8Array => {
if (version !== 2) {
throw new Error('Only version 2 of the RTTrP header is currently supported');
}
const bytes = new Uint8Array(HEADER_SIZE);
let totalPacketSize = bytes.byteLength;
subModules.forEach((subModule) => {
totalPacketSize += subModule.length;
});
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
let dataOffset = 0;
view.setUint16(dataOffset, 0x4154, isLittleEndian);
dataOffset += 2;
view.setUint16(dataOffset, floatSignature, isLittleEndian);
dataOffset += 2;
view.setUint16(dataOffset, version);
dataOffset += 2;
view.setUint32(dataOffset, packetID, isLittleEndian);
dataOffset += 4;
view.setUint8(dataOffset, packetFormat);
dataOffset += 1;
view.setUint16(dataOffset, totalPacketSize, isLittleEndian);
dataOffset += 2;
view.setUint32(dataOffset, context, isLittleEndian);
dataOffset += 4;
view.setUint8(dataOffset, subModules.length);
dataOffset += 1;
return bytes;
};