Commit 41a81a78 authored by Don Gagne's avatar Don Gagne

Merge pull request #2326 from DonLakeFlyer/APMMissionFriendly

Friendly edit for APM supported mission items
parents 7e110aa4 51d0f00e
...@@ -394,8 +394,15 @@ QList<MAV_CMD> APMFirmwarePlugin::supportedMissionCommands(void) ...@@ -394,8 +394,15 @@ QList<MAV_CMD> APMFirmwarePlugin::supportedMissionCommands(void)
{ {
QList<MAV_CMD> list; QList<MAV_CMD> list;
// FIXME: Temp list, just dup of PX4 list << MAV_CMD_NAV_WAYPOINT
list << MAV_CMD_NAV_WAYPOINT << MAV_CMD_NAV_LOITER_UNLIM << MAV_CMD_NAV_LOITER_TURNS << MAV_CMD_NAV_LOITER_TIME << MAV_CMD_NAV_LOITER_UNLIM << MAV_CMD_NAV_LOITER_TURNS << MAV_CMD_NAV_LOITER_TIME
<< MAV_CMD_NAV_RETURN_TO_LAUNCH << MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF << MAV_CMD_CONDITION_DELAY << MAV_CMD_DO_JUMP; << MAV_CMD_NAV_RETURN_TO_LAUNCH << MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF
<< MAV_CMD_NAV_GUIDED_ENABLE
<< MAV_CMD_DO_SET_ROI << MAV_CMD_DO_GUIDED_LIMITS << MAV_CMD_DO_JUMP << MAV_CMD_DO_CHANGE_SPEED << MAV_CMD_DO_SET_CAM_TRIGG_DIST
<< MAV_CMD_DO_SET_RELAY << MAV_CMD_DO_REPEAT_RELAY
<< MAV_CMD_DO_SET_SERVO << MAV_CMD_DO_REPEAT_SERVO
<< MAV_CMD_DO_DIGICAM_CONFIGURE << MAV_CMD_DO_DIGICAM_CONTROL
<< MAV_CMD_DO_MOUNT_CONTROL
<< MAV_CMD_CONDITION_DELAY << MAV_CMD_CONDITION_CHANGE_ALT << MAV_CMD_CONDITION_DISTANCE << MAV_CMD_CONDITION_YAW;
return list; return list;
} }
...@@ -214,8 +214,14 @@ QList<MAV_CMD> PX4FirmwarePlugin::supportedMissionCommands(void) ...@@ -214,8 +214,14 @@ QList<MAV_CMD> PX4FirmwarePlugin::supportedMissionCommands(void)
list << MAV_CMD_NAV_WAYPOINT list << MAV_CMD_NAV_WAYPOINT
<< MAV_CMD_NAV_LOITER_UNLIM << MAV_CMD_NAV_LOITER_TURNS << MAV_CMD_NAV_LOITER_TIME << MAV_CMD_NAV_LOITER_UNLIM << MAV_CMD_NAV_LOITER_TURNS << MAV_CMD_NAV_LOITER_TIME
<< MAV_CMD_NAV_RETURN_TO_LAUNCH << MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF
<< MAV_CMD_NAV_ROI << MAV_CMD_NAV_ROI
<< MAV_CMD_NAV_LAND << MAV_CMD_NAV_TAKEOFF << MAV_CMD_NAV_GUIDED_ENABLE
<< MAV_CMD_DO_JUMP << MAV_CMD_DO_SET_SERVO; << MAV_CMD_DO_SET_ROI << MAV_CMD_DO_GUIDED_LIMITS << MAV_CMD_DO_JUMP << MAV_CMD_DO_CHANGE_SPEED << MAV_CMD_DO_SET_CAM_TRIGG_DIST
<< MAV_CMD_DO_SET_RELAY << MAV_CMD_DO_REPEAT_RELAY
<< MAV_CMD_DO_SET_SERVO << MAV_CMD_DO_REPEAT_SERVO
<< MAV_CMD_DO_DIGICAM_CONFIGURE << MAV_CMD_DO_DIGICAM_CONTROL
<< MAV_CMD_DO_MOUNT_CONTROL
<< MAV_CMD_CONDITION_DELAY << MAV_CMD_CONDITION_CHANGE_ALT << MAV_CMD_CONDITION_DISTANCE << MAV_CMD_CONDITION_YAW;
return list; return list;
} }
...@@ -5,9 +5,10 @@ ...@@ -5,9 +5,10 @@
{ {
"comment": "MAV_CMD_NAV_LAST: Used for fake home position waypoint", "comment": "MAV_CMD_NAV_LAST: Used for fake home position waypoint",
"id": 95, "id": 95,
"rawName": "Home", "rawName": "HomeRaw",
"friendlyName": "Home", "friendlyName": "Home",
"description": "Home Position", "description": "Home Position",
"description": "Home Position",
"specifiesCoordinate": true, "specifiesCoordinate": true,
"friendlyEdit": true "friendlyEdit": true
}, },
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
}, },
"param4": { "param4": {
"label": "Heading:", "label": "Heading:",
"units": "degrees", "units": "degreesConvert",
"default": 0.0, "default": 0.0,
"decimalPlaces": 2 "decimalPlaces": 2
} }
...@@ -114,13 +115,13 @@ ...@@ -114,13 +115,13 @@
"friendlyEdit": true, "friendlyEdit": true,
"param1": { "param1": {
"label": "Pitch:", "label": "Pitch:",
"units": "degrees", "units": "degreesConvert",
"default": 0.26179939, "default": 0.26179939,
"decimalPlaces": 2 "decimalPlaces": 2
}, },
"param4": { "param4": {
"label": "Heading:", "label": "Heading:",
"units": "degrees", "units": "degreesConvert",
"default": 0.0, "default": 0.0,
"decimalPlaces": 2 "decimalPlaces": 2
} }
...@@ -133,7 +134,7 @@ ...@@ -133,7 +134,7 @@
{ {
"id": 80, "id": 80,
"rawName": "MAV_CMD_NAV_ROI", "rawName": "MAV_CMD_NAV_ROI",
"friendlyName": "Region of interest", "friendlyName": "Region of interest (nav)",
"description": "Sets the region of interest for cameras.", "description": "Sets the region of interest for cameras.",
"specifiesCoordinate": true, "specifiesCoordinate": true,
"friendlyEdit": true, "friendlyEdit": true,
...@@ -150,7 +151,7 @@ ...@@ -150,7 +151,7 @@
"decimalPlaces": 0 "decimalPlaces": 0
}, },
"param3": { "param3": {
"label": "ROI index:", "label": "ROI Index:",
"default": 0, "default": 0,
"decimalPlaces": 0 "decimalPlaces": 0
} }
...@@ -158,7 +159,17 @@ ...@@ -158,7 +159,17 @@
{ "id": 81, "rawName": "MAV_CMD_NAV_PATHPLANNING", "friendlyName": "MAV_CMD_NAV_PATHPLANNING" }, { "id": 81, "rawName": "MAV_CMD_NAV_PATHPLANNING", "friendlyName": "MAV_CMD_NAV_PATHPLANNING" },
{ "id": 82, "rawName": "MAV_CMD_NAV_SPLINE_WAYPOINT", "friendlyName": "MAV_CMD_NAV_SPLINE_WAYPOINT" }, { "id": 82, "rawName": "MAV_CMD_NAV_SPLINE_WAYPOINT", "friendlyName": "MAV_CMD_NAV_SPLINE_WAYPOINT" },
{ "id": 83, "rawName": "MAV_CMD_NAV_ALTITUDE_WAIT", "friendlyName": "MAV_CMD_NAV_ALTITUDE_WAIT" }, { "id": 83, "rawName": "MAV_CMD_NAV_ALTITUDE_WAIT", "friendlyName": "MAV_CMD_NAV_ALTITUDE_WAIT" },
{ "id": 92, "rawName": "MAV_CMD_NAV_GUIDED_ENABLE", "friendlyName": "MAV_CMD_NAV_GUIDED_ENABLE" }, {
"id": 92,
"rawName": "MAV_CMD_NAV_GUIDED_ENABLE",
"friendlyName": "Guided enable",
"description": "Enable/Disabled guided mode.",
"param1": {
"label": "Enable:",
"default": 1,
"decimalPlaces": 0
}
},
{ {
"id": 112, "id": 112,
"rawName": "MAV_CMD_CONDITION_DELAY", "rawName": "MAV_CMD_CONDITION_DELAY",
...@@ -172,9 +183,65 @@ ...@@ -172,9 +183,65 @@
"decimalPlaces": 0 "decimalPlaces": 0
} }
}, },
{ "id": 113, "rawName": "MAV_CMD_CONDITION_CHANGE_ALT", "friendlyName": "MAV_CMD_CONDITION_CHANGE_ALT" }, {
{ "id": 114, "rawName": "MAV_CMD_CONDITION_DISTANCE", "friendlyName": "MAV_CMD_CONDITION_DISTANCE" }, "id": 113,
{ "id": 115, "rawName": "MAV_CMD_CONDITION_YAW", "friendlyName": "MAV_CMD_CONDITION_YAW" }, "rawName": "MAV_CMD_CONDITION_CHANGE_ALT",
"description": "Delay the mission until the specified altitide is reached.",
"friendlyName": "Wait for altitude",
"param1": {
"label": "Rate:",
"units": "m/s",
"default": 5,
"decimalPlaces": 2
},
"param7": {
"label": "Altitude:",
"units": "meters",
"default": 55,
"decimalPlaces": 2
}
},
{
"id": 114,
"rawName": "MAV_CMD_CONDITION_DISTANCE",
"description": "Delay the mission until within the specified distance of the next waypoint.",
"friendlyName": "Wait for distance",
"param1": {
"label": "Distance:",
"units": "meters",
"default": 0,
"decimalPlaces": 2
}
},
{
"id": 115,
"rawName": "MAV_CMD_CONDITION_YAW",
"friendlyName": "Wait for Heading",
"description": "Delay the mission until the specified heading is reached.",
"param1": {
"label": "Heading:",
"units": "degrees",
"default": 0,
"decimalPlaces": 1
},
"param2": {
"label": "Rate:",
"units": "degrees/s",
"default": 5,
"decimalPlaces": 1
},
"param3": {
"label": "Direction:",
"default": 1,
"decimalPlaces": 0
},
"param3": {
"label": "Offset:",
"enumStrings": "Relative,Absolute",
"enumValues": "1,0",
"default": 5
}
},
{ "id": 159, "rawName": "MAV_CMD_CONDITION_LAST", "friendlyName": "MAV_CMD_CONDITION_LAST" }, { "id": 159, "rawName": "MAV_CMD_CONDITION_LAST", "friendlyName": "MAV_CMD_CONDITION_LAST" },
{ "id": 176, "rawName": "MAV_CMD_DO_SET_MODE", "friendlyName": "MAV_CMD_DO_SET_MODE" }, { "id": 176, "rawName": "MAV_CMD_DO_SET_MODE", "friendlyName": "MAV_CMD_DO_SET_MODE" },
{ {
...@@ -194,11 +261,68 @@ ...@@ -194,11 +261,68 @@
"decimalPlaces": 0 "decimalPlaces": 0
} }
}, },
{ "id": 178, "rawName": "MAV_CMD_DO_CHANGE_SPEED", "friendlyName": "MAV_CMD_DO_CHANGE_SPEED" }, {
"id": 178,
"rawName": "MAV_CMD_DO_CHANGE_SPEED",
"friendlyName": "Change speed",
"description": "Change speed and/or throttle set points.",
"param1": {
"label": "Type:",
"enumStrings": "Airspeed,Ground Speed",
"enumValues": "0,1",
"default": 1
},
"param2": {
"label": "Speed:",
"units": "m/s",
"default": -1
},
"param3": {
"label": "Throttle:",
"units": "%",
"default": -1
}
},
{ "id": 179, "rawName": "MAV_CMD_DO_SET_HOME", "friendlyName": "MAV_CMD_DO_SET_HOME" }, { "id": 179, "rawName": "MAV_CMD_DO_SET_HOME", "friendlyName": "MAV_CMD_DO_SET_HOME" },
{ "id": 180, "rawName": "MAV_CMD_DO_SET_PARAMETER", "friendlyName": "MAV_CMD_DO_SET_PARAMETER" }, { "id": 180, "rawName": "MAV_CMD_DO_SET_PARAMETER", "friendlyName": "MAV_CMD_DO_SET_PARAMETER" },
{ "id": 181, "rawName": "MAV_CMD_DO_SET_RELAY", "friendlyName": "MAV_CMD_DO_SET_RELAY" }, {
{ "id": 182, "rawName": "MAV_CMD_DO_REPEAT_RELAY", "friendlyName": "MAV_CMD_DO_REPEAT_RELAY" }, "id": 181,
"rawName": "MAV_CMD_DO_SET_RELAY",
"friendlyName": "Set relay",
"description": "Set relay to a condition.",
"param1": {
"label": "Relay #:",
"default": 0,
"decimalPlaces": 0
},
"param2": {
"label": "Value:",
"default": 0
}
},
{
"id": 182,
"rawName": "MAV_CMD_DO_REPEAT_RELAY",
"friendlyName": "Cycle relay",
"description": "Cycle relay on/off for desired cycles/time.",
"param1": {
"label": "Relay #:",
"default": 0,
"decimalPlaces": 0
},
"param2": {
"label": "Cycles:",
"default": 1,
"units": "count",
"decimalPlaces": 0
},
"param3": {
"label": "Time:",
"default": 10,
"units": "seconds",
"decimalPlaces": 0
}
},
{ {
"id": 183, "id": 183,
"rawName": "MAV_CMD_DO_SET_SERVO", "rawName": "MAV_CMD_DO_SET_SERVO",
...@@ -216,27 +340,219 @@ ...@@ -216,27 +340,219 @@
"decimalPlaces": 0 "decimalPlaces": 0
} }
}, },
{ "id": 184, "rawName": "MAV_CMD_DO_REPEAT_SERVO", "friendlyName": "MAV_CMD_DO_REPEAT_SERVO" }, {
"id": 184,
"rawName": "MAV_CMD_DO_REPEAT_SERVO",
"friendlyName": "Cycle servo",
"description": "Set servo to specified PWM value.",
"param1": {
"label": "Servo:",
"default": 1,
"decimalPlaces": 0
},
"param2": {
"label": "PWM:",
"default": 1000,
"decimalPlaces": 0
},
"param3": {
"label": "Cycles:",
"default": 1,
"units": "count",
"decimalPlaces": 0
},
"param4": {
"label": "Time:",
"default": 10,
"units": "seconds",
"decimalPlaces": 0
}
},
{ "id": 185, "rawName": "MAV_CMD_DO_FLIGHTTERMINATION", "friendlyName": "MAV_CMD_DO_FLIGHTTERMINATION" }, { "id": 185, "rawName": "MAV_CMD_DO_FLIGHTTERMINATION", "friendlyName": "MAV_CMD_DO_FLIGHTTERMINATION" },
{ "id": 189, "rawName": "MAV_CMD_DO_LAND_START", "friendlyName": "MAV_CMD_DO_LAND_START" }, { "id": 189, "rawName": "MAV_CMD_DO_LAND_START", "friendlyName": "MAV_CMD_DO_LAND_START" },
{ "id": 190, "rawName": "MAV_CMD_DO_RALLY_LAND", "friendlyName": "MAV_CMD_DO_RALLY_LAND" }, { "id": 190, "rawName": "MAV_CMD_DO_RALLY_LAND", "friendlyName": "MAV_CMD_DO_RALLY_LAND" },
{ "id": 191, "rawName": "MAV_CMD_DO_GO_AROUND", "friendlyName": "MAV_CMD_DO_GO_AROUND" }, { "id": 191, "rawName": "MAV_CMD_DO_GO_AROUND", "friendlyName": "MAV_CMD_DO_GO_AROUND" },
{ "id": 200, "rawName": "MAV_CMD_DO_CONTROL_VIDEO", "friendlyName": "MAV_CMD_DO_CONTROL_VIDEO" }, { "id": 200, "rawName": "MAV_CMD_DO_CONTROL_VIDEO", "friendlyName": "MAV_CMD_DO_CONTROL_VIDEO" },
{ "id": 201, "rawName": "MAV_CMD_DO_SET_ROI", "friendlyName": "MAV_CMD_DO_SET_ROI" }, {
{ "id": 202, "rawName": "MAV_CMD_DO_DIGICAM_CONFIGURE", "friendlyName": "MAV_CMD_DO_DIGICAM_CONFIGURE" }, "id": 201,
{ "id": 203, "rawName": "MAV_CMD_DO_DIGICAM_CONTROL", "friendlyName": "MAV_CMD_DO_DIGICAM_CONTROL" }, "rawName": "MAV_CMD_DO_SET_ROI",
"friendlyName": "Region of interest (cmd)" ,
"description": "Sets the region of interest for cameras.",
"specifiesCoordinate": true,
"friendlyEdit": true,
"param1": {
"label": "Mode:",
"enumStrings": "None,Next waypoint,Mission item,Location,ROI item",
"enumValues": "0,1,2,3,4",
"default": 3,
"decimalPlaces": 0
},
"param2": {
"label": "Mission Index:",
"default": 0,
"decimalPlaces": 0
},
"param3": {
"label": "ROI Index:",
"default": 0,
"decimalPlaces": 0
}
},
{
"id": 202,
"rawName": "MAV_CMD_DO_DIGICAM_CONFIGURE",
"friendlyName": "Camera config",
"description": "Configure onboard camera controller.",
"param1": {
"label": "Mode:",
"default": 0,
"decimalPlaces": 0
},
"param2": {
"label": "Shutter spd:",
"default": 60,
"units": "1/secs",
"decimalPlaces": 0
},
"param3": {
"label": "Aperture:",
"default": 4,
"units": "F stop",
"decimalPlaces": 1
},
"param4": {
"label": "ISO:",
"default": 200,
"decimalPlaces": 0
},
"param5": {
"label": "Exposure:",
"default": 0,
"decimalPlaces": 0
},
"param6": {
"label": "Command:",
"default": 0,
"decimalPlaces": 0
},
"param7": {
"label": "Cut off:",
"default": 0,
"decimalPlaces": 2
}
},
{
"id": 203,
"friendlyName": "Camera control",
"rawName": "MAV_CMD_DO_DIGICAM_CONTROL",
"description": "Control onboard camera.",
"param1": {
"label": "Session:",
"default": 0,
"decimalPlaces": 0
},
"param2": {
"label": "Zoom:",
"default": 0,
"decimalPlaces": 3
},
"param3": {
"label": "Step:",
"default": 0,
"decimalPlaces": 3
},
"param4": {
"label": "Focus lock:",
"default": 0,
"decimalPlaces": 0
},
"param5": {
"label": "Command:",
"default": 0,
"decimalPlaces": 0
},
"param6": {
"label": "Id:",
"default": 0,
"decimalPlaces": 0
}
},
{ "id": 204, "rawName": "MAV_CMD_DO_MOUNT_CONFIGURE", "friendlyName": "MAV_CMD_DO_MOUNT_CONFIGURE" }, { "id": 204, "rawName": "MAV_CMD_DO_MOUNT_CONFIGURE", "friendlyName": "MAV_CMD_DO_MOUNT_CONFIGURE" },
{ "id": 205, "rawName": "MAV_CMD_DO_MOUNT_CONTROL", "friendlyName": "MAV_CMD_DO_MOUNT_CONTROL" }, {
{ "id": 206, "rawName": "MAV_CMD_DO_SET_CAM_TRIGG_DIST", "friendlyName": "MAV_CMD_DO_SET_CAM_TRIGG_DIST" }, "id": 205,
"rawName": "MAV_CMD_DO_MOUNT_CONTROL",
"friendlyName": "Mount config",
"description": "Control antenna mount or camera.",
"param1": {
"label": "Lat/Pitch:",
"default": 0,
"decimalPlaces": 7
},
"param2": {
"label": "Lon/Roll:",
"default": 0,
"decimalPlaces": 7
},
"param3": {
"label": "Alt/Yaw:",
"default": 0,
"decimalPlaces": 7
},
"param7": {
"label": "Mode:",
"default": 0,
"decimalPlaces": 0,
"enumStrings": "Retract,Neutral,Mavlink Targetting,RC Targetting, GPS Point",
"enumValues": "0,1,2,3,4"
}
},
{
"id": 206,
"rawName": "MAV_CMD_DO_SET_CAM_TRIGG_DIST",
"friendlyName": "Camera trigger distance",
"description": "Set camera trigger distance.",
"param1": {
"label": "Distance:",
"default": 25,
"units": "meters",
"decimalPlaces": 2
}
},
{ "id": 207, "rawName": "MAV_CMD_DO_FENCE_ENABLE", "friendlyName": "MAV_CMD_DO_FENCE_ENABLE" }, { "id": 207, "rawName": "MAV_CMD_DO_FENCE_ENABLE", "friendlyName": "MAV_CMD_DO_FENCE_ENABLE" },
{ "id": 208, "rawName": "MAV_CMD_DO_PARACHUTE", "friendlyName": "MAV_CMD_DO_PARACHUTE" }, { "id": 208, "rawName": "MAV_CMD_DO_PARACHUTE", "friendlyName": "MAV_CMD_DO_PARACHUTE" },
{ "id": 209, "rawName": "MAV_CMD_DO_MOTOR_TEST", "friendlyName": "MAV_CMD_DO_MOTOR_TEST" }, { "id": 209, "rawName": "MAV_CMD_DO_MOTOR_TEST", "friendlyName": "MAV_CMD_DO_MOTOR_TEST" },
{ "id": 210, "rawName": "MAV_CMD_DO_INVERTED_FLIGHT", "friendlyName": "MAV_CMD_DO_INVERTED_FLIGHT" }, { "id": 210, "rawName": "MAV_CMD_DO_INVERTED_FLIGHT", "friendlyName": "MAV_CMD_DO_INVERTED_FLIGHT" },
{ "id": 211, "rawName": "MAV_CMD_DO_GRIPPER", "friendlyName": "MAV_CMD_DO_GRIPPER" },
{ "id": 212, "rawName": "MAV_CMD_DO_AUTOTUNE_ENABLE", "friendlyName": "MAV_CMD_DO_AUTOTUNE_ENABLE" },
{ "id": 220, "rawName": "MAV_CMD_DO_MOUNT_CONTROL_QUAT", "friendlyName": "MAV_CMD_DO_MOUNT_CONTROL_QUAT" }, { "id": 220, "rawName": "MAV_CMD_DO_MOUNT_CONTROL_QUAT", "friendlyName": "MAV_CMD_DO_MOUNT_CONTROL_QUAT" },
{ "id": 221, "rawName": "MAV_CMD_DO_GUIDED_MASTER", "friendlyName": "MAV_CMD_DO_GUIDED_MASTER" }, { "id": 221, "rawName": "MAV_CMD_DO_GUIDED_MASTER", "friendlyName": "MAV_CMD_DO_GUIDED_MASTER" },
{ "id": 222, "rawName": "MAV_CMD_DO_GUIDED_LIMITS", "friendlyName": "MAV_CMD_DO_GUIDED_LIMITS" }, {
"id": 222,
"rawName": "MAV_CMD_DO_GUIDED_LIMITS",
"friendlyName": "Exetrnal control limits",
"description": "Set limits for external control",
"param1": {
"label": "Timeout:",
"default": 0,
"units": "seconds",
"decimalPlaces": 0
},
"param2": {
"label": "Min Alt:",
"default": 25,
"units": "m(AMSL)",
"decimalPlaces": 2
},
"param3": {
"label": "Max Alt:",
"default": 100,
"decimalPlaces": 7
},
"param4": {
"label": "H Limit:",
"default": 25,
"units": "m(AMSL)",
"decimalPlaces": 2
}
},
{ "id": 252, "rawName": "MAV_CMD_OVERRIDE_GOTO", "friendlyName": "MAV_CMD_OVERRIDE_GOTO" }, { "id": 252, "rawName": "MAV_CMD_OVERRIDE_GOTO", "friendlyName": "MAV_CMD_OVERRIDE_GOTO" },
{ "id": 300, "rawName": "MAV_CMD_MISSION_START", "friendlyName": "MAV_CMD_MISSION_START" }, { "id": 300, "rawName": "MAV_CMD_MISSION_START", "friendlyName": "MAV_CMD_MISSION_START" },
{ "id": 400, "rawName": "MAV_CMD_COMPONENT_ARM_DISARM", "friendlyName": "MAV_CMD_COMPONENT_ARM_DISARM" }, { "id": 400, "rawName": "MAV_CMD_COMPONENT_ARM_DISARM", "friendlyName": "MAV_CMD_COMPONENT_ARM_DISARM" },
......
...@@ -49,6 +49,8 @@ FactMetaData* MissionItem::_supportedCommandMetaData = NULL; ...@@ -49,6 +49,8 @@ FactMetaData* MissionItem::_supportedCommandMetaData = NULL;
const QString MissionItem::_decimalPlacesJsonKey (QStringLiteral("decimalPlaces")); const QString MissionItem::_decimalPlacesJsonKey (QStringLiteral("decimalPlaces"));
const QString MissionItem::_defaultJsonKey (QStringLiteral("default")); const QString MissionItem::_defaultJsonKey (QStringLiteral("default"));
const QString MissionItem::_descriptionJsonKey (QStringLiteral("description")); const QString MissionItem::_descriptionJsonKey (QStringLiteral("description"));
const QString MissionItem::_enumStringsJsonKey (QStringLiteral("enumStrings"));
const QString MissionItem::_enumValuesJsonKey (QStringLiteral("enumValues"));
const QString MissionItem::_friendlyEditJsonKey (QStringLiteral("friendlyEdit")); const QString MissionItem::_friendlyEditJsonKey (QStringLiteral("friendlyEdit"));
const QString MissionItem::_friendlyNameJsonKey (QStringLiteral("friendlyName")); const QString MissionItem::_friendlyNameJsonKey (QStringLiteral("friendlyName"));
const QString MissionItem::_idJsonKey (QStringLiteral("id")); const QString MissionItem::_idJsonKey (QStringLiteral("id"));
...@@ -64,6 +66,7 @@ const QString MissionItem::_specifiesCoordinateJsonKey (QStringLiteral("specifi ...@@ -64,6 +66,7 @@ const QString MissionItem::_specifiesCoordinateJsonKey (QStringLiteral("specifi
const QString MissionItem::_unitsJsonKey (QStringLiteral("units")); const QString MissionItem::_unitsJsonKey (QStringLiteral("units"));
const QString MissionItem::_versionJsonKey (QStringLiteral("version")); const QString MissionItem::_versionJsonKey (QStringLiteral("version"));
const QString MissionItem::_degreesConvertUnits (QStringLiteral("degreesConvert"));
const QString MissionItem::_degreesUnits (QStringLiteral("degrees")); const QString MissionItem::_degreesUnits (QStringLiteral("degrees"));
QMap<MAV_CMD, MissionItem::MavCmdInfo_t> MissionItem::_mavCmdInfoMap; QMap<MAV_CMD, MissionItem::MavCmdInfo_t> MissionItem::_mavCmdInfoMap;
...@@ -116,8 +119,8 @@ MissionItem::MissionItem(QObject* parent) ...@@ -116,8 +119,8 @@ MissionItem::MissionItem(QObject* parent)
, _homePositionValid(false) , _homePositionValid(false)
, _altitudeRelativeToHomeFact (0, "Altitude is relative to home", FactMetaData::valueTypeUint32) , _altitudeRelativeToHomeFact (0, "Altitude is relative to home", FactMetaData::valueTypeUint32)
, _autoContinueFact (0, "AutoContinue", FactMetaData::valueTypeUint32) , _autoContinueFact (0, "AutoContinue", FactMetaData::valueTypeUint32)
, _commandFact (0, "Command:", FactMetaData::valueTypeUint32) , _commandFact (0, "", FactMetaData::valueTypeUint32)
, _frameFact (0, "Frame:", FactMetaData::valueTypeUint32) , _frameFact (0, "", FactMetaData::valueTypeUint32)
, _param1Fact (0, "Param1:", FactMetaData::valueTypeDouble) , _param1Fact (0, "Param1:", FactMetaData::valueTypeDouble)
, _param2Fact (0, "Param2:", FactMetaData::valueTypeDouble) , _param2Fact (0, "Param2:", FactMetaData::valueTypeDouble)
, _param3Fact (0, "Param3:", FactMetaData::valueTypeDouble) , _param3Fact (0, "Param3:", FactMetaData::valueTypeDouble)
...@@ -130,6 +133,9 @@ MissionItem::MissionItem(QObject* parent) ...@@ -130,6 +133,9 @@ MissionItem::MissionItem(QObject* parent)
, _param2MetaData(FactMetaData::valueTypeDouble) , _param2MetaData(FactMetaData::valueTypeDouble)
, _param3MetaData(FactMetaData::valueTypeDouble) , _param3MetaData(FactMetaData::valueTypeDouble)
, _param4MetaData(FactMetaData::valueTypeDouble) , _param4MetaData(FactMetaData::valueTypeDouble)
, _param5MetaData(FactMetaData::valueTypeDouble)
, _param6MetaData(FactMetaData::valueTypeDouble)
, _param7MetaData(FactMetaData::valueTypeDouble)
, _syncingAltitudeRelativeToHomeAndFrame (false) , _syncingAltitudeRelativeToHomeAndFrame (false)
, _syncingHeadingDegreesAndParam4 (false) , _syncingHeadingDegreesAndParam4 (false)
, _syncingSupportedCommandAndCommand (false) , _syncingSupportedCommandAndCommand (false)
...@@ -177,6 +183,9 @@ MissionItem::MissionItem(int sequenceNumber, ...@@ -177,6 +183,9 @@ MissionItem::MissionItem(int sequenceNumber,
, _param2MetaData(FactMetaData::valueTypeDouble) , _param2MetaData(FactMetaData::valueTypeDouble)
, _param3MetaData(FactMetaData::valueTypeDouble) , _param3MetaData(FactMetaData::valueTypeDouble)
, _param4MetaData(FactMetaData::valueTypeDouble) , _param4MetaData(FactMetaData::valueTypeDouble)
, _param5MetaData(FactMetaData::valueTypeDouble)
, _param6MetaData(FactMetaData::valueTypeDouble)
, _param7MetaData(FactMetaData::valueTypeDouble)
, _syncingAltitudeRelativeToHomeAndFrame (false) , _syncingAltitudeRelativeToHomeAndFrame (false)
, _syncingHeadingDegreesAndParam4 (false) , _syncingHeadingDegreesAndParam4 (false)
, _syncingSupportedCommandAndCommand (false) , _syncingSupportedCommandAndCommand (false)
...@@ -293,6 +302,9 @@ void MissionItem::_connectSignals(void) ...@@ -293,6 +302,9 @@ void MissionItem::_connectSignals(void)
connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::_sendFriendlyEditAllowedChanged); connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::_sendFriendlyEditAllowedChanged);
connect(&_frameFact, &Fact::valueChanged, this, &MissionItem::_sendFriendlyEditAllowedChanged); connect(&_frameFact, &Fact::valueChanged, this, &MissionItem::_sendFriendlyEditAllowedChanged);
// When the command changes we need to set defaults. This must go out before the signals below so it must be registered first.
connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::setDefaultsForCommand);
// Whenever these properties change the ui model changes as well // Whenever these properties change the ui model changes as well
connect(this, &MissionItem::commandChanged, this, &MissionItem::_sendUiModelChanged); connect(this, &MissionItem::commandChanged, this, &MissionItem::_sendUiModelChanged);
connect(this, &MissionItem::rawEditChanged, this, &MissionItem::_sendUiModelChanged); connect(this, &MissionItem::rawEditChanged, this, &MissionItem::_sendUiModelChanged);
...@@ -301,8 +313,6 @@ void MissionItem::_connectSignals(void) ...@@ -301,8 +313,6 @@ void MissionItem::_connectSignals(void)
connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::_sendCommandChanged); connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::_sendCommandChanged);
connect(&_frameFact, &Fact::valueChanged, this, &MissionItem::_sendFrameChanged); connect(&_frameFact, &Fact::valueChanged, this, &MissionItem::_sendFrameChanged);
// When the command changes we need to set defaults
connect(&_commandFact, &Fact::valueChanged, this, &MissionItem::setDefaultsForCommand);
} }
bool MissionItem::_validateKeyTypes(QJsonObject& jsonObject, const QStringList& keys, const QList<QJsonValue::Type>& types) bool MissionItem::_validateKeyTypes(QJsonObject& jsonObject, const QStringList& keys, const QList<QJsonValue::Type>& types)
...@@ -398,7 +408,7 @@ bool MissionItem::_loadMavCmdInfoJson(void) ...@@ -398,7 +408,7 @@ bool MissionItem::_loadMavCmdInfoJson(void)
// Read params // Read params
for (int i=1; i<5; i++) { for (int i=1; i<=7; i++) {
QString paramKey = QString(_paramJsonKeyFormat).arg(i); QString paramKey = QString(_paramJsonKeyFormat).arg(i);
if (jsonObject.contains(paramKey)) { if (jsonObject.contains(paramKey)) {
...@@ -407,8 +417,8 @@ bool MissionItem::_loadMavCmdInfoJson(void) ...@@ -407,8 +417,8 @@ bool MissionItem::_loadMavCmdInfoJson(void)
// Validate key types // Validate key types
QStringList keys; QStringList keys;
QList<QJsonValue::Type> types; QList<QJsonValue::Type> types;
keys << _labelJsonKey << _unitsJsonKey << _defaultJsonKey << _decimalPlacesJsonKey; keys << _defaultJsonKey << _decimalPlacesJsonKey << _enumStringsJsonKey << _enumValuesJsonKey << _labelJsonKey << _unitsJsonKey;
types << QJsonValue::String << QJsonValue::String << QJsonValue::Double << QJsonValue::Double; types << QJsonValue::Double << QJsonValue::Double << QJsonValue::String << QJsonValue::String << QJsonValue::String << QJsonValue::String;
if (!_validateKeyTypes(paramObject, keys, types)) { if (!_validateKeyTypes(paramObject, keys, types)) {
return false; return false;
} }
...@@ -420,10 +430,41 @@ bool MissionItem::_loadMavCmdInfoJson(void) ...@@ -420,10 +430,41 @@ bool MissionItem::_loadMavCmdInfoJson(void)
return false; return false;
} }
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].param = i; _mavCmdInfoMap[mavCmdInfo.command].friendlyEdit = true; // Assume friendly edit if we have params
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].units = paramObject.value(_unitsJsonKey).toString();
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].defaultValue = paramObject.value(_defaultJsonKey).toDouble(0.0); _mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].defaultValue = paramObject.value(_defaultJsonKey).toDouble(0.0);
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].decimalPlaces = paramObject.value(_decimalPlacesJsonKey).toInt(FactMetaData::defaultDecimalPlaces); _mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].decimalPlaces = paramObject.value(_decimalPlacesJsonKey).toInt(FactMetaData::defaultDecimalPlaces);
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].enumStrings = paramObject.value(_enumStringsJsonKey).toString().split(",", QString::SkipEmptyParts);
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].param = i;
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].units = paramObject.value(_unitsJsonKey).toString();
QStringList enumValues = paramObject.value(_enumValuesJsonKey).toString().split(",", QString::SkipEmptyParts);
foreach (QString enumValue, enumValues) {
bool convertOk;
double value = enumValue.toDouble(&convertOk);
if (!convertOk) {
qWarning() << "Bad enumValue" << enumValue;
return false;
}
_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].enumValues << QVariant(value);
}
if (_mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].enumStrings.count() != _mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].enumStrings.count()) {
qWarning() << "enum strings/values count mismatch" << _mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].enumStrings.count() << _mavCmdInfoMap[mavCmdInfo.command].paramInfoMap[i].enumStrings.count();
return false;
}
}
}
if (mavCmdInfo.friendlyEdit) {
if (mavCmdInfo.description.isEmpty()) {
qWarning() << "Missing description" << mavCmdInfo.rawName;
return false;
}
if (mavCmdInfo.rawName == mavCmdInfo.friendlyName) {
qWarning() << "Missing friendly name" << mavCmdInfo.rawName << mavCmdInfo.friendlyName;
return false;
} }
} }
} }
...@@ -692,48 +733,26 @@ QmlObjectListModel* MissionItem::textFieldFacts(void) ...@@ -692,48 +733,26 @@ QmlObjectListModel* MissionItem::textFieldFacts(void)
MAV_CMD command = (MAV_CMD)this->command(); MAV_CMD command = (MAV_CMD)this->command();
if (_mavCmdInfoMap[command].paramInfoMap.contains(1)) { Fact* rgParamFacts[7] = { &_param1Fact, &_param2Fact, &_param3Fact, &_param4Fact, &_param5Fact, &_param6Fact, &_param7Fact };
_param1Fact._setName(_mavCmdInfoMap[command].paramInfoMap[1].label); FactMetaData* rgParamMetaData[7] = { &_param1MetaData, &_param2MetaData, &_param3MetaData, &_param4MetaData, &_param5MetaData, &_param6MetaData, &_param7MetaData };
_param1MetaData.setUnits(_mavCmdInfoMap[command].paramInfoMap[1].units);
_param1MetaData.setDecimalPlaces(_mavCmdInfoMap[command].paramInfoMap[1].decimalPlaces);
if (_mavCmdInfoMap[command].paramInfoMap[1].units == _degreesUnits) {
_param1MetaData.setTranslators(_radiansToDegrees, _degreesToRadians);
}
_param1Fact.setMetaData(&_param1MetaData);
model->append(&_param1Fact);
}
if (_mavCmdInfoMap[command].paramInfoMap.contains(2)) {
_param2Fact._setName(_mavCmdInfoMap[command].paramInfoMap[2].label);
_param2MetaData.setUnits(_mavCmdInfoMap[command].paramInfoMap[2].units);
_param2MetaData.setDecimalPlaces(_mavCmdInfoMap[command].paramInfoMap[2].decimalPlaces);
if (_mavCmdInfoMap[command].paramInfoMap[2].units == _degreesUnits) {
_param2MetaData.setTranslators(_radiansToDegrees, _degreesToRadians);
}
_param2Fact.setMetaData(&_param2MetaData);
model->append(&_param2Fact);
}
if (_mavCmdInfoMap[command].paramInfoMap.contains(3)) { for (int i=1; i<=7; i++) {
_param3Fact._setName(_mavCmdInfoMap[command].paramInfoMap[3].label); if (_mavCmdInfoMap[command].paramInfoMap.contains(i) && _mavCmdInfoMap[command].paramInfoMap[i].enumStrings.count() == 0) {
_param3MetaData.setUnits(_mavCmdInfoMap[command].paramInfoMap[3].units); Fact* paramFact = rgParamFacts[i-1];
_param3MetaData.setDecimalPlaces(_mavCmdInfoMap[command].paramInfoMap[3].decimalPlaces); FactMetaData* paramMetaData = rgParamMetaData[i-1];
if (_mavCmdInfoMap[command].paramInfoMap[3].units == _degreesUnits) {
_param3MetaData.setTranslators(_radiansToDegrees, _degreesToRadians);
}
_param3Fact.setMetaData(&_param3MetaData);
model->append(&_param3Fact);
}
if (_mavCmdInfoMap[command].paramInfoMap.contains(4)) { paramFact->_setName(_mavCmdInfoMap[command].paramInfoMap[i].label);
_param4Fact._setName(_mavCmdInfoMap[command].paramInfoMap[4].label); paramMetaData->setDecimalPlaces(_mavCmdInfoMap[command].paramInfoMap[i].decimalPlaces);
_param4MetaData.setUnits(_mavCmdInfoMap[command].paramInfoMap[4].units); paramMetaData->setEnumInfo(_mavCmdInfoMap[command].paramInfoMap[i].enumStrings, _mavCmdInfoMap[command].paramInfoMap[i].enumValues);
_param4MetaData.setDecimalPlaces(_mavCmdInfoMap[command].paramInfoMap[4].decimalPlaces); if (_mavCmdInfoMap[command].paramInfoMap[i].units == _degreesConvertUnits) {
if (_mavCmdInfoMap[command].paramInfoMap[4].units == _degreesUnits) { paramMetaData->setTranslators(_radiansToDegrees, _degreesToRadians);
_param4MetaData.setTranslators(_radiansToDegrees, _degreesToRadians); paramMetaData->setUnits(_degreesUnits);
} else {
paramMetaData->setUnits(_mavCmdInfoMap[command].paramInfoMap[i].units);
}
paramFact->setMetaData(paramMetaData);
model->append(paramFact);
} }
_param4Fact.setMetaData(&_param4MetaData);
model->append(&_param4Fact);
} }
if (specifiesCoordinate()) { if (specifiesCoordinate()) {
...@@ -767,6 +786,30 @@ QmlObjectListModel* MissionItem::comboboxFacts(void) ...@@ -767,6 +786,30 @@ QmlObjectListModel* MissionItem::comboboxFacts(void)
if (rawEdit()) { if (rawEdit()) {
model->append(&_commandFact); model->append(&_commandFact);
model->append(&_frameFact); model->append(&_frameFact);
} else {
Fact* rgParamFacts[7] = { &_param1Fact, &_param2Fact, &_param3Fact, &_param4Fact, &_param5Fact, &_param6Fact, &_param7Fact };
FactMetaData* rgParamMetaData[7] = { &_param1MetaData, &_param2MetaData, &_param3MetaData, &_param4MetaData, &_param5MetaData, &_param6MetaData, &_param7MetaData };
MAV_CMD command = (MAV_CMD)this->command();
for (int i=1; i<=7; i++) {
if (_mavCmdInfoMap[command].paramInfoMap.contains(i) && _mavCmdInfoMap[command].paramInfoMap[i].enumStrings.count()) {
Fact* paramFact = rgParamFacts[i-1];
FactMetaData* paramMetaData = rgParamMetaData[i-1];
paramFact->_setName(_mavCmdInfoMap[command].paramInfoMap[i].label);
paramMetaData->setDecimalPlaces(_mavCmdInfoMap[command].paramInfoMap[i].decimalPlaces);
paramMetaData->setEnumInfo(_mavCmdInfoMap[command].paramInfoMap[i].enumStrings, _mavCmdInfoMap[command].paramInfoMap[i].enumValues);
if (_mavCmdInfoMap[command].paramInfoMap[i].units == _degreesConvertUnits) {
paramMetaData->setTranslators(_radiansToDegrees, _degreesToRadians);
paramMetaData->setUnits(_degreesUnits);
} else {
paramMetaData->setUnits(_mavCmdInfoMap[command].paramInfoMap[i].units);
}
paramFact->setMetaData(paramMetaData);
model->append(paramFact);
}
}
} }
return model; return model;
...@@ -808,7 +851,7 @@ bool MissionItem::rawEdit(void) const ...@@ -808,7 +851,7 @@ bool MissionItem::rawEdit(void) const
void MissionItem::setRawEdit(bool rawEdit) void MissionItem::setRawEdit(bool rawEdit)
{ {
if (_rawEdit != rawEdit) { if (this->rawEdit() != rawEdit) {
_rawEdit = rawEdit; _rawEdit = rawEdit;
emit rawEditChanged(this->rawEdit()); emit rawEditChanged(this->rawEdit());
} }
...@@ -893,22 +936,9 @@ void MissionItem::_syncCommandToSupportedCommand(const QVariant& value) ...@@ -893,22 +936,9 @@ void MissionItem::_syncCommandToSupportedCommand(const QVariant& value)
void MissionItem::setDefaultsForCommand(void) void MissionItem::setDefaultsForCommand(void)
{ {
foreach (ParamInfo_t paramInfo, _mavCmdInfoMap[(MAV_CMD)command()].paramInfoMap) { foreach (ParamInfo_t paramInfo, _mavCmdInfoMap[(MAV_CMD)command()].paramInfoMap) {
double defaultValue = paramInfo.defaultValue; Fact* rgParamFacts[7] = { &_param1Fact, &_param2Fact, &_param3Fact, &_param4Fact, &_param5Fact, &_param6Fact, &_param7Fact };
switch (paramInfo.param) { rgParamFacts[paramInfo.param-1]->setRawValue(paramInfo.defaultValue);
case 1:
_param1Fact.setRawValue(defaultValue);
break;
case 2:
_param2Fact.setRawValue(defaultValue);
break;
case 3:
_param3Fact.setRawValue(defaultValue);
break;
case 4:
_param4Fact.setRawValue(defaultValue);
break;
}
} }
setParam7(defaultAltitude); setParam7(defaultAltitude);
......
...@@ -215,21 +215,23 @@ private: ...@@ -215,21 +215,23 @@ private:
private: private:
typedef struct { typedef struct {
int param; double defaultValue;
QString label; int decimalPlaces;
QString units; QStringList enumStrings;
double defaultValue; QVariantList enumValues;
int decimalPlaces; QString label;
int param;
QString units;
} ParamInfo_t; } ParamInfo_t;
typedef struct { typedef struct {
MAV_CMD command; MAV_CMD command;
QString rawName;
QString friendlyName;
QString description; QString description;
bool specifiesCoordinate;
bool friendlyEdit; bool friendlyEdit;
QString friendlyName;
QMap<int, ParamInfo_t> paramInfoMap; QMap<int, ParamInfo_t> paramInfoMap;
QString rawName;
bool specifiesCoordinate;
} MavCmdInfo_t; } MavCmdInfo_t;
bool _rawEdit; bool _rawEdit;
...@@ -266,6 +268,9 @@ private: ...@@ -266,6 +268,9 @@ private:
FactMetaData _param2MetaData; FactMetaData _param2MetaData;
FactMetaData _param3MetaData; FactMetaData _param3MetaData;
FactMetaData _param4MetaData; FactMetaData _param4MetaData;
FactMetaData _param5MetaData;
FactMetaData _param6MetaData;
FactMetaData _param7MetaData;
/// This is used to reference any subsequent mission items which do not specify a coordinate. /// This is used to reference any subsequent mission items which do not specify a coordinate.
QmlObjectListModel _childItems; QmlObjectListModel _childItems;
...@@ -279,6 +284,8 @@ private: ...@@ -279,6 +284,8 @@ private:
static const QString _decimalPlacesJsonKey; static const QString _decimalPlacesJsonKey;
static const QString _defaultJsonKey; static const QString _defaultJsonKey;
static const QString _descriptionJsonKey; static const QString _descriptionJsonKey;
static const QString _enumStringsJsonKey;
static const QString _enumValuesJsonKey;
static const QString _friendlyNameJsonKey; static const QString _friendlyNameJsonKey;
static const QString _friendlyEditJsonKey; static const QString _friendlyEditJsonKey;
static const QString _idJsonKey; static const QString _idJsonKey;
...@@ -295,6 +302,7 @@ private: ...@@ -295,6 +302,7 @@ private:
static const QString _versionJsonKey; static const QString _versionJsonKey;
static const QString _degreesUnits; static const QString _degreesUnits;
static const QString _degreesConvertUnits;
}; };
QDebug operator<<(QDebug dbg, const MissionItem& missionItem); QDebug operator<<(QDebug dbg, const MissionItem& missionItem);
......
...@@ -133,11 +133,25 @@ Rectangle { ...@@ -133,11 +133,25 @@ Rectangle {
Repeater { Repeater {
model: missionItem.comboboxFacts model: missionItem.comboboxFacts
FactComboBox { Item {
width: valuesColumn.width width: valuesColumn.width
indexModel: false height: comboBoxFact.height
model: object.enumStrings
fact: object QGCLabel {
id: comboBoxLabel
anchors.baseline: comboBoxFact.baseline
text: object.name
visible: object.name != ""
}
FactComboBox {
id: comboBoxFact
anchors.right: parent.right
width: comboBoxLabel.visible ? _editFieldWidth : parent.width
indexModel: false
model: object.enumStrings
fact: object
}
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment