You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.convertHeaderBufferToObj = exports.HEADER_LENGTH = void 0;
|
|
exports.HEADER_LENGTH = 6;
|
|
/**
|
|
* For numbers less than 255, will ensure that their string representation is at least 8 characters long.
|
|
*/
|
|
const toOctetStr = (num) => {
|
|
let str = Number(num).toString(2);
|
|
while (str.length < 8) {
|
|
str = `0${str}`;
|
|
}
|
|
return str;
|
|
};
|
|
/**
|
|
* Converts a Buffer of any length to an Object representation of a Space Packet header, provided
|
|
* the received data is in the correct format.
|
|
* @param buf - The buffer containing the Space Packet Header Data
|
|
*/
|
|
const convertHeaderBufferToObj = (buf) => {
|
|
const headerStr = Array.from(buf.slice(0, exports.HEADER_LENGTH)).reduce((accum, curr) => `${accum}${toOctetStr(curr)}`, '');
|
|
const isVersion1 = headerStr.slice(0, 3) === '000';
|
|
const versionNumber = isVersion1 ? 1 : 'UNKNOWN_VERSION';
|
|
const type = Number(headerStr[3]);
|
|
const secondaryHeader = Number(headerStr[4]);
|
|
const apid = parseInt(headerStr.slice(5, 16), 2);
|
|
const sequenceFlags = parseInt(headerStr.slice(16, 18), 2);
|
|
const packetName = parseInt(headerStr.slice(18, 32), 2);
|
|
const dataLength = parseInt(headerStr.slice(-16), 2) + 1;
|
|
return {
|
|
versionNumber,
|
|
identification: {
|
|
apid,
|
|
secondaryHeader,
|
|
type,
|
|
},
|
|
sequenceControl: {
|
|
packetName,
|
|
sequenceFlags,
|
|
},
|
|
dataLength,
|
|
};
|
|
};
|
|
exports.convertHeaderBufferToObj = convertHeaderBufferToObj;
|