@jawji/mavlink-ts
v0.1.0
Published
TypeScript MAVLink protocol library - message encode/decode generated from MAVLink's common.xml dialect
Maintainers
Readme
@jawji/mavlink-ts
A TypeScript MAVLink protocol library: message encode/decode for the full common.xml dialect, generated directly from MAVLink's own definitions. Pure TypeScript, no native dependencies, works in Node and the browser.
What this is
- A generated message registry covering the
common.xmldialect: every message's field layout,CRC_EXTRA, and typedserialize/deserializefunctions. - A streaming frame parser (
MAVLinkParser) that buffers incoming bytes and emits complete, CRC-verified MAVLink v1/v2 frames. - Serializers for building outgoing frames (
serializeV1,serializeV2,serializeMessage). - MAVLink 2 packet signing support.
Install
npm install @jawji/mavlink-tsUsage
Parsing an incoming byte stream
feed() buffers incoming bytes and queues complete, CRC-verified packets; pull them with parseNext() (or use the parse() async generator instead of feed/parseNext):
import { createParser, getMessageInfo } from '@jawji/mavlink-ts';
const parser = createParser();
socket.on('data', (chunk) => {
parser.feed(chunk);
let packet;
while ((packet = parser.parseNext()) !== null) {
const info = getMessageInfo(packet.msgid);
if (!info) continue;
const decoded = info.deserialize(packet.payload);
console.log(info.name, packet.sysid, packet.compid, decoded);
}
});Decoding a single message by id
import { getMessageInfo } from '@jawji/mavlink-ts/registry';
const info = getMessageInfo(0); // HEARTBEAT
const heartbeat = info?.deserialize(payloadBytes);Building an outgoing frame
import { serializeMessage, getMessageInfoByName } from '@jawji/mavlink-ts';
const info = getMessageInfoByName('PARAM_REQUEST_LIST');
const frame = serializeMessage(info!, { targetSystem: 1, targetComponent: 1 }, {
sysid: 255,
compid: 190,
});Package layout
@jawji/mavlink-ts— core parser/serializer plus the full generated message registry.@jawji/mavlink-ts/registry— just the generated message registry (getMessageInfo,getMessageInfoByName,getAllMessageInfos), for consumers that only need decode and want to avoid pulling in signing/serialization code that touchesnode:crypto.
Development
npm install
npm run build
npm testLicense
MIT — see LICENSE.
