@jbroll/nmea-simple
Version:
NMEA 0183 sentence parser and encoder
47 lines (34 loc) • 1.23 kB
text/typescript
/*
* === HDM - Heading - magnetic ===
*
* ------------------------------------------------------------------------------
* 1 2 3
* | | |
* $--HDM,x.x,M*hh<CR><LF>
* ------------------------------------------------------------------------------
*
* Field Number:
* 1. Heading degrees, magnetic
* 2. M = Magnetic
* 3. Checksum
*/
import { createNmeaChecksumFooter, encodeFixed, parseFloatSafe } from "../helpers";
import { initStubFields, PacketStub } from "./PacketStub";
export const sentenceId: "HDM" = "HDM";
export const sentenceName = "Heading - magnetic";
export interface HDMPacket extends PacketStub<typeof sentenceId> {
heading: number;
}
export function decodeSentence(stub: PacketStub, fields: string[]): HDMPacket {
return {
...initStubFields(stub, sentenceId, sentenceName),
heading: parseFloatSafe(fields[1])
};
}
export function encodePacket(packet: HDMPacket, talker: string): string {
const result = ["$" + talker + sentenceId];
result.push(encodeFixed(packet.heading, 1));
result.push("M");
const resultWithoutChecksum = result.join(",");
return resultWithoutChecksum + createNmeaChecksumFooter(resultWithoutChecksum);
}