UNPKG

@aircast-4g/mavlink

Version:

TypeScript type generator for MAVLink dialects

2 lines (1 loc) 2.17 kB
import{parseFrame as e}from"./frame.js";import{decodePayload as s}from"./codec.js";import{StreamBuffer as t}from"./stream-buffer.js";import{MessageRegistry as r}from"./message-registry.js";import{MessageSerializer as i}from"./message-serializer.js";class a{constructor(e){this.dialectName=e,this.streamBuffer=new t,this.registry=new r,this.serializer=new i(this.registry)}registerMessageDefinition(e,s){this.registry.register(e,s)}parseBytes(s){const t=[];if(!s||0===s.length)return t;this.streamBuffer.append(s);const r=this.streamBuffer.getContents();let i=0;for(;i<r.length;){const s=e(r.subarray(i),this.registry.getCrcExtraTable());if(s.frame){const e=this.decode(s.frame);t.push(e),i+=s.bytesConsumed}else{if(!(s.bytesConsumed>0))break;i+=s.bytesConsumed}}return this.streamBuffer.consume(i),t}decode(e){const t=this.registry.getMessageDefinition(e.message_id),r=e.protocol_version||(253===e.magic?2:1);if(!t)return{timestamp:Date.now(),system_id:e.system_id,component_id:e.component_id,message_id:e.message_id,message_name:`UNKNOWN_${e.message_id}`,sequence:e.sequence,payload:{raw_payload:Array.from(e.payload)},protocol_version:r,checksum:e.checksum,crc_ok:e.crc_ok??!0,signature:e.signature,dialect:this.dialectName};const i=s(e.payload,t.fields);return{timestamp:Date.now(),system_id:e.system_id,component_id:e.component_id,message_id:e.message_id,message_name:t.name,sequence:e.sequence,payload:i,protocol_version:r,checksum:e.checksum,crc_ok:e.crc_ok??!0,signature:e.signature,dialect:this.dialectName}}resetBuffer(){this.streamBuffer.reset()}serializeMessage(e){return this.serializer.serializeMessage(e)}completeMessage(e){return this.serializer.completeMessage(e)}getMessageDefinition(e){return this.registry.getMessageDefinition(e)}getMessageDefinitionByName(e){return this.registry.getMessageDefinitionByName(e)}supportsMessage(e){return this.registry.supportsMessage(e)}supportsMessageName(e){return this.registry.supportsMessageName(e)}getSupportedMessageIds(){return this.registry.getSupportedMessageIds()}getSupportedMessageNames(){return this.registry.getSupportedMessageNames()}getDialectName(){return this.dialectName}}export{a as DialectParser};