Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AP_OSD: use internal enumeration in place of mavlink enumeration #26269

Merged
merged 1 commit into from
Feb 20, 2024
Merged
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
17 changes: 15 additions & 2 deletions libraries/AP_OSD/AP_OSD.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,18 @@ class AP_OSD_ParamSetting
{
public:

enum class Type : uint8_t {
NONE = 0,
SERIAL_PROTOCOL = 1,
SERVO_FUNCTION = 2,
AUX_FUNCTION = 3,
FLIGHT_MODE = 4,
FAILSAFE_ACTION = 5,
FAILSAFE_ACTION_1 = 6,
FAILSAFE_ACTION_2 = 7,
NUM_TYPES = 8,
};

AP_Int8 enabled;
AP_Int8 xpos;
AP_Int8 ypos;
Expand All @@ -341,7 +353,7 @@ class AP_OSD_ParamSetting
AP_Float _param_min;
AP_Float _param_max;
AP_Float _param_incr;
AP_Int8 _type;
AP_Enum<Type> _type;

// parameter number
uint8_t _param_number;
Expand All @@ -357,11 +369,12 @@ class AP_OSD_ParamSetting
uint8_t values_max;
const char** values;
};

// compact structure used to hold default values for static initialization
struct Initializer {
uint8_t index;
AP_Param::ParamToken token;
int8_t type;
Type type;
};

