|
|
@ -28,13 +28,13 @@ QGC_LOGGING_CATEGORY(MockLinkVerboseLog, "MockLinkVerboseLog") |
|
|
|
|
|
|
|
|
|
|
|
enum PX4_CUSTOM_MAIN_MODE { |
|
|
|
enum PX4_CUSTOM_MAIN_MODE { |
|
|
|
PX4_CUSTOM_MAIN_MODE_MANUAL = 1, |
|
|
|
PX4_CUSTOM_MAIN_MODE_MANUAL = 1, |
|
|
|
PX4_CUSTOM_MAIN_MODE_ALTCTL, |
|
|
|
PX4_CUSTOM_MAIN_MODE_ALTCTL, |
|
|
|
PX4_CUSTOM_MAIN_MODE_POSCTL, |
|
|
|
PX4_CUSTOM_MAIN_MODE_POSCTL, |
|
|
|
PX4_CUSTOM_MAIN_MODE_AUTO, |
|
|
|
PX4_CUSTOM_MAIN_MODE_AUTO, |
|
|
|
PX4_CUSTOM_MAIN_MODE_ACRO, |
|
|
|
PX4_CUSTOM_MAIN_MODE_ACRO, |
|
|
|
PX4_CUSTOM_MAIN_MODE_OFFBOARD, |
|
|
|
PX4_CUSTOM_MAIN_MODE_OFFBOARD, |
|
|
|
PX4_CUSTOM_MAIN_MODE_STABILIZED, |
|
|
|
PX4_CUSTOM_MAIN_MODE_STABILIZED, |
|
|
|
PX4_CUSTOM_MAIN_MODE_RATTITUDE |
|
|
|
PX4_CUSTOM_MAIN_MODE_RATTITUDE |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
enum PX4_CUSTOM_SUB_MODE_AUTO { |
|
|
|
enum PX4_CUSTOM_SUB_MODE_AUTO { |
|
|
@ -226,31 +226,31 @@ void MockLink::_loadParams(void) |
|
|
|
|
|
|
|
|
|
|
|
QVariant paramValue; |
|
|
|
QVariant paramValue; |
|
|
|
switch (paramType) { |
|
|
|
switch (paramType) { |
|
|
|
case MAV_PARAM_TYPE_REAL32: |
|
|
|
case MAV_PARAM_TYPE_REAL32: |
|
|
|
paramValue = QVariant(valStr.toFloat()); |
|
|
|
paramValue = QVariant(valStr.toFloat()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_PARAM_TYPE_UINT32: |
|
|
|
case MAV_PARAM_TYPE_UINT32: |
|
|
|
paramValue = QVariant(valStr.toUInt()); |
|
|
|
paramValue = QVariant(valStr.toUInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_PARAM_TYPE_INT32: |
|
|
|
case MAV_PARAM_TYPE_INT32: |
|
|
|
paramValue = QVariant(valStr.toInt()); |
|
|
|
paramValue = QVariant(valStr.toInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_PARAM_TYPE_UINT16: |
|
|
|
case MAV_PARAM_TYPE_UINT16: |
|
|
|
paramValue = QVariant((quint16)valStr.toUInt()); |
|
|
|
paramValue = QVariant((quint16)valStr.toUInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_PARAM_TYPE_INT16: |
|
|
|
case MAV_PARAM_TYPE_INT16: |
|
|
|
paramValue = QVariant((qint16)valStr.toInt()); |
|
|
|
paramValue = QVariant((qint16)valStr.toInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_PARAM_TYPE_UINT8: |
|
|
|
case MAV_PARAM_TYPE_UINT8: |
|
|
|
paramValue = QVariant((quint8)valStr.toUInt()); |
|
|
|
paramValue = QVariant((quint8)valStr.toUInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_PARAM_TYPE_INT8: |
|
|
|
case MAV_PARAM_TYPE_INT8: |
|
|
|
paramValue = QVariant((qint8)valStr.toUInt()); |
|
|
|
paramValue = QVariant((qint8)valStr.toUInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
default: |
|
|
|
default: |
|
|
|
qCritical() << "Unknown type" << paramType; |
|
|
|
qCritical() << "Unknown type" << paramType; |
|
|
|
paramValue = QVariant(valStr.toInt()); |
|
|
|
paramValue = QVariant(valStr.toInt()); |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
qCDebug(MockLinkVerboseLog) << "Loading param" << paramName << paramValue; |
|
|
|
qCDebug(MockLinkVerboseLog) << "Loading param" << paramName << paramValue; |
|
|
@ -359,40 +359,40 @@ void MockLink::_handleIncomingMavlinkBytes(const uint8_t* bytes, int cBytes) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
switch (msg.msgid) { |
|
|
|
switch (msg.msgid) { |
|
|
|
case MAVLINK_MSG_ID_HEARTBEAT: |
|
|
|
case MAVLINK_MSG_ID_HEARTBEAT: |
|
|
|
_handleHeartBeat(msg); |
|
|
|
_handleHeartBeat(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_PARAM_REQUEST_LIST: |
|
|
|
case MAVLINK_MSG_ID_PARAM_REQUEST_LIST: |
|
|
|
_handleParamRequestList(msg); |
|
|
|
_handleParamRequestList(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_SET_MODE: |
|
|
|
case MAVLINK_MSG_ID_SET_MODE: |
|
|
|
_handleSetMode(msg); |
|
|
|
_handleSetMode(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_PARAM_SET: |
|
|
|
case MAVLINK_MSG_ID_PARAM_SET: |
|
|
|
_handleParamSet(msg); |
|
|
|
_handleParamSet(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_PARAM_REQUEST_READ: |
|
|
|
case MAVLINK_MSG_ID_PARAM_REQUEST_READ: |
|
|
|
_handleParamRequestRead(msg); |
|
|
|
_handleParamRequestRead(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL: |
|
|
|
case MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL: |
|
|
|
_handleFTP(msg); |
|
|
|
_handleFTP(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_COMMAND_LONG: |
|
|
|
case MAVLINK_MSG_ID_COMMAND_LONG: |
|
|
|
_handleCommandLong(msg); |
|
|
|
_handleCommandLong(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAVLINK_MSG_ID_MANUAL_CONTROL: |
|
|
|
case MAVLINK_MSG_ID_MANUAL_CONTROL: |
|
|
|
_handleManualControl(msg); |
|
|
|
_handleManualControl(msg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
default: |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -489,7 +489,7 @@ float MockLink::_floatUnionForParam(int componentId, const QString& paramName) |
|
|
|
|
|
|
|
|
|
|
|
switch (paramType) { |
|
|
|
switch (paramType) { |
|
|
|
case MAV_PARAM_TYPE_REAL32: |
|
|
|
case MAV_PARAM_TYPE_REAL32: |
|
|
|
valueUnion.param_float = paramVar.toFloat(); |
|
|
|
valueUnion.param_float = paramVar.toFloat(); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case MAV_PARAM_TYPE_UINT32: |
|
|
|
case MAV_PARAM_TYPE_UINT32: |
|
|
@ -747,24 +747,24 @@ void MockLink::emitRemoteControlChannelRawChanged(int channel, uint16_t raw) |
|
|
|
0, // time since boot, ignored
|
|
|
|
0, // time since boot, ignored
|
|
|
|
18, // channel count
|
|
|
|
18, // channel count
|
|
|
|
chanRaw[0], // channel raw value
|
|
|
|
chanRaw[0], // channel raw value
|
|
|
|
chanRaw[1], // channel raw value
|
|
|
|
chanRaw[1], // channel raw value
|
|
|
|
chanRaw[2], // channel raw value
|
|
|
|
chanRaw[2], // channel raw value
|
|
|
|
chanRaw[3], // channel raw value
|
|
|
|
chanRaw[3], // channel raw value
|
|
|
|
chanRaw[4], // channel raw value
|
|
|
|
chanRaw[4], // channel raw value
|
|
|
|
chanRaw[5], // channel raw value
|
|
|
|
chanRaw[5], // channel raw value
|
|
|
|
chanRaw[6], // channel raw value
|
|
|
|
chanRaw[6], // channel raw value
|
|
|
|
chanRaw[7], // channel raw value
|
|
|
|
chanRaw[7], // channel raw value
|
|
|
|
chanRaw[8], // channel raw value
|
|
|
|
chanRaw[8], // channel raw value
|
|
|
|
chanRaw[9], // channel raw value
|
|
|
|
chanRaw[9], // channel raw value
|
|
|
|
chanRaw[10], // channel raw value
|
|
|
|
chanRaw[10], // channel raw value
|
|
|
|
chanRaw[11], // channel raw value
|
|
|
|
chanRaw[11], // channel raw value
|
|
|
|
chanRaw[12], // channel raw value
|
|
|
|
chanRaw[12], // channel raw value
|
|
|
|
chanRaw[13], // channel raw value
|
|
|
|
chanRaw[13], // channel raw value
|
|
|
|
chanRaw[14], // channel raw value
|
|
|
|
chanRaw[14], // channel raw value
|
|
|
|
chanRaw[15], // channel raw value
|
|
|
|
chanRaw[15], // channel raw value
|
|
|
|
chanRaw[16], // channel raw value
|
|
|
|
chanRaw[16], // channel raw value
|
|
|
|
chanRaw[17], // channel raw value
|
|
|
|
chanRaw[17], // channel raw value
|
|
|
|
0); // rss
|
|
|
|
0); // rss
|
|
|
|
respondWithMavlinkMessage(responseMsg); |
|
|
|
respondWithMavlinkMessage(responseMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -791,6 +791,9 @@ void MockLink::_handleCommandLong(const mavlink_message_t& msg) |
|
|
|
commandResult = MAV_RESULT_ACCEPTED; |
|
|
|
commandResult = MAV_RESULT_ACCEPTED; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case MAV_CMD_PREFLIGHT_CALIBRATION: |
|
|
|
case MAV_CMD_PREFLIGHT_CALIBRATION: |
|
|
|
|
|
|
|
_handlePreFlightCalibration(request); |
|
|
|
|
|
|
|
commandResult = MAV_RESULT_ACCEPTED; |
|
|
|
|
|
|
|
break; |
|
|
|
case MAV_CMD_PREFLIGHT_STORAGE: |
|
|
|
case MAV_CMD_PREFLIGHT_STORAGE: |
|
|
|
commandResult = MAV_RESULT_ACCEPTED; |
|
|
|
commandResult = MAV_RESULT_ACCEPTED; |
|
|
|
break; |
|
|
|
break; |
|
|
@ -889,16 +892,16 @@ void MockLink::_sendStatusTextMessages(void) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
static const struct StatusMessage rgMessages[] = { |
|
|
|
static const struct StatusMessage rgMessages[] = { |
|
|
|
{ MAV_SEVERITY_INFO, "#Testing audio output" }, |
|
|
|
{ MAV_SEVERITY_INFO, "#Testing audio output" }, |
|
|
|
{ MAV_SEVERITY_EMERGENCY, "Status text emergency" }, |
|
|
|
{ MAV_SEVERITY_EMERGENCY, "Status text emergency" }, |
|
|
|
{ MAV_SEVERITY_ALERT, "Status text alert" }, |
|
|
|
{ MAV_SEVERITY_ALERT, "Status text alert" }, |
|
|
|
{ MAV_SEVERITY_CRITICAL, "Status text critical" }, |
|
|
|
{ MAV_SEVERITY_CRITICAL, "Status text critical" }, |
|
|
|
{ MAV_SEVERITY_ERROR, "Status text error" }, |
|
|
|
{ MAV_SEVERITY_ERROR, "Status text error" }, |
|
|
|
{ MAV_SEVERITY_WARNING, "Status text warning" }, |
|
|
|
{ MAV_SEVERITY_WARNING, "Status text warning" }, |
|
|
|
{ MAV_SEVERITY_NOTICE, "Status text notice" }, |
|
|
|
{ MAV_SEVERITY_NOTICE, "Status text notice" }, |
|
|
|
{ MAV_SEVERITY_INFO, "Status text info" }, |
|
|
|
{ MAV_SEVERITY_INFO, "Status text info" }, |
|
|
|
{ MAV_SEVERITY_DEBUG, "Status text debug" }, |
|
|
|
{ MAV_SEVERITY_DEBUG, "Status text debug" }, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
for (size_t i=0; i<sizeof(rgMessages)/sizeof(rgMessages[0]); i++) { |
|
|
|
for (size_t i=0; i<sizeof(rgMessages)/sizeof(rgMessages[0]); i++) { |
|
|
|
mavlink_message_t msg; |
|
|
|
mavlink_message_t msg; |
|
|
@ -1053,3 +1056,33 @@ void MockLink::_sendRCChannels(void) |
|
|
|
respondWithMavlinkMessage(msg); |
|
|
|
respondWithMavlinkMessage(msg); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MockLink::_handlePreFlightCalibration(const mavlink_command_long_t& request) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
const char* pCalMessage; |
|
|
|
|
|
|
|
static const char* gyroCalResponse = "[cal] calibration started: 2 gyro"; |
|
|
|
|
|
|
|
static const char* magCalResponse = "[cal] calibration started: 2 mag"; |
|
|
|
|
|
|
|
static const char* accelCalResponse = "[cal] calibration started: 2 accel"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (request.param1 == 1) { |
|
|
|
|
|
|
|
// Gyro cal
|
|
|
|
|
|
|
|
pCalMessage = gyroCalResponse; |
|
|
|
|
|
|
|
} else if (request.param2 == 1) { |
|
|
|
|
|
|
|
// Mag cal
|
|
|
|
|
|
|
|
pCalMessage = magCalResponse; |
|
|
|
|
|
|
|
} else if (request.param5 == 1) { |
|
|
|
|
|
|
|
// Accel cal
|
|
|
|
|
|
|
|
pCalMessage = accelCalResponse; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mavlink_message_t msg; |
|
|
|
|
|
|
|
mavlink_msg_statustext_pack(_vehicleSystemId, |
|
|
|
|
|
|
|
_vehicleComponentId, |
|
|
|
|
|
|
|
&msg, |
|
|
|
|
|
|
|
MAV_SEVERITY_INFO, |
|
|
|
|
|
|
|
pCalMessage); |
|
|
|
|
|
|
|
respondWithMavlinkMessage(msg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|