ArduPlane: Convert and remap old parameters

This commit is contained in:
James O'Shannessy 2021-02-17 19:27:33 +11:00 committed by Peter Barker
parent 01b27bdb61
commit af733b2f09

View File

@ -1335,9 +1335,9 @@ const AP_Param::ConversionInfo conversion_table[] = {
{ Parameters::k_param_fence_minalt, 0, AP_PARAM_INT16, "FENCE_ALT_MIN"},
{ Parameters::k_param_fence_maxalt, 0, AP_PARAM_INT16, "FENCE_ALT_MAX"},
{ Parameters::k_param_fence_retalt, 0, AP_PARAM_INT16, "FENCE_RET_ALT"},
{ Parameters::k_param_fence_action, 0, AP_PARAM_INT8, "FENCE_ACTION"},
{ Parameters::k_param_fence_autoenable, 0, AP_PARAM_INT8, "FENCE_AUTOENABLE"},
{ Parameters::k_param_fence_ret_rally, 0, AP_PARAM_INT8, "FENCE_RET_RALLY"},
// { Parameters::k_param_fence_action, 0, AP_PARAM_INT8, "FENCE_ACTION"},
{ Parameters::k_param_fence_autoenable, 0, AP_PARAM_INT8, "FENCE_AUTOENABLE"},
};
void Plane::load_parameters(void)
@ -1412,6 +1412,50 @@ void Plane::load_parameters(void)
}
}
// Convert fence to RCx_OPTION
AP_Int8 fence_enable_ch;
AP_Param::ConversionInfo fence_channel_info = {
Parameters::k_param_fence_channel,
0,
AP_PARAM_INT8,
nullptr
};
if (AP_Param::find_old_parameter(&fence_channel_info, &fence_enable_ch) && fence_enable_ch.get() != 0) {
RC_Channel *fence_ch = rc().channel(fence_enable_ch - 1);
if (fence_ch != nullptr && !fence_ch->option.configured()) {
fence_ch->option.set_and_save((int16_t)RC_Channel::AUX_FUNC::FENCE); // save the new param
}
}
AP_Int8 fence_action_old;
AP_Param::ConversionInfo fence_action_info_old = {
Parameters::k_param_fence_action,
0,
AP_PARAM_INT8,
"FENCE_ACTION"
};
if (AP_Param::find_old_parameter(&fence_action_info_old, &fence_action_old)) {
enum ap_var_type ptype;
AP_Int8 *fence_action_new = (AP_Int8*)AP_Param::find(&fence_action_info_old.new_name[0], &ptype);
uint8_t fence_action_new_val;
if(fence_action_new && !fence_action_new->configured()) {
switch(fence_action_old.get()) {
case 0: // FENCE_ACTION_NONE
case 2: // FENCE_ACTION_REPORT_ONLY
default:
fence_action_new_val = AC_FENCE_ACTION_REPORT_ONLY;
break;
case 1: // FENCE_ACTION_GUIDED
fence_action_new_val = AC_FENCE_ACTION_GUIDED;
break;
case 3: // FENCE_ACTION_GUIDED_THR_PASS
fence_action_new_val = AC_FENCE_ACTION_GUIDED_THROTTLE_PASS;
break;
}
fence_action_new->set_and_save((int8_t)fence_action_new_val);
}
}
hal.console->printf("load_all took %uus\n", (unsigned)(micros() - before));
}