Cleaned up the frame.ts by splitting payload parsing to subpackages
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Dissected, FieldType } from "@hamradio/packet";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { Address, Frame, Timestamp } from "../src/frame";
|
||||
import { Address, Frame } from "../src/frame";
|
||||
import {
|
||||
DataType,
|
||||
type ITimestamp,
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
type PositionPayload,
|
||||
type StatusPayload
|
||||
} from "../src/frame.types";
|
||||
import Timestamp from "../src/timestamp";
|
||||
|
||||
// Address parsing: split by method
|
||||
describe("Address.parse", () => {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { describe, expect, it } from "vitest";
|
||||
import { Frame } from "../src/frame";
|
||||
import type { PositionPayload } from "../src/frame.types";
|
||||
import { feetToMeters, milesToMeters } from "../src/parser";
|
||||
import { decodeTelemetry } from "../src/payload.extras";
|
||||
|
||||
describe("APRS extras test vectors", () => {
|
||||
it("parses altitude token in the beginning of a comment and emits structure", () => {
|
||||
@@ -175,3 +176,49 @@ describe("APRS extras test vectors", () => {
|
||||
expect(commentIndex).toBeGreaterThan(altitudeIndex); // Comment comes after altitude
|
||||
});
|
||||
});
|
||||
|
||||
describe("decodeTelemetry", () => {
|
||||
it("decodes minimal telemetry (|!!!!|)", () => {
|
||||
const result = decodeTelemetry("!!!!");
|
||||
expect(result.sequence).toBe(0);
|
||||
expect(result.analog).toEqual([0]);
|
||||
expect(result.digital).toBeUndefined();
|
||||
});
|
||||
|
||||
it("decodes sequence and one channel", () => {
|
||||
const result = decodeTelemetry("ss11");
|
||||
expect(result.sequence).toBe(7544);
|
||||
expect(result.analog).toEqual([1472]);
|
||||
expect(result.digital).toBeUndefined();
|
||||
});
|
||||
|
||||
it("decodes sequence and two channels", () => {
|
||||
const result = decodeTelemetry("ss1122");
|
||||
expect(result.sequence).toBe(7544);
|
||||
expect(result.analog).toEqual([1472, 1564]);
|
||||
expect(result.digital).toBeUndefined();
|
||||
});
|
||||
|
||||
it("decodes sequence and five channels", () => {
|
||||
const result = decodeTelemetry("ss1122334455");
|
||||
expect(result.sequence).toBe(7544);
|
||||
expect(result.analog).toEqual([1472, 1564, 1656, 1748, 1840]);
|
||||
expect(result.digital).toBeUndefined();
|
||||
});
|
||||
|
||||
it("decodes sequence, five channels, and digital", () => {
|
||||
const result = decodeTelemetry('ss1122334455!"');
|
||||
expect(result.sequence).toBe(7544);
|
||||
expect(result.analog).toEqual([1472, 1564, 1656, 1748, 1840]);
|
||||
expect(result.digital).toBe(1);
|
||||
});
|
||||
|
||||
it("throws on too short input", () => {
|
||||
expect(() => decodeTelemetry("!")).toThrow();
|
||||
expect(() => decodeTelemetry("")).toThrow();
|
||||
});
|
||||
|
||||
it("throws on invalid base91", () => {
|
||||
expect(() => decodeTelemetry("ss11~~")).toThrow();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user