node-mavlink 1.1.1 → 1.3.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.
Files changed (48) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +21 -1
  4. package/dist/lib/logger.d.ts +2 -1
  5. package/dist/lib/logger.d.ts.map +1 -0
  6. package/dist/lib/logger.js +119 -1
  7. package/dist/lib/mavesp.d.ts +3 -1
  8. package/dist/lib/mavesp.d.ts.map +1 -0
  9. package/dist/lib/mavesp.js +101 -1
  10. package/dist/lib/mavlink.d.ts +16 -9
  11. package/dist/lib/mavlink.d.ts.map +1 -0
  12. package/dist/lib/mavlink.js +704 -1
  13. package/dist/lib/serialization.d.ts +9 -49
  14. package/dist/lib/serialization.d.ts.map +1 -0
  15. package/dist/lib/serialization.js +184 -1
  16. package/dist/lib/utils.d.ts +5 -4
  17. package/dist/lib/utils.d.ts.map +1 -0
  18. package/dist/lib/utils.js +77 -1
  19. package/examples/parse-tlog-file.ts +43 -0
  20. package/examples/send-receive-file.ts +6 -2
  21. package/examples/vtol.tlog +0 -0
  22. package/package.json +11 -9
  23. package/sanity-check.cjs +8 -0
  24. package/sanity-check.mjs +8 -0
  25. package/.vscode/launch.json +0 -19
  26. package/.vscode/settings.json +0 -3
  27. package/coverage/coverage-final.json +0 -1
  28. package/coverage/lcov-report/base.css +0 -224
  29. package/coverage/lcov-report/block-navigation.js +0 -87
  30. package/coverage/lcov-report/favicon.png +0 -0
  31. package/coverage/lcov-report/index.html +0 -101
  32. package/coverage/lcov-report/prettify.css +0 -1
  33. package/coverage/lcov-report/prettify.js +0 -2
  34. package/coverage/lcov-report/serialization.ts.html +0 -613
  35. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  36. package/coverage/lcov-report/sorter.js +0 -196
  37. package/coverage/lcov.info +0 -0
  38. package/index.ts +0 -5
  39. package/jest.config.js +0 -5
  40. package/lib/logger.ts +0 -128
  41. package/lib/mavesp.ts +0 -112
  42. package/lib/mavlink.ts +0 -796
  43. package/lib/serialization.test.ts +0 -256
  44. package/lib/serialization.ts +0 -176
  45. package/lib/utils.ts +0 -75
  46. package/tests/data.mavlink +0 -0
  47. package/tests/main.ts +0 -59
  48. package/tsconfig.json +0 -16
@@ -1,58 +1,18 @@
1
1
  /// <reference types="node" />
2
- import { int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, float, double } from 'mavlink-mappings';
2
+ declare type Serializer = ((value: any, buffer: Buffer, offset: number) => void) | ((value: any, buffer: Buffer, offset: number, maxLen: number) => void);
3
3
  /**
4
4
  * A dictionary containing functions that serialize a certain value based on the field type
5
5
  */
