@krokodilushka/mavlink-parser-browserify 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,290 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Transform, TransformCallback, Readable, Writable } from "stream";
4
+ import { uint8_t, uint16_t } from "mavlink-mappings";
5
+ import { MavLinkData, MavLinkDataConstructor } from "mavlink-mappings";
6
+ import { Logger } from "./logger";
7
+ /**
8
+ * Header definition of the MavLink packet
9
+ */
10
+ export declare class MavLinkPacketHeader {
11
+ timestamp: bigint | null;
12
+ magic: number;
13
+ payloadLength: uint8_t;
14
+ incompatibilityFlags: uint8_t;
15
+ compatibilityFlags: uint8_t;
16
+ seq: uint8_t;
17
+ sysid: uint8_t;
18
+ compid: uint8_t;
19
+ msgid: uint8_t;
20
+ }
21
+ /**
22
+ * Base class for protocols
23
+ *
24
+ * Implements common functionality like getting the CRC and deserializing
25
+ * data classes from the given payload buffer
26
+ */
27
+ export declare abstract class MavLinkProtocol {
28
+ protected readonly log: Logger;
29
+ static NAME: string;
30
+ static START_BYTE: number;
31
+ static PAYLOAD_OFFSET: number;
32
+ static CHECKSUM_LENGTH: number;
33
+ static SYS_ID: uint8_t;
34
+ static COMP_ID: uint8_t;
35
+ /**
36
+ * Serialize a message to a buffer
37
+ */
38
+ abstract serialize(message: MavLinkData, seq: uint8_t): Buffer;
39
+ /**
40
+ * Deserialize packet header
41
+ */
42
+ abstract header(buffer: Buffer, timestamp?: bigint): MavLinkPacketHeader;
43
+ /**
44
+ * Deserialize packet checksum
45
+ */
46
+ abstract crc(buffer: Buffer): uint16_t;
47
+ /**
48
+ * Extract payload buffer
49
+ *
50
+ * The returned payload buffer needs to be long enough to read all
51
+ * the fields, including extensions that are sometimes not being sent
52
+ * from the transmitting system.
53
+ */
54
+ abstract payload(buffer: Buffer): Buffer;
55
+ /**
56
+ * Deserialize payload into actual data class
57
+ */
58
+ data<T extends MavLinkData>(payload: Buffer, clazz: MavLinkDataConstructor<T>): T;
59
+ }
60
+ /**
61
+ * MavLink Protocol V1
62
+ */
63
+ export declare class MavLinkProtocolV1 extends MavLinkProtocol {
64
+ sysid: uint8_t;
65
+ compid: uint8_t;
66
+ static NAME: string;
67
+ static START_BYTE: number;
68
+ static PAYLOAD_OFFSET: number;
69
+ constructor(sysid?: uint8_t, compid?: uint8_t);
70
+ serialize(message: MavLinkData, seq: number): Buffer;
71
+ header(buffer: Buffer, timestamp?: bigint): MavLinkPacketHeader;
72
+ /**
73
+ * Deserialize packet checksum
74
+ */
75
+ crc(buffer: Buffer): uint16_t;
76
+ payload(buffer: Buffer): Buffer;
77
+ }
78
+ /**
79
+ * MavLink Protocol V2
80
+ */
81
+ export declare class MavLinkProtocolV2 extends MavLinkProtocol {
82
+ sysid: uint8_t;
83
+ compid: uint8_t;
84
+ incompatibilityFlags: uint8_t;
85
+ compatibilityFlags: uint8_t;
86
+ static NAME: string;
87
+ static START_BYTE: number;
88
+ static PAYLOAD_OFFSET: number;
89
+ static INCOMPATIBILITY_FLAGS: uint8_t;
90
+ static COMPATIBILITY_FLAGS: uint8_t;
91
+ static readonly IFLAG_SIGNED = 1;
92
+ constructor(sysid?: uint8_t, compid?: uint8_t, incompatibilityFlags?: uint8_t, compatibilityFlags?: uint8_t);
93
+ serialize(message: MavLinkData, seq: number): Buffer;
94
+ /**
95
+ * Create a signed package buffer
96
+ *
97
+ * @param buffer buffer with the original, unsigned package
98
+ * @param linkId id of the link
99
+ * @param key key to sign the package with
100
+ * @param timestamp optional timestamp for packet signing (default: Date.now())
101
+ * @returns signed package
102
+ */
103
+ sign(buffer: Buffer, linkId: number, key: Buffer, timestamp?: number): Buffer;
104
+ private calculateTruncatedPayloadLength;
105
+ header(buffer: Buffer, timestamp?: bigint): MavLinkPacketHeader;
106
+ /**
107
+ * Deserialize packet checksum
108
+ */
109
+ crc(buffer: Buffer): uint16_t;
110
+ payload(buffer: Buffer): Buffer;
111
+ signature(buffer: Buffer, header: MavLinkPacketHeader): MavLinkPacketSignature | null;
112
+ }
113
+ /**
114
+ * MavLink packet signature definition
115
+ */
116
+ export declare class MavLinkPacketSignature {
117
+ private readonly buffer;
118
+ static SIGNATURE_LENGTH: number;
119
+ /**
120
+ * Calculate key based on secret passphrase
121
+ *
122
+ * @param passphrase secret to generate the key
123
+ * @returns key as a buffer
124
+ */
125
+ static key(passphrase: string): Buffer;
126
+ constructor(buffer: Buffer);
127
+ private get offset();
128
+ /**
129
+ * Get the linkId from signature
130
+ */
131
+ get linkId(): uint8_t;
132
+ /**
133
+ * Set the linkId in signature
134
+ */
135
+ set linkId(value: uint8_t);
136
+ /**
137
+ * Get the timestamp from signature
138
+ */
139
+ get timestamp(): number;
140
+ /**
141
+ * Set the linkId in signature
142
+ */
143
+ set timestamp(value: number);
144
+ /**
145
+ * Get the signature from signature
146
+ */
147
+ get signature(): string;
148
+ /**
149
+ * Set the signature in signature
150
+ */
151
+ set signature(value: string);
152
+ /**
153
+ * Calculates signature of the packet buffer using the provided secret.
154
+ * The secret is converted to a hash using the sha256 algorithm which matches
155
+ * the way Mission Planner creates keys.
156
+ *
157
+ * @param key the secret key (Buffer)
158
+ * @returns calculated signature value
159
+ */
160
+ calculate(key: Buffer): string;
161
+ /**
162
+ * Checks the signature of the packet buffer against a given secret
163
+ * The secret is converted to a hash using the sha256 algorithm which matches
164
+ * the way Mission Planner creates keys.
165
+ *
166
+ * @param key key
167
+ * @returns true if the signature matches, false otherwise
168
+ */
169
+ matches(key: Buffer): boolean;
170
+ toString(): string;
171
+ }
172
+ /**
173
+ * MavLink packet definition
174
+ */
175
+ export declare class MavLinkPacket {
176
+ readonly buffer: Buffer;
177
+ readonly header: MavLinkPacketHeader;
178
+ readonly payload: Buffer;
179
+ readonly crc: uint16_t;
180
+ readonly protocol: MavLinkProtocol;
181
+ readonly signature: MavLinkPacketSignature | null;
182
+ constructor(buffer: Buffer, header?: MavLinkPacketHeader, payload?: Buffer, crc?: uint16_t, protocol?: MavLinkProtocol, signature?: MavLinkPacketSignature | null);
183
+ /**
184
+ * Debug information about the packet
185
+ *
186
+ * @returns string representing debug information about a packet
187
+ */
188
+ debug(): string;
189
+ private signatureToString;
190
+ }
191
+ type BufferCallback = (buffer: Buffer) => void;
192
+ /**
193
+ * A transform stream that splits the incomming data stream into chunks containing full MavLink messages
194
+ */
195
+ export declare class MavLinkPacketSplitter extends Transform {
196
+ protected readonly log: Logger;
197
+ private buffer;
198
+ private onCrcError;
199
+ private timestamp;
200
+ private _validPackagesCount;
201
+ private _unknownPackagesCount;
202
+ private _invalidPackagesCount;
203
+ /**
204
+ * @param opts options to pass on to the Transform constructor
205
+ * @param verbose print diagnostic information
206
+ * @param onCrcError callback executed if there is a CRC error (mostly for debugging)
207
+ */
208
+ constructor(opts?: {}, onCrcError?: BufferCallback);
209
+ _transform(chunk: Buffer, encoding: string, callback: TransformCallback): void;
210
+ protected findStartOfPacket(buffer: Buffer, offset?: number): number | null;
211
+ private getPacketProtocol;
212
+ private readPacketLength;
213
+ private validatePacket;
214
+ /**
215
+ * Checks if the buffer contains the entire message with signature
216
+ *
217
+ * @param buffer buffer with the message
218
+ */
219
+ private isV2Signed;
220
+ /**
221
+ * Number of invalid packages
222
+ */
223
+ get validPackages(): number;
224
+ /**
225
+ * Reset the number of valid packages
226
+ */
227
+ resetValidPackagesCount(): void;
228
+ /**
229
+ * Number of invalid packages
230
+ */
231
+ get invalidPackages(): number;
232
+ /**
233
+ * Reset the number of invalid packages
234
+ */
235
+ resetInvalidPackagesCount(): void;
236
+ /**
237
+ * Number of invalid packages
238
+ */
239
+ get unknownPackagesCount(): number;
240
+ /**
241
+ * Reset the number of invalid packages
242
+ */
243
+ resetUnknownPackagesCount(): void;
244
+ }
245
+ export declare class MavLinkTLogPacketSplitter extends MavLinkPacketSplitter {
246
+ _transform(chunk: Buffer, encoding: string, callback: TransformCallback): void;
247
+ protected findStartOfPacket(buffer: Buffer, offset?: number): number | null;
248
+ }
249
+ /**
250
+ * A transform stream that takes a buffer with data and converts it to MavLinkPacket object
251
+ */
252
+ export declare class MavLinkPacketParser extends Transform {
253
+ protected readonly log: Logger;
254
+ constructor(opts?: {});
255
+ private getProtocol;
256
+ _transform({ buffer, timestamp, ...rest }: {
257
+ buffer?: Buffer | undefined;
258
+ timestamp?: null | undefined;
259
+ } | undefined, encoding: string, callback: TransformCallback): void;
260
+ }
261
+ /**
262
+ * Creates a MavLink packet stream reader that is reading packets from the given input
263
+ *
264
+ * @param input input stream to read from
265
+ */
266
+ export declare function createMavLinkStream(input: Readable, onCrcError: BufferCallback): MavLinkPacketParser;
267
+ /**
268
+ * Send a packet to the stream
269
+ *
270
+ * @param stream Stream to send the data to
271
+ * @param msg message to serialize and send
272
+ * @param protocol protocol to use (default: MavLinkProtocolV1)
273
+ * @returns number of bytes sent
274
+ */
275
+ export declare function send(stream: Writable, msg: MavLinkData, protocol?: MavLinkProtocol): Promise<unknown>;
276
+ /**
277
+ * Send a signed packet to the stream. Signed packets are always V2 protocol
278
+ *
279
+ * @param stream Stream to send the data to
280
+ * @param msg message to serialize and send
281
+ * @param key key to sign the message with
282
+ * @param linkId link id for the signature
283
+ * @param sysid system id
284
+ * @param compid component id
285
+ * @param timestamp optional timestamp for packet signing (default: Date.now())
286
+ * @returns number of bytes sent
287
+ */
288
+ export declare function sendSigned(stream: Writable, msg: MavLinkData, key: Buffer, linkId?: uint8_t, sysid?: uint8_t, compid?: uint8_t, timestamp?: number): Promise<unknown>;
289
+ export {};
290
+ //# sourceMappingURL=mavlink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mavlink.d.ts","sourceRoot":"","sources":["../../lib/mavlink.ts"],"names":[],"mappings":"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"}