node-mavlink 1.6.0 → 2.0.0-alpha.1
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.
- package/README.md +45 -0
- package/dist/lib/mavesp.d.ts +9 -1
- package/dist/lib/mavesp.d.ts.map +1 -1
- package/dist/lib/mavesp.js +7 -3
- package/dist/lib/mavlink.d.ts +10 -2
- package/dist/lib/mavlink.d.ts.map +1 -1
- package/dist/lib/mavlink.js +10 -10
- package/examples/pool-param-udp.ts +2 -1
- package/examples/send-receive-file.ts +5 -0
- package/examples/send-receive-serial.ts +3 -0
- package/examples/send-receive-udp.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -243,6 +243,51 @@ $ Tools/autotest/sim_vehicle.py -v ArduCopter -f quad --console --map --out udpi
|
|
243
243
|
|
244
244
|
That last parameter (`--out udpin:127.0.0.1:14555`) opens up for incoming messages in port 14555, which is the default send port for MavEsp8266 and its default firmware.
|
245
245
|
|
246
|
+
## Registering custom messages
|
247
|
+
|
248
|
+
There are times when you want to have custom messages, for example when you're building a rocket and there is no target you can use out of the box. There are actually two scenarios:
|
249
|
+
|
250
|
+
1. You have a few custom messages, but generally you're happy with the original set of messages
|
251
|
+
2. You don't care about the original messages, maybe you do about the heartbeat, but nothing else
|
252
|
+
|
253
|
+
### Registering a single command
|
254
|
+
|
255
|
+
There are 3 steps to register a custom command:
|
256
|
+
|
257
|
+
a) create a class that defines your custom command
|
258
|
+
b) add it to your `REGISTRY`
|
259
|
+
c) register your custom command's magic number
|
260
|
+
|
261
|
+
The first two steps are pretty self explanatory and there is a plethora of examples in the mavlink-mappings project - use those to learn how to create your own message definitions.
|
262
|
+
|
263
|
+
The last step is quite easy:
|
264
|
+
|
265
|
+
```javascript
|
266
|
+
import { registerCustomMessageMagicNumber } from 'node-mavlink'
|
267
|
+
|
268
|
+
registerCustomMessageMagicNumber('999999': 42)
|
269
|
+
```
|
270
|
+
|
271
|
+
From now on the splitter will know how to properly calculate CRC for your packages and you're all good.
|
272
|
+
|
273
|
+
### Replacing magic numbers registry all together
|
274
|
+
|
275
|
+
Well, if all you care about is the ping, why parse anything else, right? And if on top of the ping command you've got a number of custom messages - all the better to not parse even the messages!
|
276
|
+
|
277
|
+
```javascript
|
278
|
+
import { MavLinkSplitter, MavLinkParser } from 'node-mavlink'
|
279
|
+
|
280
|
+
const MY_MAGIC_NUMBERS = {
|
281
|
+
'0': 50, // Heartbeat
|
282
|
+
// ...other magic number definitions go here
|
283
|
+
}
|
284
|
+
|
285
|
+
const source = ... // obtain source stream
|
286
|
+
const reader = source
|
287
|
+
.pipe(new MavLinkPacketSplitter({}, { magicNumbers: MY_MAGIC_NUMBERS }))
|
288
|
+
.pipe(new MavLinkPacketParser())
|
289
|
+
```
|
290
|
+
|
246
291
|
## Closing thoughts
|
247
292
|
|
248
293
|
The original generated sources lack one very important aspect of a reusable library: documentation. Also, most of the time the names are more C-like than JavaScript-like.
|
package/dist/lib/mavesp.d.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
/// <reference types="node" />
|
2
2
|
/// <reference types="node" />
|
3
3
|
import { EventEmitter } from 'events';
|
4
|
+
import { MavLinkPacketSplitter, MavLinkPacketParser } from './mavlink';
|
4
5
|
import { uint8_t, MavLinkData } from 'mavlink-mappings';
|
5
6
|
export interface ConnectionInfo {
|
6
7
|
ip: string;
|
@@ -16,7 +17,14 @@ export declare class MavEsp8266 extends EventEmitter {
|
|
16
17
|
private ip;
|
17
18
|
private sendPort;
|
18
19
|
private seq;
|
19
|
-
|
20
|
+
/**
|
21
|
+
* @param splitter packet splitter instance
|
22
|
+
* @param parser packet parser instance
|
23
|
+
*/
|
24
|
+
constructor({ splitter, parser, }?: {
|
25
|
+
splitter?: MavLinkPacketSplitter | undefined;
|
26
|
+
parser?: MavLinkPacketParser | undefined;
|
27
|
+
});
|
20
28
|
/**
|
21
29
|
* Start communication with the controller via MAVESP8266
|
22
30
|
*
|
package/dist/lib/mavesp.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mavesp.d.ts","sourceRoot":"","sources":["../../lib/mavesp.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;
|
1
|
+
{"version":3,"file":"mavesp.d.ts","sourceRoot":"","sources":["../../lib/mavesp.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAIrC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAA0B,MAAM,WAAW,CAAA;AAG9F,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,GAAG,CAAY;IAEvB;;;OAGG;gBACS,EACV,QAAsC,EACtC,MAAkC,GACnC;;;KAAK;IAiBN;;;;;OAKG;IACG,KAAK,CAAC,WAAW,GAAE,MAAc,EAAE,QAAQ,GAAE,MAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAmB3F;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;;;;;OAMG;IACG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,GAAE,OAAgC,EAAE,MAAM,GAAE,OAAiC,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjI;;;;;;;OAOG;IACG,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAW,EAAE,KAAK,GAAE,OAAgC,EAAE,MAAM,GAAE,OAAiC,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzK;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASjD,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,qBAAqB;CAI9B"}
|
package/dist/lib/mavesp.js
CHANGED
@@ -16,7 +16,11 @@ class MavEsp8266 extends events_1.EventEmitter {
|
|
16
16
|
ip = '';
|
17
17
|
sendPort = 14555;
|
18
18
|
seq = 0;
|
19
|
-
|
19
|
+
/**
|
20
|
+
* @param splitter packet splitter instance
|
21
|
+
* @param parser packet parser instance
|
22
|
+
*/
|
23
|
+
constructor({ splitter = new mavlink_1.MavLinkPacketSplitter(), parser = new mavlink_1.MavLinkPacketParser(), } = {}) {
|
20
24
|
super();
|
21
25
|
this.input = new stream_1.PassThrough();
|
22
26
|
this.processIncomingUDPData = this.processIncomingUDPData.bind(this);
|
@@ -24,8 +28,8 @@ class MavEsp8266 extends events_1.EventEmitter {
|
|
24
28
|
// Create the reader as usual by piping the source stream through the splitter
|
25
29
|
// and packet parser
|
26
30
|
const reader = this.input
|
27
|
-
.pipe(
|
28
|
-
.pipe(
|
31
|
+
.pipe(splitter)
|
32
|
+
.pipe(parser);
|
29
33
|
reader.on('data', this.processIncomingPacket);
|
30
34
|
}
|
31
35
|
/**
|
package/dist/lib/mavlink.d.ts
CHANGED
@@ -32,6 +32,7 @@ export declare abstract class MavLinkProtocol {
|
|
32
32
|
static CHECKSUM_LENGTH: number;
|
33
33
|
static SYS_ID: uint8_t;
|
34
34
|
static COMP_ID: uint8_t;
|
35
|
+
get name(): string;
|
35
36
|
/**
|
36
37
|
* Serialize a message to a buffer
|
37
38
|
*/
|
@@ -196,6 +197,7 @@ export declare class MavLinkPacketSplitter extends Transform {
|
|
196
197
|
protected readonly log: Logger;
|
197
198
|
private buffer;
|
198
199
|
private onCrcError;
|
200
|
+
private readonly magicNumbers;
|
199
201
|
private timestamp;
|
200
202
|
private _validPackagesCount;
|
201
203
|
private _unknownPackagesCount;
|
@@ -205,7 +207,10 @@ export declare class MavLinkPacketSplitter extends Transform {
|
|
205
207
|
* @param verbose print diagnostic information
|
206
208
|
* @param onCrcError callback executed if there is a CRC error (mostly for debugging)
|
207
209
|
*/
|
208
|
-
constructor(opts?: {}, onCrcError?:
|
210
|
+
constructor(opts?: {}, { onCrcError, magicNumbers }?: {
|
211
|
+
onCrcError?: BufferCallback;
|
212
|
+
magicNumbers?: Record<string, number>;
|
213
|
+
});
|
209
214
|
_transform(chunk: Buffer, encoding: string, callback: TransformCallback): void;
|
210
215
|
protected findStartOfPacket(buffer: Buffer, offset?: number): number | null;
|
211
216
|
private getPacketProtocol;
|
@@ -263,7 +268,10 @@ export declare class MavLinkPacketParser extends Transform {
|
|
263
268
|
*
|
264
269
|
* @param input input stream to read from
|
265
270
|
*/
|
266
|
-
export declare function createMavLinkStream(input: Readable, onCrcError
|
271
|
+
export declare function createMavLinkStream(input: Readable, { onCrcError, magicNumbers }?: {
|
272
|
+
onCrcError?: BufferCallback;
|
273
|
+
magicNumbers?: Record<string, number>;
|
274
|
+
}): MavLinkPacketParser;
|
267
275
|
/**
|
268
276
|
* Send a packet to the stream
|
269
277
|
*
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mavlink.d.ts","sourceRoot":"","sources":["../../lib/mavlink.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEzE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAA;AAE5D,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAGtE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGjC;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;IAC/B,KAAK,EAAE,MAAM,CAAI;IACjB,aAAa,EAAE,OAAO,CAAI;IAC1B,oBAAoB,EAAE,OAAO,CAAI;IACjC,kBAAkB,EAAE,OAAO,CAAI;IAC/B,GAAG,EAAE,OAAO,CAAI;IAChB,KAAK,EAAE,OAAO,CAAI;IAClB,MAAM,EAAE,OAAO,CAAI;IACnB,KAAK,EAAE,OAAO,CAAI;CACnB;AAED;;;;;GAKG;AACH,8BAAsB,eAAe;IACnC,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAyB;IAE/C,MAAM,CAAC,IAAI,SAAY;IACvB,MAAM,CAAC,UAAU,SAAI;IACrB,MAAM,CAAC,cAAc,SAAI;IACzB,MAAM,CAAC,eAAe,SAAI;IAE1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAC5B,MAAM,CAAC,OAAO,EAAE,OAAO,CAAI;IAE3B;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM;IAE9D;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAExE;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAExC;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC;CAelF;AAgBD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IAM3C,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IANxB,MAAM,CAAC,IAAI,SAAW;IACtB,MAAM,CAAC,UAAU,SAAO;IACxB,MAAM,CAAC,cAAc,SAAI;gBAGhB,KAAK,GAAE,OAAgC,EACvC,MAAM,GAAE,OAAiC;IAKlD,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IA6BpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB;
|
1
|
+
{"version":3,"file":"mavlink.d.ts","sourceRoot":"","sources":["../../lib/mavlink.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/mavlink.js
CHANGED
@@ -37,6 +37,9 @@ class MavLinkProtocol {
|
|
37
37
|
static CHECKSUM_LENGTH = 2;
|
38
38
|
static SYS_ID = 254;
|
39
39
|
static COMP_ID = 1;
|
40
|
+
get name() {
|
41
|
+
return this.constructor.NAME;
|
42
|
+
}
|
40
43
|
/**
|
41
44
|
* Deserialize payload into actual data class
|
42
45
|
*/
|
@@ -101,7 +104,6 @@ class MavLinkProtocolV1 extends MavLinkProtocol {
|
|
101
104
|
}
|
102
105
|
const result = new MavLinkPacketHeader();
|
103
106
|
result.timestamp = timestamp || null;
|
104
|
-
result.magic = startByte;
|
105
107
|
result.payloadLength = buffer.readUInt8(1);
|
106
108
|
result.seq = buffer.readUInt8(2);
|
107
109
|
result.sysid = buffer.readUInt8(3);
|
@@ -374,16 +376,13 @@ class MavLinkPacket {
|
|
374
376
|
debug() {
|
375
377
|
return 'Packet ('
|
376
378
|
// @ts-ignore
|
377
|
-
+ `proto: ${this.protocol.
|
379
|
+
+ `proto: ${this.protocol.name}, `
|
378
380
|
+ `sysid: ${this.header.sysid}, `
|
379
381
|
+ `compid: ${this.header.compid}, `
|
380
382
|
+ `msgid: ${this.header.msgid}, `
|
381
383
|
+ `seq: ${this.header.seq}, `
|
382
384
|
+ `plen: ${this.header.payloadLength}, `
|
383
|
-
// @ts-ignore
|
384
|
-
+ `magic: ${mavlink_mappings_2.MSG_ID_MAGIC_NUMBER[this.header.msgid]} (${(0, utils_1.hex)(mavlink_mappings_2.MSG_ID_MAGIC_NUMBER[this.header.msgid])}), `
|
385
385
|
+ `crc: ${(0, utils_1.hex)(this.crc, 4)}`
|
386
|
-
// @ts-ignore
|
387
386
|
+ this.signatureToString(this.signature)
|
388
387
|
+ ')';
|
389
388
|
}
|
@@ -408,6 +407,7 @@ class MavLinkPacketSplitter extends stream_1.Transform {
|
|
408
407
|
log = logger_1.Logger.getLogger(this);
|
409
408
|
buffer = Buffer.from([]);
|
410
409
|
onCrcError = null;
|
410
|
+
magicNumbers;
|
411
411
|
timestamp = null;
|
412
412
|
_validPackagesCount = 0;
|
413
413
|
_unknownPackagesCount = 0;
|
@@ -417,9 +417,10 @@ class MavLinkPacketSplitter extends stream_1.Transform {
|
|
417
417
|
* @param verbose print diagnostic information
|
418
418
|
* @param onCrcError callback executed if there is a CRC error (mostly for debugging)
|
419
419
|
*/
|
420
|
-
constructor(opts = {}, onCrcError = () => { }) {
|
420
|
+
constructor(opts = {}, { onCrcError = () => { }, magicNumbers = mavlink_mappings_2.MSG_ID_MAGIC_NUMBER } = {}) {
|
421
421
|
super({ ...opts, objectMode: true });
|
422
422
|
this.onCrcError = onCrcError;
|
423
|
+
this.magicNumbers = magicNumbers;
|
423
424
|
}
|
424
425
|
_transform(chunk, encoding, callback) {
|
425
426
|
this.buffer = Buffer.concat([this.buffer, chunk]);
|
@@ -527,8 +528,7 @@ class MavLinkPacketSplitter extends stream_1.Transform {
|
|
527
528
|
validatePacket(buffer, Protocol) {
|
528
529
|
const protocol = new Protocol();
|
529
530
|
const header = protocol.header(buffer);
|
530
|
-
|
531
|
-
const magic = mavlink_mappings_2.MSG_ID_MAGIC_NUMBER[header.msgid];
|
531
|
+
const magic = this.magicNumbers[header.msgid];
|
532
532
|
if (magic) {
|
533
533
|
const crc = protocol.crc(buffer);
|
534
534
|
const trim = this.isV2Signed(buffer)
|
@@ -669,9 +669,9 @@ exports.MavLinkPacketParser = MavLinkPacketParser;
|
|
669
669
|
*
|
670
670
|
* @param input input stream to read from
|
671
671
|
*/
|
672
|
-
function createMavLinkStream(input, onCrcError) {
|
672
|
+
function createMavLinkStream(input, { onCrcError, magicNumbers } = {}) {
|
673
673
|
return input
|
674
|
-
.pipe(new MavLinkPacketSplitter({}, onCrcError))
|
674
|
+
.pipe(new MavLinkPacketSplitter({}, { onCrcError, magicNumbers }))
|
675
675
|
.pipe(new MavLinkPacketParser());
|
676
676
|
}
|
677
677
|
exports.createMavLinkStream = createMavLinkStream;
|
@@ -9,7 +9,8 @@ async function main() {
|
|
9
9
|
// start the communication
|
10
10
|
// After this line we have received at least one heartbeat message so we
|
11
11
|
// know what is the remote IP address to send the messages to
|
12
|
-
await port.start()
|
12
|
+
const { ip, sendPort, receivePort } = await port.start()
|
13
|
+
console.log(`Connected to: ${ip}, send port: ${sendPort}, receive port ${receivePort}`)
|
13
14
|
|
14
15
|
// log incoming messages
|
15
16
|
port.on('data', (packet: MavLinkPacket) => {
|
@@ -7,6 +7,11 @@ import {
|
|
7
7
|
asluav, development, ualberta,
|
8
8
|
} from '..'
|
9
9
|
|
10
|
+
//
|
11
|
+
// Example how to register your own magic numbers:
|
12
|
+
//
|
13
|
+
// const splitter = new MavLinkPacketSplitter({}, { magicNumbers: { '0': 50 } })
|
14
|
+
//
|
10
15
|
const splitter = new MavLinkPacketSplitter()
|
11
16
|
const parser = new MavLinkPacketParser()
|
12
17
|
const file = createReadStream(__dirname + '/GH-5.bin')
|
@@ -26,6 +26,9 @@ async function main() {
|
|
26
26
|
// React to packet being retrieved.
|
27
27
|
// This is the place where all your application-level logic will exist
|
28
28
|
reader.on('data', (packet: MavLinkPacket) => {
|
29
|
+
// Output generic debug information about this packet
|
30
|
+
console.log(packet.debug())
|
31
|
+
|
29
32
|
online = true
|
30
33
|
const clazz = REGISTRY[packet.header.msgid]
|
31
34
|
if (clazz) {
|
@@ -21,7 +21,7 @@ async function main() {
|
|
21
21
|
// start the communication
|
22
22
|
// After this line we have received at least one heartbeat message so we
|
23
23
|
// know what is the remote IP address to send the messages to
|
24
|
-
const { ip, sendPort, receivePort } = await port.start(
|
24
|
+
const { ip, sendPort, receivePort } = await port.start()
|
25
25
|
console.log(`Connected to: ${ip}, send port: ${sendPort}, receive port ${receivePort}`)
|
26
26
|
|
27
27
|
// log incoming messages
|