6
6
  export declare const SERIALIZERS: {
7
- uint8_t_mavlink_version: (value: uint8_t, buffer: Buffer, offset: number) => number;
8
- char: (value: int8_t, buffer: Buffer, offset: number) => number;
9
- int8_t: (value: int8_t, buffer: Buffer, offset: number) => number;
10
- uint8_t: (value: uint8_t, buffer: Buffer, offset: number) => number;
11
- int16_t: (value: int16_t, buffer: Buffer, offset: number) => number;
12
- uint16_t: (value: uint16_t, buffer: Buffer, offset: number) => number;
13
- int32_t: (value: int32_t, buffer: Buffer, offset: number) => number;
14
- uint32_t: (value: uint32_t, buffer: Buffer, offset: number) => number;
15
- int64_t: (value: int64_t, buffer: Buffer, offset: number) => number;
16
- uint64_t: (value: uint64_t, buffer: Buffer, offset: number) => number;
17
- float: (value: float, buffer: Buffer, offset: number) => number;
18
- double: (value: double, buffer: Buffer, offset: number) => number;
19
- 'char[]': (value: string, buffer: Buffer, offset: number, maxLen: number) => void;
20
- 'int8_t[]': (value: uint8_t[], buffer: Buffer, offset: number, maxLen: number) => void;
21
- 'uint8_t[]': (value: uint8_t[], buffer: Buffer, offset: number, maxLen: number) => void;
22
- 'int16_t[]': (value: uint16_t[], buffer: Buffer, offset: number, maxLen: number) => void;
23
- 'uint16_t[]': (value: uint16_t[], buffer: Buffer, offset: number, maxLen: number) => void;
24
- 'int32_t[]': (value: uint32_t[], buffer: Buffer, offset: number, maxLen: number) => void;
25
- 'uint32_t[]': (value: uint32_t[], buffer: Buffer, offset: number, maxLen: number) => void;
26
- 'int64_t[]': (value: uint64_t[], buffer: Buffer, offset: number, maxLen: number) => void;
27
- 'uint64_t[]': (value: uint64_t[], buffer: Buffer, offset: number, maxLen: number) => void;
28
- 'float[]': (value: float[], buffer: Buffer, offset: number, maxLen: number) => void;
29
- 'double[]': (value: double[], buffer: Buffer, offset: number, maxLen: number) => void;
7
+ [x: string]: Serializer;
8
+ };
9
+ declare type Deserializer = ((buffer: Buffer, offset: number) => any) | ((buffer: Buffer, offset: number, length: number) => any);
10
+ declare type Deserializers = {
11
+ [key: string]: Deserializer;
30
12
  };
31
13
  /**
32
14
  * A dictionary containing functions that deserialize a certain value based on the field type
33
15
  */
