mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-08 17:08:28 -04:00
AP_Compass: add param conversion
This commit is contained in:
parent
e818decc39
commit
6ba87dfe9a
@ -379,6 +379,8 @@ void Compass::init()
|
|||||||
}
|
}
|
||||||
#endif // COMPASS_MAX_INSTANCES
|
#endif // COMPASS_MAX_INSTANCES
|
||||||
|
|
||||||
|
convert_per_instance();
|
||||||
|
|
||||||
// cache expected dev ids for use during runtime detection
|
// cache expected dev ids for use during runtime detection
|
||||||
for (StateIndex i(0); i<COMPASS_MAX_INSTANCES; i++) {
|
for (StateIndex i(0); i<COMPASS_MAX_INSTANCES; i++) {
|
||||||
_state[i].expected_dev_id = _state[i].params.dev_id;
|
_state[i].expected_dev_id = _state[i].params.dev_id;
|
||||||
@ -443,6 +445,47 @@ void Compass::init()
|
|||||||
init_done = true;
|
init_done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convet params to per instance param table
|
||||||
|
// PARAMETER_CONVERSION - Added: Nov-2021
|
||||||
|
void Compass::convert_per_instance()
|
||||||
|
{
|
||||||
|
AP_Param::ConversionInfo info;
|
||||||
|
if (!AP_Param::find_top_level_key_by_pointer(this, info.old_key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct convert_table {
|
||||||
|
uint8_t element[3];
|
||||||
|
ap_var_type type;
|
||||||
|
const char* name;
|
||||||
|
} conversion_table[] = {
|
||||||
|
{ {8,19,22}, AP_PARAM_INT8, "ORIENT" }, // COMPASS_ORIENT, COMPASS_ORIENT2, COMPASS_ORIENT3
|
||||||
|
{ {4,18,21}, AP_PARAM_INT8, "USE" }, // COMPASS_USE, COMPASS_USE2, COMPASS_USE3
|
||||||
|
{ {9,20,23}, AP_PARAM_INT8, "EXTERN" }, // COMPASS_EXTERNAL, COMPASS_EXTERN2, COMPASS_EXTERN3
|
||||||
|
{ {40,41,42}, AP_PARAM_FLOAT, "SCALE" }, // COMPASS_SCALE, COMPASS_SCALE2, COMPASS_SCALE3
|
||||||
|
{ {1,10,13}, AP_PARAM_VECTOR3F, "OFS" }, // COMPASS_OFS_X/Y/Z, COMPASS_OFS2_X/Y/Z, COMPASS_OFS3_X/Y/Z
|
||||||
|
#ifndef HAL_BUILD_AP_PERIPH
|
||||||
|
{ {24,26,28}, AP_PARAM_VECTOR3F, "DIA" }, // COMPASS_DIA_X/Y/Z, COMPASS_DIA2_X/Y/Z, COMPASS_DIA3_X/Y/Z
|
||||||
|
{ {25,27,29}, AP_PARAM_VECTOR3F, "ODI" }, // COMPASS_ODI_X/Y/Z, COMPASS_ODI2_X/Y/Z, COMPASS_ODI3_X/Y/Z
|
||||||
|
#endif
|
||||||
|
#if COMPASS_MOT_ENABLED
|
||||||
|
{ {7,11,14}, AP_PARAM_VECTOR3F, "MOT" }, // COMPASS_MOT_X/Y/Z, COMPASS_MOT2_X/Y/Z, COMPASS_MOT3_X/Y/Z
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
char param_name[17] {};
|
||||||
|
info.new_name = param_name;
|
||||||
|
|
||||||
|
for (const auto & elem : conversion_table) {
|
||||||
|
info.type = elem.type;
|
||||||
|
for (uint8_t i=0; i < MIN(COMPASS_MAX_INSTANCES,3); i++) {
|
||||||
|
info.old_group_element = elem.element[i];
|
||||||
|
hal.util->snprintf(param_name, sizeof(param_name), "COMPASS%i_%s", i+1, elem.name);
|
||||||
|
AP_Param::convert_old_parameter(&info, 1.0f, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if COMPASS_MAX_INSTANCES > 1 || COMPASS_MAX_UNREG_DEV
|
#if COMPASS_MAX_INSTANCES > 1 || COMPASS_MAX_UNREG_DEV
|
||||||
// Update Priority List for Mags, by default, we just
|
// Update Priority List for Mags, by default, we just
|
||||||
// load them as they come up the first time
|
// load them as they come up the first time
|
||||||
|
@ -598,6 +598,9 @@ private:
|
|||||||
bool init_done;
|
bool init_done;
|
||||||
|
|
||||||
uint8_t _first_usable; // first compass usable based on COMPASSx_USE param
|
uint8_t _first_usable; // first compass usable based on COMPASSx_USE param
|
||||||
|
|
||||||
|
// convet params to per instance param table
|
||||||
|
void convert_per_instance();
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace AP {
|
namespace AP {
|
||||||
|
Loading…
Reference in New Issue
Block a user