node-mavlink 1.2.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-mavlink",
3
- "version": "1.2.1",
3
+ "version": "1.3.2",
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,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { join } = require('node:path')
4
+ const { createReadStream } = require('node:fs')
5
+ const { createMavLinkStream } = require('.')
6
+
7
+ const port = createReadStream(join(__dirname, 'examples/GH-5.bin'))
8
+ const parser = createMavLinkStream(port)
9
+ parser.on('data', packet => console.log(packet.debug()))
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { join } from 'node:path'
4
+ import { fileURLToPath } from 'node:url'
5
+ import { createReadStream } from 'node:fs'
6
+ import { createMavLinkStream } from './dist/index.js'
7
+
8
+ const __dirname = fileURLToPath(new URL('.', import.meta.url))
9
+ const port = createReadStream(join(__dirname, 'examples/GH-5.bin'))
10
+ const parser = createMavLinkStream(port)
11
+ parser.on('data', packet => console.log(packet.debug()))
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { join } = require('node:path')
4
+ const { createReadStream } = require('node:fs')
5
+ const { createMavLinkStream } = require('.')
6
+ const { minimal, common, ardupilotmega } = require('.')
7
+
8
+ const REGISTRY = {
9
+ ...minimal.REGISTRY,
10
+ ...common.REGISTRY,
11
+ ...ardupilotmega.REGISTRY,
12
+ }
13
+
14
+ const port = createReadStream(join(__dirname, 'examples/GH-5.bin'))
15
+ const parser = createMavLinkStream(port)
16
+ parser.on('data', packet => {
17
+ const clazz = REGISTRY[packet.header.msgid]
18
+ if (clazz) {
19
+ const data = packet.protocol.data(packet.payload, clazz)
20
+ console.log('Received packet:', data)
21
+ } else {
22
+ console.log(packet.debug())
23
+ }
24
+ })
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { join } from 'node:path'
4
+ import { fileURLToPath } from 'node:url'
5
+ import { createReadStream } from 'node:fs'
6
+ import { createMavLinkStream } from './dist/index.js'
7
+ import { minimal, common, ardupilotmega } from './dist/index.js'
8
+
9
+ const REGISTRY = {
10
+ ...minimal.REGISTRY,
11
+ ...common.REGISTRY,
12
+ ...ardupilotmega.REGISTRY,
13
+ }
14
+
15
+ const __dirname = fileURLToPath(new URL('.', import.meta.url))
16
+ const port = createReadStream(join(__dirname, 'examples/GH-5.bin'))
17
+ const parser = createMavLinkStream(port)
18
+ parser.on('data', packet => {
19
+ const clazz = REGISTRY[packet.header.msgid]
20
+ if (clazz) {
21
+ const data = packet.protocol.data(packet.payload, clazz)
22
+ console.log('Received packet:', data)
23
+ }
24
+ })
@@ -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
- }
package/index.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from 'mavlink-mappings'
2
- export * from './lib/utils'
3
- export * from './lib/logger'
4
- export * from './lib/mavlink'
5
- export * from './lib/mavesp'
package/jest.config.js DELETED
@@ -1,5 +0,0 @@
1
- /** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
2
- module.exports = {
3
- preset: 'ts-jest',
4
- testEnvironment: 'node',
5
- }
package/lib/logger.ts DELETED
@@ -1,128 +0,0 @@
1
- import EventEmitter = require('events')
2
-
3
- /**
4
- * Level of the log entry
5
- */
6
- export enum LogLevel {
7
- trace = 5,
8
- debug = 4,
9
- info = 3,
10
- warn = 2,
11
- error = 1,
12
- fatal = 0,
13
- }
14
-
15
- type LoggerRegistry = { [x: string]: Logger }
16
- type LoggerEvents = 'log'
17
- type LoggerEventHandler = (context: string, level: LogLevel, message: any[]) => void
18
-
19
- /**
20
- * Simplified interface for logging facilities
21
- */
22
- export class Logger {
23
- private static readonly events: EventEmitter = new EventEmitter()
24
- private static registry: LoggerRegistry = {}
25
-
26
- /**
27
- * Gets a logger by name
28
- *
29
- * @param context logger context
30
- */
31
- static getLogger(context) {
32
- let name = ''
33
- if (typeof context === 'function') name = context.name
34
- else if (typeof context === 'object') name = (<any>context).constructor.name
35
- else if (typeof context === 'string') name = context
36
- else throw new Error(`Do not know how to get logger for ${context} (${typeof context})`)
37
-
38
- if (!Logger.registry[name]) Logger.registry[name] = new Logger(name)
39
-
40
- return Logger.registry[name]
41
- }
42
-
43
- /**
44
- * Binds an event handler
45
- *
46
- * @param event event to react to
47
- * @param handler event handler
48
- */
49
- static on(event: LoggerEvents, handler: (context, level, message) => void) {
50
- this.events.on(event, handler)
51
- }
52
-
53
- /**
54
- * Removes an event handler
55
- *
56
- * @param event event to react to
57
- * @param handler event handler
58
- */
59
- static off(event: LoggerEvents, handler: LoggerEventHandler) {
60
- this.events.off(event, handler)
61
- }
62
-
63
- private context: string
64
-
65
- /**
66
- * Constructs a new logger instance
67
- *
68
- * @param context logger context
69
- */
70
- constructor(context: string) {
71
- this.context = context
72
- Logger.events.emit('logger-created', Logger.registry[context])
73
- }
74
-
75
- /**
76
- * Sends a log message if the trace level is enabled for this logger
77
- *
78
- * @param args parameters for the log entry
79
- */
80
- trace(...args: any) {
81
- Logger.events.emit('log', { context: this.context, level: LogLevel.trace, message: args })
82
- }
83
-
84
- /**
85
- * Sends a log message if the debug level is enabled for this logger
86
- *
87
- * @param args parameters for the log entry
88
- */
89
- debug(...args: any) {
90
- Logger.events.emit('log', { context: this.context, level: LogLevel.debug, message: args })
91
- }
92
-
93
- /**
94
- * Sends a log message if the info level is enabled for this logger
95
- *
96
- * @param args parameters for the log entry
97
- */
98
- info(...args: any) {
99
- Logger.events.emit('log', { context: this.context, level: LogLevel.info, message: args })
100
- }
101
-
102
- /**
103
- * Sends a log message if the warn level is enabled for this logger
104
- *
105
- * @param args parameters for the log entry
106
- */
107
- warn(...args: any) {
108
- Logger.events.emit('log', { context: this.context, level: LogLevel.warn, message: args })
109
- }
110
-
111
- /**
112
- * Sends a log message if the error level is enabled for this logger
113
- *
114
- * @param args parameters for the log entry
115
- */
116
- error(...args: any) {
117
- Logger.events.emit('log', { context: this.context, level: LogLevel.error, message: args })
118
- }
119
-
120
- /**
121
- * Sends a log message if the fatal level is enabled for this logger
122
- *
123
- * @param args parameters for the log entry
124
- */
125
- fatal(...args: any) {
126
- Logger.events.emit('log', { context: this.context, level: LogLevel.fatal, message: args })
127
- }
128
- }