34
- export declare const DESERIALIZERS: {
35
- uint8_t_mavlink_version: (buffer: Buffer, offset: number) => number;
36
- char: (buffer: Buffer, offset: number) => string;
37
- int8_t: (buffer: Buffer, offset: number) => number;
38
- uint8_t: (buffer: Buffer, offset: number) => number;
39
- int16_t: (buffer: Buffer, offset: number) => number;
40
- uint16_t: (buffer: Buffer, offset: number) => number;
41
- int32_t: (buffer: Buffer, offset: number) => number;
42
- uint32_t: (buffer: Buffer, offset: number) => number;
43
- int64_t: (buffer: Buffer, offset: number) => bigint;
44
- uint64_t: (buffer: Buffer, offset: number) => bigint;
45
- float: (buffer: Buffer, offset: number) => number;
46
- double: (buffer: Buffer, offset: number) => number;
47
- 'char[]': (buffer: Buffer, offset: number, length: number) => string;
48
- 'int8_t[]': (buffer: Buffer, offset: number, length: number) => number[];
49
- 'uint8_t[]': (buffer: Buffer, offset: number, length: number) => number[];
50
- 'int16_t[]': (buffer: Buffer, offset: number, length: number) => number[];
51
- 'uint16_t[]': (buffer: Buffer, offset: number, length: number) => number[];
52
- 'int32_t[]': (buffer: Buffer, offset: number, length: number) => number[];
53
- 'uint32_t[]': (buffer: Buffer, offset: number, length: number) => number[];
54
- 'int64_t[]': (buffer: Buffer, offset: number, length: number) => BigInt[];
55
- 'uint64_t[]': (buffer: Buffer, offset: number, length: number) => BigInt[];
56
- 'float[]': (buffer: Buffer, offset: number, length: number) => number[];
57
- 'double[]': (buffer: Buffer, offset: number, length: number) => number[];
58
- };
16
+ export declare const DESERIALIZERS: Deserializers;
17
+ export {};
18
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../lib/serialization.ts"],"names":[],"mappings":";AAaA,aAAK,UAAU,GACd,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,GACtD,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAA;AAiFvE;;GAEG;AACH,eAAO,MAAM,WAAW;;CAIvB,CAAA;AAED,aAAK,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC,CAAA;AACzH,aAAK,aAAa,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAA;AAqFpD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAI3B,CAAA"}
@@ -1 +1,184 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DESERIALIZERS=exports.SERIALIZERS=void 0,exports.SERIALIZERS={uint8_t_mavlink_version:(r,e,n)=>e.writeUInt8(r,n),char:(r,e,n)=>e.writeUInt8(r,n),int8_t:(r,e,n)=>e.writeInt8(r,n),uint8_t:(r,e,n)=>e.writeUInt8(r,n),int16_t:(r,e,n)=>e.writeInt16LE(r,n),uint16_t:(r,e,n)=>e.writeUInt16LE(r,n),int32_t:(r,e,n)=>e.writeInt32LE(r,n),uint32_t:(r,e,n)=>e.writeUInt32LE(r,n),int64_t:(r,e,n)=>e.writeBigInt64LE(r,n),uint64_t:(r,e,n)=>e.writeBigUInt64LE(r,n),float:(r,e,n)=>e.writeFloatLE(r,n),double:(r,e,n)=>e.writeDoubleLE(r,n),"char[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++){const o=r.charCodeAt(t);e.writeUInt8(o,n+t)}},"int8_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeInt8(r[t],n+t)},"uint8_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeUInt8(r[t],n+t)},"int16_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeInt16LE(r[t],n+t*2)},"uint16_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeUInt16LE(r[t],n+t*2)},"int32_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeInt32LE(r[t],n+t*4)},"uint32_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeUInt32LE(r[t],n+t*4)},"int64_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeBigInt64LE(r[t],n+t*8)},"uint64_t[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeBigUInt64LE(r[t],n+t*8)},"float[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeFloatLE(r[t],n+t*4)},"double[]":(r,e,n,i)=>{for(let t=0;t<r.length&&t<i;t++)e.writeDoubleLE(r[t],n+t*8)}},exports.DESERIALIZERS={uint8_t_mavlink_version:(r,e)=>r.readUInt8(e),char:(r,e)=>String.fromCharCode(r.readUInt8(e)),int8_t:(r,e)=>r.readInt8(e),uint8_t:(r,e)=>r.readUInt8(e),int16_t:(r,e)=>r.readInt16LE(e),uint16_t:(r,e)=>r.readUInt16LE(e),int32_t:(r,e)=>r.readInt32LE(e),uint32_t:(r,e)=>r.readUInt32LE(e),int64_t:(r,e)=>r.readBigInt64LE(e),uint64_t:(r,e)=>r.readBigUInt64LE(e),float:(r,e)=>r.readFloatLE(e),double:(r,e)=>r.readDoubleLE(e),"char[]":(r,e,n)=>{let i="";for(let t=0;t<n;t++){const o=r.readUInt8(e+t);if(o!==0)i+=String.fromCharCode(o);else break}return i},"int8_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readInt8(e+t);return i},"uint8_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readUInt8(e+t);return i},"int16_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readInt16LE(e+t*2);return i},"uint16_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readUInt16LE(e+t*2);return i},"int32_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readInt32LE(e+t*4);return i},"uint32_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readUInt32LE(e+t*4);return i},"int64_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readBigInt64LE(e+t*8);return i},"uint64_t[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readBigUInt64LE(e+t*8);return i},"float[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readFloatLE(e+t*4);return i},"double[]":(r,e,n)=>{const i=new Array(n);for(let t=0;t<n;t++)i[t]=r.readDoubleLE(e+t*8);return i}};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DESERIALIZERS = exports.SERIALIZERS = void 0;
4
+ const SPECIAL_TYPES_SERIALIZERS = {
5
+ 'uint8_t_mavlink_version': (value, buffer, offset) => buffer.writeUInt8(value, offset),
6
+ };
7
+ const SINGULAR_TYPES_SERIALIZERS = {
8
+ 'char': (value, buffer, offset) => buffer.writeUInt8(value, offset),
9
+ 'int8_t': (value, buffer, offset) => buffer.writeInt8(value, offset),
10
+ 'uint8_t': (value, buffer, offset) => buffer.writeUInt8(value, offset),
11
+ 'int16_t': (value, buffer, offset) => buffer.writeInt16LE(value, offset),
12
+ 'uint16_t': (value, buffer, offset) => buffer.writeUInt16LE(value, offset),
13
+ 'int32_t': (value, buffer, offset) => buffer.writeInt32LE(value, offset),
14
+ 'uint32_t': (value, buffer, offset) => buffer.writeUInt32LE(value, offset),
15
+ 'int64_t': (value, buffer, offset) => buffer.writeBigInt64LE(value, offset),
16
+ 'uint64_t': (value, buffer, offset) => buffer.writeBigUInt64LE(value, offset),
17
+ 'float': (value, buffer, offset) => buffer.writeFloatLE(value, offset),
18
+ 'double': (value, buffer, offset) => buffer.writeDoubleLE(value, offset),
19
+ };
20
+ const ARRAY_TYPES_SERIALIZERS = {
21
+ 'char[]': (value, buffer, offset, maxLen) => {
22
+ for (let i = 0; i < value.length && i < maxLen; i++) {
23
+ const code = value.charCodeAt(i);
24
+ buffer.writeUInt8(code, offset + i);
25
+ }
26
+ },
27
+ 'int8_t[]': (value, buffer, offset, maxLen) => {
28
+ for (let i = 0; i < value.length && i < maxLen; i++) {
29
+ buffer.writeInt8(value[i], offset + i);
30
+ }
31
+ },
32
+ 'uint8_t[]': (value, buffer, offset, maxLen) => {
33
+ for (let i = 0; i < value.length && i < maxLen; i++) {
34
+ buffer.writeUInt8(value[i], offset + i);
35
+ }
36
+ },
37
+ 'int16_t[]': (value, buffer, offset, maxLen) => {
38
+ for (let i = 0; i < value.length && i < maxLen; i++) {
39
+ buffer.writeInt16LE(value[i], offset + i * 2);
40
+ }
41
+ },
42
+ 'uint16_t[]': (value, buffer, offset, maxLen) => {
43
+ for (let i = 0; i < value.length && i < maxLen; i++) {
44
+ buffer.writeUInt16LE(value[i], offset + i * 2);
45
+ }
46
+ },
47
+ 'int32_t[]': (value, buffer, offset, maxLen) => {
48
+ for (let i = 0; i < value.length && i < maxLen; i++) {
49
+ buffer.writeInt32LE(value[i], offset + i * 4);
50
+ }
51
+ },
52
+ 'uint32_t[]': (value, buffer, offset, maxLen) => {
53
+ for (let i = 0; i < value.length && i < maxLen; i++) {
54
+ buffer.writeUInt32LE(value[i], offset + i * 4);
55
+ }
56
+ },
57
+ 'int64_t[]': (value, buffer, offset, maxLen) => {
58
+ for (let i = 0; i < value.length && i < maxLen; i++) {
59
+ buffer.writeBigInt64LE(value[i], offset + i * 8);
60
+ }
61
+ },
62
+ 'uint64_t[]': (value, buffer, offset, maxLen) => {
63
+ for (let i = 0; i < value.length && i < maxLen; i++) {
64
+ buffer.writeBigUInt64LE(value[i], offset + i * 8);
65
+ }
66
+ },
67
+ 'float[]': (value, buffer, offset, maxLen) => {
68
+ for (let i = 0; i < value.length && i < maxLen; i++) {
69
+ buffer.writeFloatLE(value[i], offset + i * 4);
70
+ }
71
+ },
72
+ 'double[]': (value, buffer, offset, maxLen) => {
73
+ for (let i = 0; i < value.length && i < maxLen; i++) {
74
+ buffer.writeDoubleLE(value[i], offset + i * 8);
75
+ }
76
+ },
77
+ };
78
+ /**
79
+ * A dictionary containing functions that serialize a certain value based on the field type
80
+ */
81
+ exports.SERIALIZERS = {
82
+ ...SPECIAL_TYPES_SERIALIZERS,
83
+ ...SINGULAR_TYPES_SERIALIZERS,
84
+ ...ARRAY_TYPES_SERIALIZERS,
85
+ };
86
+ const SPECIAL_DESERIALIZERS = {
87
+ 'uint8_t_mavlink_version': (buffer, offset) => buffer.readUInt8(offset),
88
+ };
89
+ const SINGULAR_TYPES_DESERIALIZERS = {
90
+ 'char': (buffer, offset) => String.fromCharCode(buffer.readUInt8(offset)),
91
+ 'int8_t': (buffer, offset) => buffer.readInt8(offset),
92
+ 'uint8_t': (buffer, offset) => buffer.readUInt8(offset),
93
+ 'int16_t': (buffer, offset) => buffer.readInt16LE(offset),
94
+ 'uint16_t': (buffer, offset) => buffer.readUInt16LE(offset),
95
+ 'int32_t': (buffer, offset) => buffer.readInt32LE(offset),
96
+ 'uint32_t': (buffer, offset) => buffer.readUInt32LE(offset),
97
+ 'int64_t': (buffer, offset) => buffer.readBigInt64LE(offset),
98
+ 'uint64_t': (buffer, offset) => buffer.readBigUInt64LE(offset),
99
+ 'float': (buffer, offset) => buffer.readFloatLE(offset),
100
+ 'double': (buffer, offset) => buffer.readDoubleLE(offset),
101
+ };
102
+ const ARRAY_TYPES_DESERIALIZERS = {
103
+ 'char[]': (buffer, offset, length) => {
104
+ let result = '';
105
+ for (let i = 0; i < length; i++) {
106
+ const charCode = buffer.readUInt8(offset + i);
107
+ if (charCode !== 0) {
108
+ result += String.fromCharCode(charCode);
109
+ }
110
+ else {
111
+ break;
112
+ }
113
+ }
114
+ return result;
115
+ },
116
+ 'int8_t[]': (buffer, offset, length) => {
117
+ const result = new Array(length);
118
+ for (let i = 0; i < length; i++)
119
+ result[i] = buffer.readInt8(offset + i);
120
+ return result;
121
+ },
122
+ 'uint8_t[]': (buffer, offset, length) => {
123
+ const result = new Array(length);
124
+ for (let i = 0; i < length; i++)
125
+ result[i] = buffer.readUInt8(offset + i);
126
+ return result;
127
+ },
128
+ 'int16_t[]': (buffer, offset, length) => {
129
+ const result = new Array(length);
130
+ for (let i = 0; i < length; i++)
131
+ result[i] = buffer.readInt16LE(offset + i * 2);
132
+ return result;
133
+ },
134
+ 'uint16_t[]': (buffer, offset, length) => {
135
+ const result = new Array(length);
136
+ for (let i = 0; i < length; i++)
137
+ result[i] = buffer.readUInt16LE(offset + i * 2);
138
+ return result;
139
+ },
140
+ 'int32_t[]': (buffer, offset, length) => {
141
+ const result = new Array(length);
142
+ for (let i = 0; i < length; i++)
143
+ result[i] = buffer.readInt32LE(offset + i * 4);
144
+ return result;
145
+ },
146
+ 'uint32_t[]': (buffer, offset, length) => {
147
+ const result = new Array(length);
148
+ for (let i = 0; i < length; i++)
149
+ result[i] = buffer.readUInt32LE(offset + i * 4);
150
+ return result;
151
+ },
152
+ 'int64_t[]': (buffer, offset, length) => {
153
+ const result = new Array(length);
154
+ for (let i = 0; i < length; i++)
155
+ result[i] = buffer.readBigInt64LE(offset + i * 8);
156
+ return result;
157
+ },
158
+ 'uint64_t[]': (buffer, offset, length) => {
159
+ const result = new Array(length);
160
+ for (let i = 0; i < length; i++)
161
+ result[i] = buffer.readBigUInt64LE(offset + i * 8);
162
+ return result;
163
+ },
164
+ 'float[]': (buffer, offset, length) => {
165
+ const result = new Array(length);
166
+ for (let i = 0; i < length; i++)
167
+ result[i] = buffer.readFloatLE(offset + i * 4);
168
+ return result;
169
+ },
170
+ 'double[]': (buffer, offset, length) => {
171
+ const result = new Array(length);
172
+ for (let i = 0; i < length; i++)
173
+ result[i] = buffer.readDoubleLE(offset + i * 8);
174
+ return result;
175
+ },
176
+ };
177
+ /**
178
+ * A dictionary containing functions that deserialize a certain value based on the field type
179
+ */
180
+ exports.DESERIALIZERS = {
181
+ ...SPECIAL_DESERIALIZERS,
182
+ ...SINGULAR_TYPES_DESERIALIZERS,
183
+ ...ARRAY_TYPES_DESERIALIZERS,
184
+ };
@@ -18,9 +18,9 @@ export declare function dump(buffer: Buffer, lineWidth?: number): void;
18
18
  /**
19
19
  * Sleep for a given number of miliseconds
20
20
  *
21
- * @param ms number of miliseconds to sleep
21
+ * @param {number} ms of miliseconds to sleep
22
22
  */
