node-mavlink 1.0.12 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +11 -10
- package/.vscode/settings.json +3 -0
- package/README.md +5 -8
- package/coverage/coverage-final.json +1 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +101 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/serialization.ts.html +613 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov.info +0 -0
- package/dist/index.js +1 -21
- package/dist/lib/logger.js +1 -118
- package/dist/lib/mavesp.js +1 -110
- package/dist/lib/mavlink.js +1 -689
- package/dist/lib/serialization.js +1 -172
- package/dist/lib/utils.js +1 -88
- package/examples/send-receive-file.ts +3 -8
- package/examples/send-receive-serial.ts +17 -5
- package/examples/send-receive-signed-serial.ts +17 -5
- package/examples/send-receive-signed-udp.ts +15 -4
- package/examples/send-receive-udp.ts +15 -3
- package/lib/serialization.test.ts +46 -0
- package/package.json +8 -7
- package/tests/main.ts +4 -8
- package/tsconfig.json +1 -1
@@ -0,0 +1,196 @@
|
|
1
|
+
/* eslint-disable */
|
2
|
+
var addSorting = (function() {
|
3
|
+
'use strict';
|
4
|
+
var cols,
|
5
|
+
currentSort = {
|
6
|
+
index: 0,
|
7
|
+
desc: false
|
8
|
+
};
|
9
|
+
|
10
|
+
// returns the summary table element
|
11
|
+
function getTable() {
|
12
|
+
return document.querySelector('.coverage-summary');
|
13
|
+
}
|
14
|
+
// returns the thead element of the summary table
|
15
|
+
function getTableHeader() {
|
16
|
+
return getTable().querySelector('thead tr');
|
17
|
+
}
|
18
|
+
// returns the tbody element of the summary table
|
19
|
+
function getTableBody() {
|
20
|
+
return getTable().querySelector('tbody');
|
21
|
+
}
|
22
|
+
// returns the th element for nth column
|
23
|
+
function getNthColumn(n) {
|
24
|
+
return getTableHeader().querySelectorAll('th')[n];
|
25
|
+
}
|
26
|
+
|
27
|
+
function onFilterInput() {
|
28
|
+
const searchValue = document.getElementById('fileSearch').value;
|
29
|
+
const rows = document.getElementsByTagName('tbody')[0].children;
|
30
|
+
for (let i = 0; i < rows.length; i++) {
|
31
|
+
const row = rows[i];
|
32
|
+
if (
|
33
|
+
row.textContent
|
34
|
+
.toLowerCase()
|
35
|
+
.includes(searchValue.toLowerCase())
|
36
|
+
) {
|
37
|
+
row.style.display = '';
|
38
|
+
} else {
|
39
|
+
row.style.display = 'none';
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
// loads the search box
|
45
|
+
function addSearchBox() {
|
46
|
+
var template = document.getElementById('filterTemplate');
|
47
|
+
var templateClone = template.content.cloneNode(true);
|
48
|
+
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
49
|
+
template.parentElement.appendChild(templateClone);
|
50
|
+
}
|
51
|
+
|
52
|
+
// loads all columns
|
53
|
+
function loadColumns() {
|
54
|
+
var colNodes = getTableHeader().querySelectorAll('th'),
|
55
|
+
colNode,
|
56
|
+
cols = [],
|
57
|
+
col,
|
58
|
+
i;
|
59
|
+
|
60
|
+
for (i = 0; i < colNodes.length; i += 1) {
|
61
|
+
colNode = colNodes[i];
|
62
|
+
col = {
|
63
|
+
key: colNode.getAttribute('data-col'),
|
64
|
+
sortable: !colNode.getAttribute('data-nosort'),
|
65
|
+
type: colNode.getAttribute('data-type') || 'string'
|
66
|
+
};
|
67
|
+
cols.push(col);
|
68
|
+
if (col.sortable) {
|
69
|
+
col.defaultDescSort = col.type === 'number';
|
70
|
+
colNode.innerHTML =
|
71
|
+
colNode.innerHTML + '<span class="sorter"></span>';
|
72
|
+
}
|
73
|
+
}
|
74
|
+
return cols;
|
75
|
+
}
|
76
|
+
// attaches a data attribute to every tr element with an object
|
77
|
+
// of data values keyed by column name
|
78
|
+
function loadRowData(tableRow) {
|
79
|
+
var tableCols = tableRow.querySelectorAll('td'),
|
80
|
+
colNode,
|
81
|
+
col,
|
82
|
+
data = {},
|
83
|
+
i,
|
84
|
+
val;
|
85
|
+
for (i = 0; i < tableCols.length; i += 1) {
|
86
|
+
colNode = tableCols[i];
|
87
|
+
col = cols[i];
|
88
|
+
val = colNode.getAttribute('data-value');
|
89
|
+
if (col.type === 'number') {
|
90
|
+
val = Number(val);
|
91
|
+
}
|
92
|
+
data[col.key] = val;
|
93
|
+
}
|
94
|
+
return data;
|
95
|
+
}
|
96
|
+
// loads all row data
|
97
|
+
function loadData() {
|
98
|
+
var rows = getTableBody().querySelectorAll('tr'),
|
99
|
+
i;
|
100
|
+
|
101
|
+
for (i = 0; i < rows.length; i += 1) {
|
102
|
+
rows[i].data = loadRowData(rows[i]);
|
103
|
+
}
|
104
|
+
}
|
105
|
+
// sorts the table using the data for the ith column
|
106
|
+
function sortByIndex(index, desc) {
|
107
|
+
var key = cols[index].key,
|
108
|
+
sorter = function(a, b) {
|
109
|
+
a = a.data[key];
|
110
|
+
b = b.data[key];
|
111
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
112
|
+
},
|
113
|
+
finalSorter = sorter,
|
114
|
+
tableBody = document.querySelector('.coverage-summary tbody'),
|
115
|
+
rowNodes = tableBody.querySelectorAll('tr'),
|
116
|
+
rows = [],
|
117
|
+
i;
|
118
|
+
|
119
|
+
if (desc) {
|
120
|
+
finalSorter = function(a, b) {
|
121
|
+
return -1 * sorter(a, b);
|
122
|
+
};
|
123
|
+
}
|
124
|
+
|
125
|
+
for (i = 0; i < rowNodes.length; i += 1) {
|
126
|
+
rows.push(rowNodes[i]);
|
127
|
+
tableBody.removeChild(rowNodes[i]);
|
128
|
+
}
|
129
|
+
|
130
|
+
rows.sort(finalSorter);
|
131
|
+
|
132
|
+
for (i = 0; i < rows.length; i += 1) {
|
133
|
+
tableBody.appendChild(rows[i]);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
// removes sort indicators for current column being sorted
|
137
|
+
function removeSortIndicators() {
|
138
|
+
var col = getNthColumn(currentSort.index),
|
139
|
+
cls = col.className;
|
140
|
+
|
141
|
+
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
142
|
+
col.className = cls;
|
143
|
+
}
|
144
|
+
// adds sort indicators for current column being sorted
|
145
|
+
function addSortIndicators() {
|
146
|
+
getNthColumn(currentSort.index).className += currentSort.desc
|
147
|
+
? ' sorted-desc'
|
148
|
+
: ' sorted';
|
149
|
+
}
|
150
|
+
// adds event listeners for all sorter widgets
|
151
|
+
function enableUI() {
|
152
|
+
var i,
|
153
|
+
el,
|
154
|
+
ithSorter = function ithSorter(i) {
|
155
|
+
var col = cols[i];
|
156
|
+
|
157
|
+
return function() {
|
158
|
+
var desc = col.defaultDescSort;
|
159
|
+
|
160
|
+
if (currentSort.index === i) {
|
161
|
+
desc = !currentSort.desc;
|
162
|
+
}
|
163
|
+
sortByIndex(i, desc);
|
164
|
+
removeSortIndicators();
|
165
|
+
currentSort.index = i;
|
166
|
+
currentSort.desc = desc;
|
167
|
+
addSortIndicators();
|
168
|
+
};
|
169
|
+
};
|
170
|
+
for (i = 0; i < cols.length; i += 1) {
|
171
|
+
if (cols[i].sortable) {
|
172
|
+
// add the click event handler on the th so users
|
173
|
+
// dont have to click on those tiny arrows
|
174
|
+
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
175
|
+
if (el.addEventListener) {
|
176
|
+
el.addEventListener('click', ithSorter(i));
|
177
|
+
} else {
|
178
|
+
el.attachEvent('onclick', ithSorter(i));
|
179
|
+
}
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
// adds sorting functionality to the UI
|
184
|
+
return function() {
|
185
|
+
if (!getTable()) {
|
186
|
+
return;
|
187
|
+
}
|
188
|
+
cols = loadColumns();
|
189
|
+
loadData();
|
190
|
+
addSearchBox();
|
191
|
+
addSortIndicators();
|
192
|
+
enableUI();
|
193
|
+
};
|
194
|
+
})();
|
195
|
+
|
196
|
+
window.addEventListener('load', addSorting);
|
File without changes
|
package/dist/index.js
CHANGED
@@ -1,21 +1 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
-
};
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
-
__exportStar(require("mavlink-mappings"), exports);
|
18
|
-
__exportStar(require("./lib/utils"), exports);
|
19
|
-
__exportStar(require("./lib/logger"), exports);
|
20
|
-
__exportStar(require("./lib/mavlink"), exports);
|
21
|
-
__exportStar(require("./lib/mavesp"), exports);
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(i,r,e,t){t===void 0&&(t=e);var n=Object.getOwnPropertyDescriptor(r,e);(!n||("get"in n?!r.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return r[e]}}),Object.defineProperty(i,t,n)}:function(i,r,e,t){t===void 0&&(t=e),i[t]=r[e]}),__exportStar=this&&this.__exportStar||function(i,r){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(r,e)&&__createBinding(r,i,e)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("mavlink-mappings"),exports),__exportStar(require("./lib/utils"),exports),__exportStar(require("./lib/logger"),exports),__exportStar(require("./lib/mavlink"),exports),__exportStar(require("./lib/mavesp"),exports);
|
package/dist/lib/logger.js
CHANGED
@@ -1,118 +1 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.Logger = exports.LogLevel = void 0;
|
4
|
-
const EventEmitter = require("events");
|
5
|
-
/**
|
6
|
-
* Level of the log entry
|
7
|
-
*/
|
8
|
-
var LogLevel;
|
9
|
-
(function (LogLevel) {
|
10
|
-
LogLevel[LogLevel["trace"] = 5] = "trace";
|
11
|
-
LogLevel[LogLevel["debug"] = 4] = "debug";
|
12
|
-
LogLevel[LogLevel["info"] = 3] = "info";
|
13
|
-
LogLevel[LogLevel["warn"] = 2] = "warn";
|
14
|
-
LogLevel[LogLevel["error"] = 1] = "error";
|
15
|
-
LogLevel[LogLevel["fatal"] = 0] = "fatal";
|
16
|
-
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
|
17
|
-
/**
|
18
|
-
* Simplified interface for logging facilities
|
19
|
-
*/
|
20
|
-
class Logger {
|
21
|
-
/**
|
22
|
-
* Constructs a new logger instance
|
23
|
-
*
|
24
|
-
* @param context logger context
|
25
|
-
*/
|
26
|
-
constructor(context) {
|
27
|
-
this.context = context;
|
28
|
-
Logger.events.emit('logger-created', Logger.registry[context]);
|
29
|
-
}
|
30
|
-
/**
|
31
|
-
* Gets a logger by name
|
32
|
-
*
|
33
|
-
* @param context logger context
|
34
|
-
*/
|
35
|
-
static getLogger(context) {
|
36
|
-
let name = '';
|
37
|
-
if (typeof context === 'function')
|
38
|
-
name = context.name;
|
39
|
-
else if (typeof context === 'object')
|
40
|
-
name = context.constructor.name;
|
41
|
-
else if (typeof context === 'string')
|
42
|
-
name = context;
|
43
|
-
else
|
44
|
-
throw new Error(`Do not know how to get logger for ${context} (${typeof context})`);
|
45
|
-
if (!Logger.registry[name])
|
46
|
-
Logger.registry[name] = new Logger(name);
|
47
|
-
return Logger.registry[name];
|
48
|
-
}
|
49
|
-
/**
|
50
|
-
* Binds an event handler
|
51
|
-
*
|
52
|
-
* @param event event to react to
|
53
|
-
* @param handler event handler
|
54
|
-
*/
|
55
|
-
static on(event, handler) {
|
56
|
-
this.events.on(event, handler);
|
57
|
-
}
|
58
|
-
/**
|
59
|
-
* Removes an event handler
|
60
|
-
*
|
61
|
-
* @param event event to react to
|
62
|
-
* @param handler event handler
|
63
|
-
*/
|
64
|
-
static off(event, handler) {
|
65
|
-
this.events.off(event, handler);
|
66
|
-
}
|
67
|
-
/**
|
68
|
-
* Sends a log message if the trace level is enabled for this logger
|
69
|
-
*
|
70
|
-
* @param args parameters for the log entry
|
71
|
-
*/
|
72
|
-
trace(...args) {
|
73
|
-
Logger.events.emit('log', { context: this.context, level: LogLevel.trace, message: args });
|
74
|
-
}
|
75
|
-
/**
|
76
|
-
* Sends a log message if the debug level is enabled for this logger
|
77
|
-
*
|
78
|
-
* @param args parameters for the log entry
|
79
|
-
*/
|
80
|
-
debug(...args) {
|
81
|
-
Logger.events.emit('log', { context: this.context, level: LogLevel.debug, message: args });
|
82
|
-
}
|
83
|
-
/**
|
84
|
-
* Sends a log message if the info level is enabled for this logger
|
85
|
-
*
|
86
|
-
* @param args parameters for the log entry
|
87
|
-
*/
|
88
|
-
info(...args) {
|
89
|
-
Logger.events.emit('log', { context: this.context, level: LogLevel.info, message: args });
|
90
|
-
}
|
91
|
-
/**
|
92
|
-
* Sends a log message if the warn level is enabled for this logger
|
93
|
-
*
|
94
|
-
* @param args parameters for the log entry
|
95
|
-
*/
|
96
|
-
warn(...args) {
|
97
|
-
Logger.events.emit('log', { context: this.context, level: LogLevel.warn, message: args });
|
98
|
-
}
|
99
|
-
/**
|
100
|
-
* Sends a log message if the error level is enabled for this logger
|
101
|
-
*
|
102
|
-
* @param args parameters for the log entry
|
103
|
-
*/
|
104
|
-
error(...args) {
|
105
|
-
Logger.events.emit('log', { context: this.context, level: LogLevel.error, message: args });
|
106
|
-
}
|
107
|
-
/**
|
108
|
-
* Sends a log message if the fatal level is enabled for this logger
|
109
|
-
*
|
110
|
-
* @param args parameters for the log entry
|
111
|
-
*/
|
112
|
-
fatal(...args) {
|
113
|
-
Logger.events.emit('log', { context: this.context, level: LogLevel.fatal, message: args });
|
114
|
-
}
|
115
|
-
}
|
116
|
-
exports.Logger = Logger;
|
117
|
-
Logger.events = new EventEmitter();
|
118
|
-
Logger.registry = {};
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Logger=exports.LogLevel=void 0;const EventEmitter=require("events");var LogLevel;(function(t){t[t.trace=5]="trace",t[t.debug=4]="debug",t[t.info=3]="info",t[t.warn=2]="warn",t[t.error=1]="error",t[t.fatal=0]="fatal"})(LogLevel=exports.LogLevel||(exports.LogLevel={}));class Logger{constructor(e){this.context=e,Logger.events.emit("logger-created",Logger.registry[e])}static getLogger(e){let s="";if(typeof e=="function")s=e.name;else if(typeof e=="object")s=e.constructor.name;else if(typeof e=="string")s=e;else throw new Error(`Do not know how to get logger for ${e} (${typeof e})`);return Logger.registry[s]||(Logger.registry[s]=new Logger(s)),Logger.registry[s]}static on(e,s){this.events.on(e,s)}static off(e,s){this.events.off(e,s)}trace(...e){Logger.events.emit("log",{context:this.context,level:LogLevel.trace,message:e})}debug(...e){Logger.events.emit("log",{context:this.context,level:LogLevel.debug,message:e})}info(...e){Logger.events.emit("log",{context:this.context,level:LogLevel.info,message:e})}warn(...e){Logger.events.emit("log",{context:this.context,level:LogLevel.warn,message:e})}error(...e){Logger.events.emit("log",{context:this.context,level:LogLevel.error,message:e})}fatal(...e){Logger.events.emit("log",{context:this.context,level:LogLevel.fatal,message:e})}}exports.Logger=Logger,Logger.events=new EventEmitter,Logger.registry={};
|
package/dist/lib/mavesp.js
CHANGED
@@ -1,110 +1 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
exports.MavEsp8266 = void 0;
|
13
|
-
const events_1 = require("events");
|
14
|
-
const dgram_1 = require("dgram");
|
15
|
-
const stream_1 = require("stream");
|
16
|
-
const mavlink_1 = require("./mavlink");
|
17
|
-
const mavlink_2 = require("./mavlink");
|
18
|
-
const utils_1 = require("./utils");
|
19
|
-
/**
|
20
|
-
* Encapsulation of communication with MavEsp8266
|
21
|
-
*/
|
22
|
-
class MavEsp8266 extends events_1.EventEmitter {
|
23
|
-
constructor() {
|
24
|
-
super();
|
25
|
-
this.ip = '';
|
26
|
-
this.sendPort = 14555;
|
27
|
-
this.seq = 0;
|
28
|
-
this.input = new stream_1.PassThrough();
|
29
|
-
this.processIncommingUDPData = this.processIncommingUDPData.bind(this);
|
30
|
-
this.processIncommingPacket = this.processIncommingPacket.bind(this);
|
31
|
-
// Create the reader as usual by piping the source stream through the splitter
|
32
|
-
// and packet parser
|
33
|
-
const reader = this.input
|
34
|
-
.pipe(new mavlink_1.MavLinkPacketSplitter())
|
35
|
-
.pipe(new mavlink_1.MavLinkPacketParser());
|
36
|
-
reader.on('data', this.processIncommingPacket);
|
37
|
-
}
|
38
|
-
/**
|
39
|
-
* Start communication with the controller via MAVESP2866
|
40
|
-
*
|
41
|
-
* @param receivePort port to receive messages on (default: 14550)
|
42
|
-
* @param sendPort port to send messages to (default: 14555)
|
43
|
-
*/
|
44
|
-
start(receivePort = 14550, sendPort = 14555) {
|
45
|
-
return __awaiter(this, void 0, void 0, function* () {
|
46
|
-
this.sendPort = sendPort;
|
47
|
-
// Create a UDP socket
|
48
|
-
this.socket = (0, dgram_1.createSocket)({ type: 'udp4', reuseAddr: true });
|
49
|
-
this.socket.on('message', this.processIncommingUDPData);
|
50
|
-
// Start listening on the socket
|
51
|
-
return new Promise((resolve, reject) => {
|
52
|
-
this.socket.bind(receivePort, () => {
|
53
|
-
// Wait for the first package to be returned to read the ip address
|
54
|
-
// of the controller
|
55
|
-
(0, utils_1.waitFor)(() => this.ip !== '')
|
56
|
-
.then(() => { resolve(this.ip); })
|
57
|
-
.catch(e => { reject(e); });
|
58
|
-
});
|
59
|
-
});
|
60
|
-
});
|
61
|
-
}
|
62
|
-
/**
|
63
|
-
* Send a packet
|
64
|
-
*
|
65
|
-
* @param msg message to send
|
66
|
-
* @param sysid system id
|
67
|
-
* @param compid component id
|
68
|
-
*/
|
69
|
-
send(msg, sysid = mavlink_2.MavLinkProtocol.SYS_ID, compid = mavlink_2.MavLinkProtocol.COMP_ID) {
|
70
|
-
const protocol = new mavlink_2.MavLinkProtocolV2(sysid, compid);
|
71
|
-
const buffer = protocol.serialize(msg, this.seq++);
|
72
|
-
this.seq &= 255;
|
73
|
-
this.sendBuffer(buffer);
|
74
|
-
}
|
75
|
-
/**
|
76
|
-
* Send a signed packet
|
77
|
-
*
|
78
|
-
* @param msg message to send
|
79
|
-
* @param sysid system id
|
80
|
-
* @param compid component id
|
81
|
-
* @param linkId link id for the signature
|
82
|
-
*/
|
83
|
-
sendSigned(msg, key, linkId = 1, sysid = mavlink_2.MavLinkProtocol.SYS_ID, compid = mavlink_2.MavLinkProtocol.COMP_ID) {
|
84
|
-
const protocol = new mavlink_2.MavLinkProtocolV2(sysid, compid, mavlink_2.MavLinkProtocolV2.IFLAG_SIGNED);
|
85
|
-
const b1 = protocol.serialize(msg, this.seq++);
|
86
|
-
this.seq &= 255;
|
87
|
-
const b2 = protocol.sign(b1, linkId, key);
|
88
|
-
this.sendBuffer(b2);
|
89
|
-
}
|
90
|
-
/**
|
91
|
-
* Send raw data over the socket. Useful for custom implementation of data sending
|
92
|
-
*
|
93
|
-
* @param buffer buffer to send
|
94
|
-
*/
|
95
|
-
sendBuffer(buffer) {
|
96
|
-
this.socket.send(buffer, this.sendPort, this.ip);
|
97
|
-
}
|
98
|
-
processIncommingUDPData(buffer, metadata) {
|
99
|
-
// store the remote ip address
|
100
|
-
if (this.ip === '')
|
101
|
-
this.ip = metadata.address;
|
102
|
-
// pass on the data to the input stream
|
103
|
-
this.input.write(buffer);
|
104
|
-
}
|
105
|
-
processIncommingPacket(packet) {
|
106
|
-
// let the user know we received the packet
|
107
|
-
this.emit('data', packet);
|
108
|
-
}
|
109
|
-
}
|
110
|
-
exports.MavEsp8266 = MavEsp8266;
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.MavEsp8266=void 0;const events_1=require("events"),dgram_1=require("dgram"),stream_1=require("stream"),mavlink_1=require("./mavlink"),mavlink_2=require("./mavlink"),utils_1=require("./utils");class MavEsp8266 extends events_1.EventEmitter{constructor(){super(),this.ip="",this.sendPort=14555,this.seq=0,this.input=new stream_1.PassThrough,this.processIncommingUDPData=this.processIncommingUDPData.bind(this),this.processIncommingPacket=this.processIncommingPacket.bind(this),this.input.pipe(new mavlink_1.MavLinkPacketSplitter).pipe(new mavlink_1.MavLinkPacketParser).on("data",this.processIncommingPacket)}async start(s=14550,t=14555){return this.sendPort=t,this.socket=(0,dgram_1.createSocket)({type:"udp4",reuseAddr:!0}),this.socket.on("message",this.processIncommingUDPData),new Promise((e,o)=>{this.socket.bind(s,()=>{(0,utils_1.waitFor)(()=>this.ip!=="").then(()=>{e(this.ip)}).catch(i=>{o(i)})})})}send(s,t=mavlink_2.MavLinkProtocol.SYS_ID,e=mavlink_2.MavLinkProtocol.COMP_ID){const i=new mavlink_2.MavLinkProtocolV2(t,e).serialize(s,this.seq++);this.seq&=255,this.sendBuffer(i)}sendSigned(s,t,e=1,o=mavlink_2.MavLinkProtocol.SYS_ID,i=mavlink_2.MavLinkProtocol.COMP_ID){const n=new mavlink_2.MavLinkProtocolV2(o,i,mavlink_2.MavLinkProtocolV2.IFLAG_SIGNED),r=n.serialize(s,this.seq++);this.seq&=255;const c=n.sign(r,e,t);this.sendBuffer(c)}sendBuffer(s){this.socket.send(s,this.sendPort,this.ip)}processIncommingUDPData(s,t){this.ip===""&&(this.ip=t.address),this.input.write(s)}processIncommingPacket(s){this.emit("data",s)}}exports.MavEsp8266=MavEsp8266;
|