diff --git a/src/frame.ts b/src/frame.ts index fc96f89..636d06c 100644 --- a/src/frame.ts +++ b/src/frame.ts @@ -931,7 +931,11 @@ export class Frame implements IFrame { } // remove PHG token from ext and advance ext for further parsing - commentOffset += 7; + if (commentBefore !== undefined && commentBefore.length > 0) { + commentBefore = commentBefore.substring(7); + } else { + commentOffset += 7; + } ext = ext.substring(7).trimStart(); continue; @@ -1015,7 +1019,11 @@ export class Frame implements IFrame { } // remove DFS token from ext and advance ext for further parsing - commentOffset += 7; + if (commentBefore !== undefined && commentBefore.length > 0) { + commentBefore = commentBefore.substring(7); + } else { + commentOffset += 7; + } ext = ext.substring(7).trimStart(); continue; @@ -1062,7 +1070,11 @@ export class Frame implements IFrame { } // remove DF token from ext and advance ext for further parsing - commentOffset += 8; + if (commentBefore !== undefined && commentBefore.length > 0) { + commentBefore = commentBefore.substring(8); + } else { + commentOffset += 8; + } ext = ext.substring(8).trimStart(); continue; @@ -1081,7 +1093,7 @@ export class Frame implements IFrame { } else if (commentBefore !== undefined && commentBefore.length > 0) { extras.comment = commentBefore + comment; } else { - extras.comment = comment; + extras.comment = comment.substring(commentOffset); } if (withStructure) { diff --git a/test/frame.extras.test.ts b/test/frame.extras.test.ts index cca565a..49badff 100644 --- a/test/frame.extras.test.ts +++ b/test/frame.extras.test.ts @@ -47,6 +47,7 @@ describe("APRS extras test vectors", () => { expect(payload!.position.phg!.power).toBe(25); expect(payload!.position.phg!.height).toBeCloseTo(3.048, 3); expect(payload!.position.phg!.gain).toBe(0); + expect(payload!.position!.comment).toBe("73 de NOCALL"); }); it("parses PHG token with hyphen separators (spec vector 2)", () => { @@ -55,6 +56,8 @@ describe("APRS extras test vectors", () => { const res = frame.decode(true) as { payload: PositionPayload | null; structure: Dissected }; const { payload, structure } = res; + // console.log(structure[structure.length - 1]); // Log the last segment for debugging + expect(payload).not.toBeNull(); // Use a spec PHG example: PHG0210 -> p=0 -> power 0 W, h=2 -> 40 ft expect(payload!.position.phg).toBeDefined();