utils.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.convertHeaderBufferToObj = exports.HEADER_LENGTH = void 0;
  4. exports.HEADER_LENGTH = 6;
  5. /**
  6. * For numbers less than 255, will ensure that their string representation is at least 8 characters long.
  7. */
  8. const toOctetStr = (num) => {
  9. let str = Number(num).toString(2);
  10. while (str.length < 8) {
  11. str = `0${str}`;
  12. }
  13. return str;
  14. };
  15. /**
  16. * Converts a Buffer of any length to an Object representation of a Space Packet header, provided
  17. * the received data is in the correct format.
  18. * @param buf - The buffer containing the Space Packet Header Data
  19. */
  20. const convertHeaderBufferToObj = (buf) => {
  21. const headerStr = Array.from(buf.slice(0, exports.HEADER_LENGTH)).reduce((accum, curr) => `${accum}${toOctetStr(curr)}`, '');
  22. const isVersion1 = headerStr.slice(0, 3) === '000';
  23. const versionNumber = isVersion1 ? 1 : 'UNKNOWN_VERSION';
  24. const type = Number(headerStr[3]);
  25. const secondaryHeader = Number(headerStr[4]);
  26. const apid = parseInt(headerStr.slice(5, 16), 2);
  27. const sequenceFlags = parseInt(headerStr.slice(16, 18), 2);
  28. const packetName = parseInt(headerStr.slice(18, 32), 2);
  29. const dataLength = parseInt(headerStr.slice(-16), 2) + 1;
  30. return {
  31. versionNumber,
  32. identification: {
  33. apid,
  34. secondaryHeader,
  35. type,
  36. },
  37. sequenceControl: {
  38. packetName,
  39. sequenceFlags,
  40. },
  41. dataLength,
  42. };
  43. };
  44. exports.convertHeaderBufferToObj = convertHeaderBufferToObj;