void guidance_v_mode_changed(uint8_t new_mode) { if (new_mode == guidance_v_mode) { return; } switch (new_mode) { case GUIDANCE_V_MODE_GUIDED: case GUIDANCE_V_MODE_HOVER: /* disable vertical velocity setpoints */ guidance_v_guided_vel_enabled = false; /* set current altitude as setpoint */ guidance_v_z_sp = stateGetPositionNed_i()->z; /* reset guidance reference */ guidance_v_z_sum_err = 0; GuidanceVSetRef(stateGetPositionNed_i()->z, 0, 0); /* reset speed setting */ guidance_v_zd_sp = 0; break; case GUIDANCE_V_MODE_RC_CLIMB: case GUIDANCE_V_MODE_CLIMB: guidance_v_zd_sp = 0; case GUIDANCE_V_MODE_NAV: guidance_v_z_sum_err = 0; GuidanceVSetRef(stateGetPositionNed_i()->z, stateGetSpeedNed_i()->z, 0); break; #if GUIDANCE_V_MODE_MODULE_SETTING == GUIDANCE_V_MODE_MODULE case GUIDANCE_V_MODE_MODULE: guidance_v_module_enter(); break; #endif case GUIDANCE_V_MODE_FLIP: break; default: break; } guidance_v_mode = new_mode; }
void guidance_v_mode_changed(uint8_t new_mode) { if (new_mode == guidance_v_mode) { return; } switch (new_mode) { case GUIDANCE_V_MODE_HOVER: guidance_v_z_sp = stateGetPositionNed_i()->z; // set current altitude as setpoint guidance_v_z_sum_err = 0; GuidanceVSetRef(stateGetPositionNed_i()->z, 0, 0); break; case GUIDANCE_V_MODE_RC_CLIMB: case GUIDANCE_V_MODE_CLIMB: guidance_v_zd_sp = 0; case GUIDANCE_V_MODE_NAV: guidance_v_z_sum_err = 0; GuidanceVSetRef(stateGetPositionNed_i()->z, stateGetSpeedNed_i()->z, 0); break; #if GUIDANCE_V_MODE_MODULE_SETTING == GUIDANCE_V_MODE_MODULE case GUIDANCE_V_MODE_MODULE: guidance_v_module_enter(); break; #endif case GUIDANCE_V_MODE_FLIP: break; default: break; } guidance_v_mode = new_mode; }