mirror of https://github.com/ArduPilot/ardupilot
AP_Param: replaced set_param_by_name with set_float
read for bugfix in GCS_MAVLink
This commit is contained in:
parent
ffefe425df
commit
cb8356a290
|
@ -1200,25 +1200,12 @@ void AP_Param::convert_old_parameters(const struct ConversionInfo *conversion_ta
|
|||
}
|
||||
|
||||
/*
|
||||
set a parameter by name
|
||||
set a parameter to a float value
|
||||
*/
|
||||
AP_Param *AP_Param::set_param_by_name(const char *pname, float value, enum ap_var_type *ptype)
|
||||
void AP_Param::set_float(float value, enum ap_var_type var_type)
|
||||
{
|
||||
AP_Param *vp;
|
||||
enum ap_var_type var_type;
|
||||
|
||||
if (isnan(value) || isinf(value)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// find the requested parameter
|
||||
vp = AP_Param::find(pname, &var_type);
|
||||
if (vp == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ptype != NULL) {
|
||||
*ptype = var_type;
|
||||
return;
|
||||
}
|
||||
|
||||
// add a small amount before casting parameter values
|
||||
|
@ -1228,27 +1215,23 @@ AP_Param *AP_Param::set_param_by_name(const char *pname, float value, enum ap_va
|
|||
|
||||
// handle variables with standard type IDs
|
||||
if (var_type == AP_PARAM_FLOAT) {
|
||||
((AP_Float *)vp)->set(value);
|
||||
((AP_Float *)this)->set(value);
|
||||
} else if (var_type == AP_PARAM_INT32) {
|
||||
if (value < 0) rounding_addition = -rounding_addition;
|
||||
float v = value+rounding_addition;
|
||||
v = constrain_float(v, -2147483648.0, 2147483647.0);
|
||||
((AP_Int32 *)vp)->set(v);
|
||||
((AP_Int32 *)this)->set(v);
|
||||
} else if (var_type == AP_PARAM_INT16) {
|
||||
if (value < 0) rounding_addition = -rounding_addition;
|
||||
float v = value+rounding_addition;
|
||||
v = constrain_float(v, -32768, 32767);
|
||||
((AP_Int16 *)vp)->set(v);
|
||||
((AP_Int16 *)this)->set(v);
|
||||
} else if (var_type == AP_PARAM_INT8) {
|
||||
if (value < 0) rounding_addition = -rounding_addition;
|
||||
float v = value+rounding_addition;
|
||||
v = constrain_float(v, -128, 127);
|
||||
((AP_Int8 *)vp)->set(v);
|
||||
} else {
|
||||
// we don't support mavlink set on this parameter
|
||||
return NULL;
|
||||
((AP_Int8 *)this)->set(v);
|
||||
}
|
||||
return vp;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1342,10 +1325,13 @@ bool AP_Param::load_defaults_file(const char *filename)
|
|||
param_overrides[idx].def_value_ptr = def_value_ptr;
|
||||
param_overrides[idx].value = value;
|
||||
idx++;
|
||||
if (!set_param_by_name(pname, value, NULL)) {
|
||||
enum ap_var_type var_type;
|
||||
AP_Param *vp = AP_Param::find(pname, &var_type);
|
||||
if (!vp) {
|
||||
fclose(f);
|
||||
return false;
|
||||
}
|
||||
vp->set_float(value, var_type);
|
||||
}
|
||||
fclose(f);
|
||||
|
||||
|
|
|
@ -198,13 +198,10 @@ public:
|
|||
// set a AP_Param variable to a specified value
|
||||
static void set_value(enum ap_var_type type, void *ptr, float def_value);
|
||||
|
||||
|
||||
/*
|
||||
set a parameter by name
|
||||
|
||||
The parameter pointer is returned on success
|
||||
set a parameter to a float
|
||||
*/
|
||||
static AP_Param *set_param_by_name(const char *pname, float value, enum ap_var_type *ptype);
|
||||
void set_float(float value, enum ap_var_type var_type);
|
||||
|
||||
// load default values for scalars in a group
|
||||
static void setup_object_defaults(const void *object_pointer, const struct GroupInfo *group_info);
|
||||
|
|
Loading…
Reference in New Issue