void autopilot_generated_on_rc_frame(void) { // FIXME what to do here ? copy_from_to_fbw(); }
void autopilot_generated_on_rc_frame(void) { // update electrical from FBW imcu_get_electrical(&vsupply, ¤t, &energy); // FIXME what to do here ? copy_from_to_fbw(); }
/** \brief Function to be called when a message from FBW is available */ static inline void telecommand_task( void ) { uint8_t mode_changed = FALSE; copy_from_to_fbw(); uint8_t really_lost = bit_is_set(fbw_state->status, STATUS_RADIO_REALLY_LOST) && (pprz_mode == PPRZ_MODE_AUTO1 || pprz_mode == PPRZ_MODE_MANUAL); if (pprz_mode != PPRZ_MODE_HOME && pprz_mode != PPRZ_MODE_GPS_OUT_OF_ORDER && launch) { if (too_far_from_home) { pprz_mode = PPRZ_MODE_HOME; mode_changed = TRUE; } if (really_lost) { pprz_mode = RC_LOST_MODE; mode_changed = TRUE; } } if (bit_is_set(fbw_state->status, AVERAGED_CHANNELS_SENT)) { bool_t pprz_mode_changed = pprz_mode_update(); mode_changed |= pprz_mode_changed; #if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS bool_t calib_mode_changed = RcSettingsModeUpdate(fbw_state->channels); rc_settings(calib_mode_changed || pprz_mode_changed); mode_changed |= calib_mode_changed; #endif } mode_changed |= mcu1_status_update(); if ( mode_changed ) PERIODIC_SEND_PPRZ_MODE(DefaultChannel); #if defined RADIO_CONTROL || defined RADIO_CONTROL_AUTO1 /** In AUTO1 mode, compute roll setpoint and pitch setpoint from * \a RADIO_ROLL and \a RADIO_PITCH \n */ if (pprz_mode == PPRZ_MODE_AUTO1) { /** Roll is bounded between [-AUTO1_MAX_ROLL;AUTO1_MAX_ROLL] */ h_ctl_roll_setpoint = FLOAT_OF_PPRZ(fbw_state->channels[RADIO_ROLL], 0., -AUTO1_MAX_ROLL); /** Pitch is bounded between [-AUTO1_MAX_PITCH;AUTO1_MAX_PITCH] */ h_ctl_pitch_setpoint = FLOAT_OF_PPRZ(fbw_state->channels[RADIO_PITCH], 0., AUTO1_MAX_PITCH); } /** Else asynchronously set by \a h_ctl_course_loop() */ /** In AUTO1, throttle comes from RADIO_THROTTLE In MANUAL, the value is copied to get it in the telemetry */ if (pprz_mode == PPRZ_MODE_MANUAL || pprz_mode == PPRZ_MODE_AUTO1) { v_ctl_throttle_setpoint = fbw_state->channels[RADIO_THROTTLE]; } /** else asynchronously set by v_ctl_climb_loop(); */ mcu1_ppm_cpt = fbw_state->ppm_cpt; #endif // RADIO_CONTROL vsupply = fbw_state->vsupply; current = fbw_state->current; #ifdef RADIO_CONTROL if (!estimator_flight_time) { if (pprz_mode == PPRZ_MODE_AUTO2 && fbw_state->channels[RADIO_THROTTLE] > THROTTLE_THRESHOLD_TAKEOFF) { launch = TRUE; } } #endif }