/* set a float and save a float if it has changed by more than 0.1%. This reduces the number of insignificant EEPROM writes */ void AP_AutoTune::save_float_if_changed(AP_Float &v, float value, const char *suffix) { float old_value = v.get(); v.set(value); if (value <= 0 || fabsf((value-old_value)/value) > 0.001f) { v.save(); log_param_change(v.get(), suffix); } }
/* reload a parameter */ void AP_Tuning_Plane::reload_value(uint8_t parm) { switch(parm) { // special handling of dual-parameters case TUNING_RATE_ROLL_PI: reload_value(TUNING_RATE_ROLL_P); reload_value(TUNING_RATE_ROLL_I); break; case TUNING_RATE_PITCH_PI: reload_value(TUNING_RATE_PITCH_P); reload_value(TUNING_RATE_PITCH_I); break; default: AP_Float *f = get_param_pointer(parm); if (f != nullptr) { f->load(); } break; } }
/* set a parameter */ void AP_Tuning_Plane::set_value(uint8_t parm, float value) { switch(parm) { // special handling of dual-parameters case TUNING_RATE_ROLL_PI: set_value(TUNING_RATE_ROLL_P, value); set_value(TUNING_RATE_ROLL_I, value); break; case TUNING_RATE_PITCH_PI: set_value(TUNING_RATE_PITCH_P, value); set_value(TUNING_RATE_PITCH_I, value); break; default: AP_Float *f = get_param_pointer(parm); if (f != nullptr) { f->set_and_notify(value); } break; } }