static const ParamMetadata _param_metadata[];
Expand Down
78 changes: 39 additions & 39 deletions libraries/AP_OSD/AP_OSD_ParamScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,49 +129,49 @@ static const char* event_names[5] = {
static const AP_OSD_ParamSetting::Initializer PARAM_DEFAULTS[AP_OSD_NUM_PARAM_SCREENS][AP_OSD_ParamScreen::NUM_PARAMS] {
#if APM_BUILD_COPTER_OR_HELI
{
{ 1, { 102, 0, 4033 }, OSD_PARAM_NONE }, // ATC_RAT_RLL_P
{ 2, { 102, 0, 129 }, OSD_PARAM_NONE }, // ATC_RAT_RLL_D
{ 3, { 102, 0, 705 }, OSD_PARAM_NONE }, // ATC_RAT_RLL_FLTD
{ 4, { 102, 0, 4034 }, OSD_PARAM_NONE }, // ATC_RAT_PIT_P
{ 5, { 102, 0, 130 }, OSD_PARAM_NONE }, // ATC_RAT_PIT_D
{ 6, { 102, 0, 706 }, OSD_PARAM_NONE }, // ATC_RAT_PIT_FLTD
{ 7, { 102, 0, 4035 }, OSD_PARAM_NONE }, // ATC_RAT_YAW_P
{ 8, { 102, 0, 131 }, OSD_PARAM_NONE }, // ATC_RAT_YAW_D
{ 9, { 102, 0, 643 }, OSD_PARAM_NONE } // ATC_RAT_YAW_FLTE
{ 1, { 102, 0, 4033 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_RLL_P
{ 2, { 102, 0, 129 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_RLL_D
{ 3, { 102, 0, 705 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_RLL_FLTD
{ 4, { 102, 0, 4034 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_PIT_P
{ 5, { 102, 0, 130 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_PIT_D
{ 6, { 102, 0, 706 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_PIT_FLTD
{ 7, { 102, 0, 4035 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_YAW_P
{ 8, { 102, 0, 131 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_RAT_YAW_D
{ 9, { 102, 0, 643 }, AP_OSD_ParamSetting::Type::NONE } // ATC_RAT_YAW_FLTE
},
{
{ 1, { 3, 0, 231 }, OSD_PARAM_NONE }, // INS_LOG_BAT_OPT
{ 2, { 3, 0, 167 }, OSD_PARAM_NONE }, // INS_LOG_BAT_MASK
{ 3, { 60, 0, 0 }, OSD_PARAM_NONE }, // LOG_BITMASK
{ 4, { 3, 0, 18 }, OSD_PARAM_NONE }, // INS_GYRO_FILT
{ 5, { 102, 0, 6 }, OSD_PARAM_NONE }, // ATC_THR_MIX_MAN
{ 6, { 102, 0, 5 }, OSD_PARAM_NONE }, // ATC_THR_MIX_MAX
{ 7, { 6, 0, 25041 }, OSD_PARAM_AUX_FUNCTION }, // RC7_OPTION
{ 8, { 6, 0, 25105 }, OSD_PARAM_AUX_FUNCTION }, // RC8_OPTION
{ 9, { 36, 0, 1047 }, OSD_PARAM_FAILSAFE_ACTION_2 } // BATT_FS_LOW_ACT
{ 1, { 3, 0, 231 }, AP_OSD_ParamSetting::Type::NONE }, // INS_LOG_BAT_OPT
{ 2, { 3, 0, 167 }, AP_OSD_ParamSetting::Type::NONE }, // INS_LOG_BAT_MASK
{ 3, { 60, 0, 0 }, AP_OSD_ParamSetting::Type::NONE }, // LOG_BITMASK
{ 4, { 3, 0, 18 }, AP_OSD_ParamSetting::Type::NONE }, // INS_GYRO_FILT
{ 5, { 102, 0, 6 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_THR_MIX_MAN
{ 6, { 102, 0, 5 }, AP_OSD_ParamSetting::Type::NONE }, // ATC_THR_MIX_MAX
{ 7, { 6, 0, 25041 }, AP_OSD_ParamSetting::Type::AUX_FUNCTION }, // RC7_OPTION
{ 8, { 6, 0, 25105 }, AP_OSD_ParamSetting::Type::AUX_FUNCTION }, // RC8_OPTION
{ 9, { 36, 0, 1047 }, AP_OSD_ParamSetting::Type::FAILSAFE_ACTION_2 } // BATT_FS_LOW_ACT
}
#elif APM_BUILD_TYPE(APM_BUILD_ArduPlane)
{
{ 1, { 232, 0, 265 }, OSD_PARAM_NONE }, // RLL_RATE_FF
{ 2, { 232, 0, 4041 }, OSD_PARAM_NONE }, // RLL_RATE_P
{ 3, { 232, 0, 73 }, OSD_PARAM_NONE }, // RLL_RATE_I
{ 4, { 233, 0, 267 }, OSD_PARAM_NONE }, // PTCH_RATE_FF
{ 5, { 233, 0, 4043 }, OSD_PARAM_NONE }, // PTCH_RATE_P
{ 6, { 233, 0, 75 }, OSD_PARAM_NONE }, // PTCH_RATE_I
{ 7, { 233, 0, 6 }, OSD_PARAM_NONE }, // PTCH2SRV_RLL
{ 8, { 199, 0, 1 }, OSD_PARAM_NONE }, // TUNE_PARAM
{ 9, { 199, 0, 320 }, OSD_PARAM_NONE } // TUNE_RANGE
{ 1, { 232, 0, 265 }, AP_OSD_ParamSetting::Type::NONE }, // RLL_RATE_FF
{ 2, { 232, 0, 4041 }, AP_OSD_ParamSetting::Type::NONE }, // RLL_RATE_P
{ 3, { 232, 0, 73 }, AP_OSD_ParamSetting::Type::NONE }, // RLL_RATE_I
{ 4, { 233, 0, 267 }, AP_OSD_ParamSetting::Type::NONE }, // PTCH_RATE_FF
{ 5, { 233, 0, 4043 }, AP_OSD_ParamSetting::Type::NONE }, // PTCH_RATE_P
{ 6, { 233, 0, 75 }, AP_OSD_ParamSetting::Type::NONE }, // PTCH_RATE_I
{ 7, { 233, 0, 6 }, AP_OSD_ParamSetting::Type::NONE }, // PTCH2SRV_RLL
{ 8, { 199, 0, 1 }, AP_OSD_ParamSetting::Type::NONE }, // TUNE_PARAM
{ 9, { 199, 0, 320 }, AP_OSD_ParamSetting::Type::NONE } // TUNE_RANGE
},
{
{ 1, { 185, 0, 0 }, OSD_PARAM_NONE }, // TRIM_THROTTLE
{ 2, { 155, 0, 0 }, OSD_PARAM_NONE }, // AIRSPEED_CRUISE
{ 3, { 4, 0, 1094 }, OSD_PARAM_NONE }, // SERVO_AUTO_TRIM
{ 4, { 120, 0, 0 }, OSD_PARAM_NONE}, // AIRSPEED_MIN
{ 5, { 121, 0, 0 }, OSD_PARAM_NONE }, // AIRSPEED_MAX
{ 6, { 156, 0, 0 }, OSD_PARAM_NONE }, // RTL_ALTITUDE
{ 7, { 140, 2, 8 }, OSD_PARAM_NONE }, // AHRS_TRIM_Y
{ 8, { 182, 0, 0 }, OSD_PARAM_NONE }, // THR_MAX
{ 9, { 189, 0, 0 }, OSD_PARAM_NONE } // THR_SLEWRATE
{ 1, { 185, 0, 0 }, AP_OSD_ParamSetting::Type::NONE }, // TRIM_THROTTLE
{ 2, { 155, 0, 0 }, AP_OSD_ParamSetting::Type::NONE }, // AIRSPEED_CRUISE
{ 3, { 4, 0, 1094 }, AP_OSD_ParamSetting::Type::NONE }, // SERVO_AUTO_TRIM
{ 4, { 120, 0, 0 }, AP_OSD_ParamSetting::Type::NONE}, // AIRSPEED_MIN
{ 5, { 121, 0, 0 }, AP_OSD_ParamSetting::Type::NONE }, // AIRSPEED_MAX
{ 6, { 156, 0, 0 }, AP_OSD_ParamSetting::Type::NONE }, // RTL_ALTITUDE
{ 7, { 140, 2, 8 }, AP_OSD_ParamSetting::Type::NONE }, // AHRS_TRIM_Y
{ 8, { 182, 0, 0 }, AP_OSD_ParamSetting::Type::NONE }, // THR_MAX
{ 9, { 189, 0, 0 }, AP_OSD_ParamSetting::Type::NONE } // THR_SLEWRATE
}
#else
{
Expand Down Expand Up @@ -381,7 +381,7 @@ void AP_OSD_ParamScreen::modify_configured_parameter(uint8_t number, Event ev)
setting._param_key.set(AP_Param::get_persistent_key(setting._current_token.key));
setting._param_idx.set(setting._current_token.idx);
setting._param = param;
setting._type.set(OSD_PARAM_NONE);
setting._type.set(AP_OSD_ParamSetting::Type::NONE);
// force update() to refresh the token
setting._current_token.key = 0;
setting._current_token.idx = 0;
Expand Down Expand Up @@ -636,7 +636,7 @@ void AP_OSD_ParamScreen::handle_read_msg(const mavlink_osd_param_show_config_t&
// request out of range - return an error
if (packet.osd_index < 1 || packet.osd_index > AP_OSD_ParamScreen::NUM_PARAMS) {
mavlink_msg_osd_param_show_config_reply_send(link.get_chan(), packet.request_id, OSD_PARAM_INVALID_PARAMETER_INDEX,
nullptr, OSD_PARAM_NONE, 0, 0, 0);
nullptr, uint8_t(AP_OSD_ParamSetting::Type::NONE), 0, 0, 0);
return;
}
// get the parameter and make sure it is fresh
Expand All @@ -646,7 +646,7 @@ void AP_OSD_ParamScreen::handle_read_msg(const mavlink_osd_param_show_config_t&
// check for bad things
if (param._param == nullptr) {
mavlink_msg_osd_param_show_config_reply_send(link.get_chan(), packet.request_id, OSD_PARAM_INVALID_PARAMETER_INDEX,
nullptr, OSD_PARAM_NONE, 0, 0, 0);
nullptr, uint8_t(AP_OSD_ParamSetting::Type::NONE), 0, 0, 0);
return;
}
// get the name and send back the details
Expand Down
34 changes: 28 additions & 6 deletions libraries/AP_OSD/AP_OSD_ParamSetting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <AP_Vehicle/AP_Vehicle_Type.h>
#include <GCS_MAVLink/GCS.h>
#include <SRV_Channel/SRV_Channel.h>
#include <AP_SerialManager/AP_SerialManager.h>
#include <ctype.h>

#if OSD_PARAM_ENABLED
Expand Down Expand Up @@ -99,6 +100,27 @@ const AP_Param::GroupInfo AP_OSD_ParamSetting::var_info[] = {
AP_GROUPEND
};

#if HAL_GCS_ENABLED
// ensure that our OSD_PARAM type enumeration is 1:1 with the mavlink
// numbers. This allows us to do a simple cast from one to the other
// when sending mavlink messages, rather than having some sort of
// mapping function from our internal enumeration into the mavlink
// enumeration. Doing things this way has two advantages - in the
// future we could add that mapping function and change our
// enumeration, and the other is that it allows us to build the GPS
// library without having the mavlink headers built (for example, in
// AP_Periph we shouldn't need mavlink headers).
static_assert((uint32_t)AP_OSD_ParamSetting::Type::NONE == (uint32_t)OSD_PARAM_NONE, "OSD_PARAM_NONE incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::SERIAL_PROTOCOL == (uint32_t)OSD_PARAM_SERIAL_PROTOCOL, "OSD_PARAM_SERIAL_PROTOCOL incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::SERVO_FUNCTION == (uint32_t)OSD_PARAM_SERVO_FUNCTION, "OSD_PARAM_SERVO_FUNCTION incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::AUX_FUNCTION == (uint32_t)OSD_PARAM_AUX_FUNCTION, "OSD_PARAM_AUX_FUNCTION incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::FLIGHT_MODE == (uint32_t)OSD_PARAM_FLIGHT_MODE, "OSD_PARAM_FLIGHT_MODE incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::FAILSAFE_ACTION == (uint32_t)OSD_PARAM_FAILSAFE_ACTION, "OSD_PARAM_FAILSAFE_ACTION incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::FAILSAFE_ACTION_1 == (uint32_t)OSD_PARAM_FAILSAFE_ACTION_1, "OSD_PARAM_FAILSAFE_ACTION_1 incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::FAILSAFE_ACTION_2 == (uint32_t)OSD_PARAM_FAILSAFE_ACTION_2, "OSD_PARAM_FAILSAFE_ACTION_2 incorrect");
static_assert((uint32_t)AP_OSD_ParamSetting::Type::NUM_TYPES == (uint32_t)AP_OSD_ParamSetting::Type::NUM_TYPES, "AP_OSD_ParamSetting::Type::NUM_TYPES incorrect");
#endif // HAL_GCS_ENABLED

#define PARAM_COMPOSITE_INDEX(key, idx, group) (uint32_t((uint32_t(key) << 23) | (uint32_t(idx) << 18) | uint32_t(group)))

#define OSD_PARAM_DEBUG 0
Expand Down Expand Up @@ -175,7 +197,7 @@ static const char* FS_LNG_ACTNS[] = {
};

// plane parameters
const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[OSD_PARAM_NUM_TYPES] = {
const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[unsigned(AP_OSD_ParamSetting::Type::NUM_TYPES)] = {
{ -1, AP_SerialManager::SerialProtocol_NumProtocols - 1, 1, ARRAY_SIZE(SERIAL_PROTOCOL_VALUES), SERIAL_PROTOCOL_VALUES }, // OSD_PARAM_SERIAL_PROTOCOL
{ 0, SRV_Channel::k_nr_aux_servo_functions - 1, 1, ARRAY_SIZE(SERVO_FUNCTIONS), SERVO_FUNCTIONS }, // OSD_PARAM_SERVO_FUNCTION
{ 0, 105, 1, ARRAY_SIZE(AUX_OPTIONS), AUX_OPTIONS }, // OSD_PARAM_AUX_FUNCTION
Expand Down Expand Up @@ -222,7 +244,7 @@ static const char* FS_ACT[] = {
};

// copter parameters
const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[OSD_PARAM_NUM_TYPES] = {
const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[unsigned(AP_OSD_ParamSetting::Type::NUM_TYPES)] = {
{ -1, AP_SerialManager::SerialProtocol_NumProtocols - 1, 1, ARRAY_SIZE(SERIAL_PROTOCOL_VALUES), SERIAL_PROTOCOL_VALUES }, // OSD_PARAM_SERIAL_PROTOCOL
{ 0, SRV_Channel::k_nr_aux_servo_functions - 1, 1, ARRAY_SIZE(SERVO_FUNCTIONS), SERVO_FUNCTIONS }, // OSD_PARAM_SERVO_FUNCTION
{ 0, 105, 1, ARRAY_SIZE(AUX_OPTIONS), AUX_OPTIONS }, // OSD_PARAM_AUX_FUNCTION
Expand All @@ -233,7 +255,7 @@ const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[OS
};

#else
const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[OSD_PARAM_NUM_TYPES] = {};
const AP_OSD_ParamSetting::ParamMetadata AP_OSD_ParamSetting::_param_metadata[unsigned(AP_OSD_ParamSetting::Type::NUM_TYPES)] = {};
#endif

extern const AP_HAL::HAL& hal;
Expand All @@ -257,7 +279,7 @@ AP_OSD_ParamSetting::AP_OSD_ParamSetting(const Initializer& initializer) :
default_param_group(initializer.token.group_element),
default_param_idx(initializer.token.idx),
default_param_key(initializer.token.key),
default_type(initializer.type)
default_type(float(initializer.type))
{
AP_Param::setup_object_defaults(this, var_info);
}
Expand Down Expand Up @@ -305,7 +327,7 @@ bool AP_OSD_ParamSetting::set_by_name(const char* name, uint8_t config_type, flo

_type.set_and_save_ifchanged(config_type);

if (config_type == OSD_PARAM_NONE && !is_zero(pincr)) {
if (config_type == uint8_t(Type::NONE) && !is_zero(pincr)) {
// ranges
_param_min.set_and_save_ifchanged(pmin);
_param_max.set_and_save_ifchanged(pmax);
Expand Down Expand Up @@ -430,7 +452,7 @@ void AP_OSD_ParamSetting::copy_name_camel_case(char* name, size_t len) const
bool AP_OSD_ParamSetting::set_from_metadata()
{
// check for statically configured setting metadata
if (_type > 0 && _type < OSD_PARAM_NUM_TYPES && _param_metadata[_type - 1].values_max > 0) {
if (_type > 0 && _type < uint8_t(Type::NUM_TYPES) && _param_metadata[_type - 1].values_max > 0) {
_param_incr.set(_param_metadata[_type - 1].increment);
_param_min.set(_param_metadata[_type - 1].min_value);
_param_max.set(_param_metadata[_type - 1].max_value);
Expand Down
Loading