Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,4 +145,16 @@ The events emitted by node-mavlink are:

In addition to these events, each message received emits an event corresponding to the message type. For example on receipt of a GPS_RAW_INT message an event named "GPS_RAW_INT" is emitted. These events have both the message object passed as first argument along with an object containing the decoded fields. An example of this is given in the Parsing Data section above.

These message specific events allow you to tailor certain behaviours to certain message types, whilst ignoring other messages. For example, updating the aim of a tracking antenna whenever new position information is available.
These message specific events allow you to tailor certain behaviours to certain message types, whilst ignoring other messages. For example, updating the aim of a tracking antenna whenever new position information is available.

Enums
-----
You can acces enums by their names or values, using enumsByName or enumsByValue.

Make sure to put ".value" for enumsByName and ".name" for enumsByValue at the end of each statements.
```
var command = myMAV.enumsByName.MAV_CMD.MAV_CMD_NAV_TAKEOFF.value;

var sensorType = 1 //MAV_DISTANCE_SENSOR_ULTRASOUND
var senorName = myMAV.enumsByValue.MAV_DISTANCE_SENSOR[sensorType].name;
```
42 changes: 41 additions & 1 deletion src/mavlink.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ var mavlink = function(sysid, compid, version, definitions) {
this.messagesByID = new Array(255);
this.messagesByName = new Object();
this.enums = new Array();
this.enumsByName = new Object();
this.enumsByValue = new Object();

//Add definitions to be loaded
for (var i = 0; i<defs.length; i++) {
Expand Down Expand Up @@ -109,6 +111,44 @@ mavlink.prototype.addMessage = function(message) {
//Add new enum to enums array
mavlink.prototype.addEnum = function(en) {
this.enums[this.enums.length] = en;
enum_name = en.$.name;
enum_keyval = {};
enum_valkey = {};
if (DEBUG)
console.log("MAVLink: Start adding " + en.$.name + " enum")

this.enumsByValue[enum_name] = this.enumsByValue[enum_name] || {};
this.enumsByName[enum_name] = this.enumsByName[enum_name] || {};
for(var i = 0; i < en.entry.length; i++) {
var value = Number(en.entry[i].$.value) || i;
var key = en.entry[i].$.name;
if (DEBUG)
console.log(" Adding " + en.entry[i].$.name);

enum_keyval[key] = {value: value};
for (var k in en.entry[i]) {
if (k !== '$' && k !== 'name')
enum_keyval[key][k] = en.entry[i][k];
}

enum_valkey[value] = {name: key};
for (var k in en.entry[i]) {
if (k !== '$' && k !== 'value')
enum_valkey[value][k] = en.entry[i][k];
}
}

for (key in enum_valkey) {
this.enumsByValue[enum_name][key] = enum_valkey[key];
}
this.enumsByValue[enum_name][key].description =
(this.enumsByValue[enum_name][key].description || []).concat(en.description);
for (key in enum_keyval) {
this.enumsByName[enum_name][key] = enum_keyval[key];
}
this.enumsByName[enum_name][key].description =
(this.enumsByName[enum_name][key].description || []).concat(en.description);

if (DEBUG) {
console.log("MAVLink: Added " + en.$.name + " enum");
}
Expand Down Expand Up @@ -583,7 +623,7 @@ mavlink.prototype.createMessage = function(msgid, data, cb) {
for (var i = 0; i < message.field.length; i++) {
//If we don't have data for a field quit out with an error
if (data[message.field[i].$.name] === undefined) {
console.log("MAVLink: No data supplied for '" + message.field[i].$.name + "'");
console.log("MAVLink: No data supplied for '" + message.field[i].$.name + "' in " + message.$.name);
return;
}

Expand Down