23
- export declare function sleep(ms: any): Promise<unknown>;
23
+ export declare function sleep(ms: number): Promise<unknown>;
24
24
  /**
25
25
  * Execute a callback every <code>interval</code>ms and if it will not return
26
26
  * a truthy value in the <code>timeout<code>ms then throw a Timeout exception.
@@ -28,8 +28,9 @@ export declare function sleep(ms: any): Promise<unknown>;
28
28
  * a particular expression should be evaluated and how long will it take to end
29
29
  * the execution without success. Great for time-sensitive operations.
30
30
  *
31
- * @param cb callback to call every <code>interval</code>ms
31
+ * @param cb callback to call every <code>interval</code>ms. Waiting stops if the callback returns a truthy value.
32
32
  * @param timeout number of miliseconds that need to pass before the Timeout exception is thrown
33
33
  * @param interval number of miliseconds before re-running the callback
34
34
  */
35
- export declare function waitFor(cb: any, timeout?: number, interval?: number): Promise<unknown>;
35
+ export declare function waitFor<T>(cb: () => T, timeout?: number, interval?: number): Promise<T>;
36
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAU,EAAE,MAAM,SAAO,UAE5D;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAK,QAclD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,SAAQ,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAoBzF"}
package/dist/lib/utils.js CHANGED
@@ -1 +1,77 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.waitFor=exports.sleep=exports.dump=exports.hex=void 0;function hex(t,o=2,e="0x"){return`${e}${t.toString(16).padStart(o,"0")}`}exports.hex=hex;function dump(t,o=16){const e=[];let r=0;for(let n=0;n<t.length;n++)e.push(hex(t[n],2,"0x")),e.length===o&&(console.log(hex(r,4),"|",e.join(" ")),r+=o,e.length=0);e.length>0&&console.log(hex(r,4),"|",e.join(" "))}exports.dump=dump;function sleep(t){return new Promise(o=>setTimeout(o,t))}exports.sleep=sleep;async function waitFor(t,o=1e4,e=100){return new Promise((r,n)=>{const l=setTimeout(()=>{s(),n("Timeout")},o),u=setInterval(()=>{const i=t();i&&(s(),r(i))}),s=()=>{clearTimeout(l),clearTimeout(u)}})}exports.waitFor=waitFor;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitFor = exports.sleep = exports.dump = exports.hex = void 0;
4
+ /**
5
+ * Convert a number to hexadecimal representation with a minumum
6
+ * number of characters and optional prefix (0x by default)
7
+ *
8
+ * @param n value to convert
9
+ * @param len length of the converted string (without prefix)
10
+ * @param prefix prefix to prepend the generated string with
11
+ */
12
+ function hex(n, len = 2, prefix = '0x') {
13
+ return `${prefix}${n.toString(16).padStart(len, '0')}`;
14
+ }
15
+ exports.hex = hex;
16
+ /**
17
+ * Dump a buffer in a readable form
18
+ *
19
+ * @param buffer buffer to dump
20
+ * @param lineWidth width of the line, in bytes of buffer
21
+ */
22
+ function dump(buffer, lineWidth = 16) {
23
+ const line = [];
24
+ let address = 0;
25
+ for (let i = 0; i < buffer.length; i++) {
26
+ line.push(hex(buffer[i], 2, '0x'));
27
+ if (line.length === lineWidth) {
28
+ console.log(hex(address, 4), '|', line.join(' '));
29
+ address += lineWidth;
30
+ line.length = 0;
31
+ }
32
+ }
33
+ if (line.length > 0) {
34
+ console.log(hex(address, 4), '|', line.join(' '));
35
+ }
36
+ }
37
+ exports.dump = dump;
38
+ /**
39
+ * Sleep for a given number of miliseconds
40
+ *
41
+ * @param {number} ms of miliseconds to sleep
42
+ */
43
+ function sleep(ms) {
44
+ return new Promise(resolve => setTimeout(resolve, ms));
45
+ }
46
+ exports.sleep = sleep;
47
+ /**
48
+ * Execute a callback every <code>interval</code>ms and if it will not return
49
+ * a truthy value in the <code>timeout<code>ms then throw a Timeout exception.
50
+ * This is a very useful utility that will allow you to specify how often
51
+ * a particular expression should be evaluated and how long will it take to end
52
+ * the execution without success. Great for time-sensitive operations.
53
+ *
54
+ * @param cb callback to call every <code>interval</code>ms. Waiting stops if the callback returns a truthy value.
55
+ * @param timeout number of miliseconds that need to pass before the Timeout exception is thrown
56
+ * @param interval number of miliseconds before re-running the callback
57
+ */
58
+ async function waitFor(cb, timeout = 10000, interval = 100) {
59
+ return new Promise((resolve, reject) => {
60
+ const timeoutTimer = setTimeout(() => {
61
+ cleanup();
62
+ reject('Timeout');
63
+ }, timeout);
64
+ const intervalTimer = setInterval(() => {
65
+ const result = cb();
66
+ if (result) {
67
+ cleanup();
68
+ resolve(result);
69
+ }
70
+ });
71
+ const cleanup = () => {
72
+ clearTimeout(timeoutTimer);
73
+ clearTimeout(intervalTimer);
74
+ };
75
+ });
76
+ }
77
+ exports.waitFor = waitFor;
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env -S npx ts-node
2
+
3
+ import { createReadStream } from 'fs'
4
+ import { MavLinkPacketSplitter, MavLinkPacketParser } from '..'
5
+ import {
6
+ minimal, common, ardupilotmega, uavionix, icarous,
7
+ asluav, development, ualberta,
8
+ } from '..'
9
+
10
+ const splitter = new MavLinkPacketSplitter()
11
+ const parser = new MavLinkPacketParser()
12
+ const file = createReadStream(__dirname + '/vtol.tlog')
13
+ const reader = file.pipe(splitter).pipe(parser)
14
+
15
+ // create a registry of mappings between a message id and a data class
16
+ const REGISTRY = {
17
+ ...minimal.REGISTRY,
18
+ ...common.REGISTRY,
19
+ ...ardupilotmega.REGISTRY,
20
+ ...uavionix.REGISTRY,
21
+ ...icarous.REGISTRY,
22
+ ...asluav.REGISTRY,
23
+ ...development.REGISTRY,
24
+ ...ualberta.REGISTRY,
25
+ }
26
+
27
+ reader.on('data', packet => {
28
+ const clazz = REGISTRY[packet.header.msgid]
29
+ if (clazz) {
30
+ const data = packet.protocol.data(packet.payload, clazz)
31
+ if (packet.header.timestamp) {
32
+ console.log(new Date(Number(packet.header.timestamp)).toISOString(), data)
33
+ } else {
34
+ console.log(data)
35
+ }
36
+ }
37
+ })
38
+
39
+ file.on('close', () => {
40
+ console.log('\n\nNumber of invalid packages:', splitter.invalidPackages)
41
+ console.log('Number of unknown packages:', splitter.unknownPackagesCount)
42
+ console.log('\nTotal number of consumed packets:', splitter.validPackages)
43
+ })
@@ -9,7 +9,7 @@ import {
9
9
 
10
10
  const splitter = new MavLinkPacketSplitter()
11
11
  const parser = new MavLinkPacketParser()
12
- const file = createReadStream('./GH-5.bin')
12
+ const file = createReadStream(__dirname + '/GH-5.bin')
13
13
  const reader = file.pipe(splitter).pipe(parser)
14
14
 
15
15
  // create a registry of mappings between a message id and a data class
@@ -28,7 +28,11 @@ reader.on('data', packet => {
28
28
  const clazz = REGISTRY[packet.header.msgid]
29
29
  if (clazz) {
30
30
  const data = packet.protocol.data(packet.payload, clazz)
31
- console.log(data)
31
+ if (packet.header.timestamp) {
32
+ console.log(new Date(Number(packet.header.timestamp)).toISOString(), data)
33
+ } else {
34
+ console.log(data)
35
+ }
32
36
  }
33
37
  })
34
38
 
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-mavlink",
3
- "version": "1.1.1",
3
+ "version": "1.3.0",
4
4
  "author": "Matthias Hryniszak <padcom@gmail.com>",
5
5
  "license": "LGPL",
6
6
  "description": "MavLink definitions and parsing library",
@@ -22,15 +22,17 @@
22
22
  "main": "dist/index.js",
23
23
  "types": "dist/index.d.ts",
24
24
  "dependencies": {
25
- "mavlink-mappings": "^1.0.9-20220424"
25
+ "mavlink-mappings": "^1.0.12-20220825"
26
26
  },
27
27
  "scripts": {
28
- "build": "tsc && minimize-js dist",
29
- "test": "jest && npm run test:batch",
30
- "test:batch": "npx ts-node tests/main.ts e2e --input tests/data.mavlink",
28
+ "clean": "rm -rf dist lib/*.js",
29
+ "build": "tsc",
30
+ "test": "jest",
31
+ "test:batch": "tests/main.js e2e --input tests/data.mavlink",
31
32
  "dev": "jest --watch",
32
- "test:e2e": "cd tests && ./main.ts e2e --input data.mavlink",
33
- "prepublishOnly": "rm -rf dist && npm install && npm run build && npm test"
33
+ "test:e2e": "./main.js e2e --input data.mavlink",
34
+ "sanity-check": "./sanity-check.cjs && ./sanity-check.mjs",
35
+ "prepublishOnly": "npm run clean && npm install && npm test && npm run build && npm run sanity-check"
34
36
  },
35
37
  "devDependencies": {
36
38
  "@types/jest": "^27.4.1",
@@ -41,8 +43,8 @@
41
43
  "minimize-js": "^1.3.0",
42
44
  "serialport": "^10.0.0",
43
45
  "ts-jest": "^27.1.4",
44
- "ts-node": "^9.1.1",
45
- "typescript": "^4.4.3",
46
+ "ts-node": "^10.6.0",
47
+ "typescript": "^4.7.4",
46
48
  "wget-improved": "^3.2.1",
47
49
  "xml2js": "^0.4.23",
48
50
  "yargs": "^17.3.1"
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { createReadStream } = require('node:fs')
4
+ const { createMavLinkStream } = require('.')
5
+
6
+ const port = createReadStream('examples/GH-5.bin')
7
+ const parser = createMavLinkStream(port)
8
+ parser.on('data', packet => console.log(packet.debug()))
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { createReadStream } from 'node:fs'
4
+ import { createMavLinkStream } from './dist/index.js'
5
+
6
+ const port = createReadStream('./examples/GH-5.bin')
7
+ const parser = createMavLinkStream(port)
8
+ parser.on('data', packet => console.log(packet.debug()))
@@ -1,19 +0,0 @@
1
- {
2
- "version": "0.2.0",
3
- "configurations": [
4
- {
5
- "type": "node",
6
- "request": "launch",
7
- "name": "Launch Program",
8
- "runtimeArgs": [
9
- "-r",
10
- "ts-node/register"
11
- ],
12
- "args": [
13
- "${workspaceFolder}/tests/main.ts",
14
- "e2e",
15
- "--input=tests/data.mavlink"
16
- ]
17
- }
18
- ],
19
- }
@@ -1,3 +0,0 @@
1
- {
2
- "jest.jestCommandLine": "npx jest"
3
- }
@@ -1 +0,0 @@
1
- {}