mirror of https://github.com/ArduPilot/ardupilot
Sub: add support for `AVAILABLE_MODES` msg
This commit is contained in:
parent
deca687d30
commit
b0f821a96f
|
@ -443,7 +443,8 @@ static const ap_message STREAM_EXTRA3_msgs[] = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
static const ap_message STREAM_PARAMS_msgs[] = {
|
static const ap_message STREAM_PARAMS_msgs[] = {
|
||||||
MSG_NEXT_PARAM
|
MSG_NEXT_PARAM,
|
||||||
|
MSG_AVAILABLE_MODES
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct GCS_MAVLINK::stream_entries GCS_MAVLINK::all_stream_entries[] = {
|
const struct GCS_MAVLINK::stream_entries GCS_MAVLINK::all_stream_entries[] = {
|
||||||
|
@ -968,3 +969,47 @@ uint8_t GCS_MAVLINK_Sub::high_latency_tgt_airspeed() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif // HAL_HIGH_LATENCY2_ENABLED
|
#endif // HAL_HIGH_LATENCY2_ENABLED
|
||||||
|
|
||||||
|
// Send the mode with the given index (not mode number!) return the total number of modes
|
||||||
|
// Index starts at 1
|
||||||
|
uint8_t GCS_MAVLINK_Sub::send_available_mode(uint8_t index) const
|
||||||
|
{
|
||||||
|
const Mode* modes[] {
|
||||||
|
&sub.mode_manual,
|
||||||
|
&sub.mode_stabilize,
|
||||||
|
&sub.mode_acro,
|
||||||
|
&sub.mode_althold,
|
||||||
|
&sub.mode_surftrak,
|
||||||
|
&sub.mode_poshold,
|
||||||
|
&sub.mode_auto,
|
||||||
|
&sub.mode_guided,
|
||||||
|
&sub.mode_circle,
|
||||||
|
&sub.mode_surface,
|
||||||
|
&sub.mode_motordetect,
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t mode_count = ARRAY_SIZE(modes);
|
||||||
|
|
||||||
|
// Convert to zero indexed
|
||||||
|
const uint8_t index_zero = index - 1;
|
||||||
|
if (index_zero >= mode_count) {
|
||||||
|
// Mode does not exist!?
|
||||||
|
return mode_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ask the mode for its name and number
|
||||||
|
const char* name = modes[index_zero]->name();
|
||||||
|
const uint8_t mode_number = (uint8_t)modes[index_zero]->number();
|
||||||
|
|
||||||
|
mavlink_msg_available_modes_send(
|
||||||
|
chan,
|
||||||
|
mode_count,
|
||||||
|
index,
|
||||||
|
MAV_STANDARD_MODE::MAV_STANDARD_MODE_NON_STANDARD,
|
||||||
|
mode_number,
|
||||||
|
0, // MAV_MODE_PROPERTY bitmask
|
||||||
|
name
|
||||||
|
);
|
||||||
|
|
||||||
|
return mode_count;
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,10 @@ protected:
|
||||||
|
|
||||||
uint64_t capabilities() const override;
|
uint64_t capabilities() const override;
|
||||||
|
|
||||||
|
// Send the mode with the given index (not mode number!) return the total number of modes
|
||||||
|
// Index starts at 1
|
||||||
|
uint8_t send_available_mode(uint8_t index) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void handle_message(const mavlink_message_t &msg) override;
|
void handle_message(const mavlink_message_t &msg) override;
|
||||||
|
|
|
@ -72,6 +72,9 @@ public:
|
||||||
virtual const char *name() const = 0;
|
virtual const char *name() const = 0;
|
||||||
virtual const char *name4() const = 0;
|
virtual const char *name4() const = 0;
|
||||||
|
|
||||||
|
// returns a unique number specific to this mode
|
||||||
|
virtual Mode::Number number() const = 0;
|
||||||
|
|
||||||
// functions for reporting to GCS
|
// functions for reporting to GCS
|
||||||
virtual bool get_wp(Location &loc) { return false; }
|
virtual bool get_wp(Location &loc) { return false; }
|
||||||
virtual int32_t wp_bearing() const { return 0; }
|
virtual int32_t wp_bearing() const { return 0; }
|
||||||
|
@ -202,6 +205,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "MANUAL"; }
|
const char *name() const override { return "MANUAL"; }
|
||||||
const char *name4() const override { return "MANU"; }
|
const char *name4() const override { return "MANU"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::MANUAL; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -224,6 +228,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "ACRO"; }
|
const char *name() const override { return "ACRO"; }
|
||||||
const char *name4() const override { return "ACRO"; }
|
const char *name4() const override { return "ACRO"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::ACRO; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,6 +251,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "STABILIZE"; }
|
const char *name() const override { return "STABILIZE"; }
|
||||||
const char *name4() const override { return "STAB"; }
|
const char *name4() const override { return "STAB"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::STABILIZE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -272,6 +278,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "ALT_HOLD"; }
|
const char *name() const override { return "ALT_HOLD"; }
|
||||||
const char *name4() const override { return "ALTH"; }
|
const char *name4() const override { return "ALTH"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::ALT_HOLD; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,6 +300,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "SURFTRAK"; }
|
const char *name() const override { return "SURFTRAK"; }
|
||||||
const char *name4() const override { return "STRK"; }
|
const char *name4() const override { return "STRK"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::SURFTRAK; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -342,6 +350,8 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "GUIDED"; }
|
const char *name() const override { return "GUIDED"; }
|
||||||
const char *name4() const override { return "GUID"; }
|
const char *name4() const override { return "GUID"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::GUIDED; }
|
||||||
|
|
||||||
autopilot_yaw_mode get_default_auto_yaw_mode(bool rtl) const;
|
autopilot_yaw_mode get_default_auto_yaw_mode(bool rtl) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -387,6 +397,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "AUTO"; }
|
const char *name() const override { return "AUTO"; }
|
||||||
const char *name4() const override { return "AUTO"; }
|
const char *name4() const override { return "AUTO"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::AUTO; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void auto_wp_run();
|
void auto_wp_run();
|
||||||
|
@ -417,6 +428,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "POSHOLD"; }
|
const char *name() const override { return "POSHOLD"; }
|
||||||
const char *name4() const override { return "POSH"; }
|
const char *name4() const override { return "POSH"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::POSHOLD; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -439,6 +451,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "CIRCLE"; }
|
const char *name() const override { return "CIRCLE"; }
|
||||||
const char *name4() const override { return "CIRC"; }
|
const char *name4() const override { return "CIRC"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::CIRCLE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModeSurface : public Mode
|
class ModeSurface : public Mode
|
||||||
|
@ -460,6 +473,7 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "SURFACE"; }
|
const char *name() const override { return "SURFACE"; }
|
||||||
const char *name4() const override { return "SURF"; }
|
const char *name4() const override { return "SURF"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::CIRCLE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -482,4 +496,5 @@ protected:
|
||||||
|
|
||||||
const char *name() const override { return "MOTORDETECT"; }
|
const char *name() const override { return "MOTORDETECT"; }
|
||||||
const char *name4() const override { return "DETE"; }
|
const char *name4() const override { return "DETE"; }
|
||||||
|
Mode::Number number() const override { return Mode::Number::MOTOR_DETECT; }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue