mirror of
https://github.com/jwetzell/rttrp-js.git
synced 2026-09-08 15:49:03 +00:00
rework header encode/decode
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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;
|
||||
};
|
||||
@@ -1,37 +0,0 @@
|
||||
import { RTTrPHeader } from '../models';
|
||||
|
||||
export default (header: RTTrPHeader): Uint8Array => {
|
||||
if (header.version !== 2) {
|
||||
throw new Error('Only version 2 of the RTTrP header is currently supported');
|
||||
}
|
||||
const bytes = new Uint8Array(18 + header.data.length);
|
||||
bytes.set(header.data, 18);
|
||||
|
||||
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
||||
let dataOffset = 0;
|
||||
|
||||
let isLittleEndian = false;
|
||||
view.setUint16(dataOffset, header.intHeader, isLittleEndian);
|
||||
dataOffset += 2;
|
||||
view.setUint16(dataOffset, header.fltHeader, isLittleEndian);
|
||||
dataOffset += 2;
|
||||
if (header.intHeader === 0x4154) {
|
||||
isLittleEndian = false;
|
||||
}
|
||||
view.setUint16(dataOffset, header.version, isLittleEndian);
|
||||
dataOffset += 2;
|
||||
|
||||
view.setUint32(dataOffset, header.pID, isLittleEndian);
|
||||
dataOffset += 4;
|
||||
|
||||
view.setUint8(dataOffset, header.pForm);
|
||||
dataOffset += 1;
|
||||
view.setUint16(dataOffset, header.pktSize, isLittleEndian);
|
||||
dataOffset += 2;
|
||||
view.setUint32(dataOffset, header.context, isLittleEndian);
|
||||
dataOffset += 4;
|
||||
view.setUint8(dataOffset, header.numMods);
|
||||
dataOffset += 1;
|
||||
|
||||
return bytes;
|
||||
};
|
||||
Reference in New Issue
Block a user