27 _requestActive =
false;
34 if (result == MAV_RESULT_ACCEPTED) {
35 mavlink_available_modes_t availableModes;
36 mavlink_msg_available_modes_decode(&message, &availableModes);
37 bool cannotBeSet = availableModes.properties & MAV_MODE_PROPERTY_NOT_USER_SELECTABLE;
38 bool advanced = availableModes.properties & MAV_MODE_PROPERTY_ADVANCED;
39 availableModes.mode_name[
sizeof(availableModes.mode_name)-1] =
'\0';
40 QString name = availableModes.mode_name;
41 switch (availableModes.standard_mode) {
42 case MAV_STANDARD_MODE_POSITION_HOLD:
45 case MAV_STANDARD_MODE_ORBIT:
49 case MAV_STANDARD_MODE_CRUISE:
52 case MAV_STANDARD_MODE_ALTITUDE_HOLD:
55 case MAV_STANDARD_MODE_SAFE_RECOVERY:
56 name =
"Safe Recovery";
58 case MAV_STANDARD_MODE_MISSION:
61 case MAV_STANDARD_MODE_LAND:
64 case MAV_STANDARD_MODE_TAKEOFF:
69 qCDebug(StandardModesLog) <<
"Available mode received - name:" << name <<
70 "index:" << availableModes.mode_index <<
71 "standard_mode:" << availableModes.standard_mode <<
72 "advanced:" << advanced <<
73 "cannotBeSet:" << cannotBeSet <<
74 "custom_mode:" << availableModes.custom_mode;
76 const auto existingMode =
77 std::find_if(_modeList.cbegin(), _modeList.cend(), [&availableModes](
const FirmwareFlightMode& mode) {
78 return mode.custom_mode == availableModes.custom_mode;
80 if (existingMode == _modeList.cend()) {
82 name, availableModes.
standard_mode, availableModes.custom_mode, !cannotBeSet, advanced,
86 }
else if (existingMode->mode_name == name) {
87 qCDebug(StandardModesLog) <<
"Ignoring duplicate mode - name:" << name
88 <<
"custom_mode:" << availableModes.custom_mode;
90 qCWarning(StandardModesLog) <<
"Ignoring mode with conflicting name - custom_mode:"
91 << availableModes.custom_mode <<
"existing:" << existingMode->mode_name
95 if (availableModes.mode_index >= availableModes.number_modes) {
96 qCDebug(StandardModesLog) <<
"Completed, num modes:" << availableModes.number_modes;
97 ensureUniqueModeNames();
102 requestMode(availableModes.mode_index + 1);
105 qCWarning(StandardModesLog) <<
"Failed to retrieve available modes - REQUEST_MESSAGE:MAV_RESULT" <<
QGCMAVLink::mavResultToString(result) <<
"failureCode:" << failureCode;
void requestMessage(RequestMessageResultHandler resultHandler, void *resultHandlerData, int compId, int messageId, float param1=0.0f, float param2=0.0f, float param3=0.0f, float param4=0.0f, float param5=0.0f)