pub struct World<B, E, C, M, CI, PD, R: FlightFloat>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,{ /* private fields */ }Implementations§
Source§impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
pub fn run_once(&mut self) -> bool
pub fn set_telemetry_rates(&mut self, telemetry_rates: TelemetryRates)
pub fn set_control_loop_rates(&mut self, control_loop_rates: ControlLoopRates)
pub fn set_test_pin_3(&mut self, high: bool)
pub fn set_test_pin_2(&mut self, high: bool)
pub fn run_comm_param_sensor_stages(&mut self)
pub fn imu_pending(&self) -> bool
pub fn realtime_scheduler_step(&self) -> RealtimeSchedulerStep
pub fn run_imu_control_tick(&mut self) -> bool
pub fn run_control_update_tick(&mut self) -> bool
pub fn run_rc_command_state_stages(&mut self, fresh_rc: Option<RcPacket>)
pub fn run_pwm_output_stage(&mut self) -> bool
pub fn run_control_stages_if_new_imu(&mut self) -> bool
pub fn run_control_and_mixing_stage_if_new_imu(&mut self) -> bool
Source§impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
pub fn run_prioritized_service_steps_with_policy( &mut self, policy: RealtimeServicePolicy, ) -> WorldReport
pub fn run_communication_and_parameter_service_stage(&mut self)
pub fn run_sensor_ingestion_and_health_stage(&mut self)
Source§impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
pub fn run_telemetry_stage(&mut self)
Sourcepub fn run_realtime_telemetry_stage_budgeted(
&mut self,
max_streams: usize,
) -> usize
pub fn run_realtime_telemetry_stage_budgeted( &mut self, max_streams: usize, ) -> usize
Sends up to max_streams currently due named telemetry streams.
Board realtime loops may call this after a completed control update when hardware timing shows enough post-control slack and service phases alone do not provide enough telemetry scheduling opportunities. Keep the budget board-specific and validate the resulting control p99/max timing with scope pins before making it a production default.
Sourcepub fn run_realtime_telemetry_stage_prioritized(
&mut self,
priority_streams: &[RealtimeTelemetryPriority],
max_streams: usize,
) -> usize
pub fn run_realtime_telemetry_stage_prioritized( &mut self, priority_streams: &[RealtimeTelemetryPriority], max_streams: usize, ) -> usize
Sends board-selected priority streams first, then fills the remaining budget normally.
priority_streams is a board policy list. Core applies each stream’s configured priority
gate, so boards can choose normal due-deadline behavior or a stricter freshness gate for
streams paced by the control tick.
Source§impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
impl<B, E, C, M, CI, PD, R> World<B, E, C, M, CI, PD, R>where
B: BoardIo,
E: Estimator<R>,
C: Controller<R, State = E::State> + RcTrimCalibrator,
M: Mixer<R, MixerInput = C::ControlOutput>,
M::ActuatorCommands: AsRef<[R]> + Copy,
E::State: Copy + Default,
CI: CommInterface<B>,
PD: PwmDriver<R>,
R: FlightFloat,
pub fn init( board: B, params: Params, comm_link: CI, state: StateManager, estimator: E, controller: C, mixer: M, pwm: PD, ) -> Self
Auto Trait Implementations§
impl<B, E, C, M, CI, PD, R> Freeze for World<B, E, C, M, CI, PD, R>
impl<B, E, C, M, CI, PD, R> RefUnwindSafe for World<B, E, C, M, CI, PD, R>where
<E as Estimator<R>>::State: Sized + RefUnwindSafe,
<M as Mixer<R>>::ActuatorCommands: Sized + RefUnwindSafe,
B: RefUnwindSafe,
E: RefUnwindSafe,
C: RefUnwindSafe,
M: RefUnwindSafe,
PD: RefUnwindSafe,
CI: RefUnwindSafe,
R: RefUnwindSafe,
impl<B, E, C, M, CI, PD, R> Send for World<B, E, C, M, CI, PD, R>
impl<B, E, C, M, CI, PD, R> Sync for World<B, E, C, M, CI, PD, R>
impl<B, E, C, M, CI, PD, R> Unpin for World<B, E, C, M, CI, PD, R>
impl<B, E, C, M, CI, PD, R> UnsafeUnpin for World<B, E, C, M, CI, PD, R>where
<E as Estimator<R>>::State: Sized + UnsafeUnpin,
<M as Mixer<R>>::ActuatorCommands: Sized + UnsafeUnpin,
B: UnsafeUnpin,
E: UnsafeUnpin,
C: UnsafeUnpin,
M: UnsafeUnpin,
PD: UnsafeUnpin,
CI: UnsafeUnpin,
R: UnsafeUnpin,
impl<B, E, C, M, CI, PD, R> UnwindSafe for World<B, E, C, M, CI, PD, R>where
<E as Estimator<R>>::State: Sized + UnwindSafe,
<M as Mixer<R>>::ActuatorCommands: Sized + UnwindSafe,
B: UnwindSafe,
E: UnwindSafe,
C: UnwindSafe,
M: UnwindSafe,
PD: UnwindSafe,
CI: UnwindSafe,
R: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.