node-mavlink 1.6.0 → 2.0.0-alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|