node-mavlink 1.1.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
- {}