Struct ZOPrepMode

Source
pub(super) struct ZOPrepMode {
    base: BaseMode,
    exit_burn: ExitBurnResult,
    target: KnownImgObjective,
    left_orbit: AtomicBool,
}
Expand description

ZOPrepMode is a mission-critical mode responsible for preparing and scheduling orbital exit maneuvers to complete a given KnownImgObjective. It calculates optimal burn sequences, evaluates feasibility, and executes scheduled preparatory tasks.

This mode can re-prioritize based on new objectives, dynamically adapt to changing beacon conditions, and transition into a ZORetrievalMode once the exit burn is executed.

Fields§

§base: BaseMode

Underlying pre-exit behavior context (Mapping or Beacon Scanning).

§exit_burn: ExitBurnResult

The precomputed exit burn sequence to leave the current orbit.

§target: KnownImgObjective

The currently targeted zoned objective.

§left_orbit: AtomicBool

Indicates whether the satellite has already left its orbit.

Implementations§

Source§

impl ZOPrepMode

Source

const MODE_NAME: &'static str = "ZOPrepMode"

Internal name used for logging and identification.

Source

const MIN_REPLANNING_DT: TimeDelta

Minimum time before scheduled burn start during which re-planning is allowed.

Source

pub(super) async fn from_obj( context: &Arc<ModeContext>, zo: KnownImgObjective, curr_base: BaseMode, ) -> Option<Self>

Constructs a ZOPrepMode from a known zoned objective if a valid maneuver is found.

§Arguments
  • context – Shared mode context .
  • zo – The target zoned objective.
  • curr_base – The current base mode (Mapping or Beacon).
§Returns
  • Some(ZOPrepMode) if a valid burn sequence can be computed.
  • None if the objective is unreachable.
Source

fn log_burn(exit_burn: &ExitBurnResult, target: &KnownImgObjective)

Logs key information about the generated burn sequence.

§Arguments
  • exit_burn – The calculated burn data.
  • target – The objective the burn aims to reach.
Source

fn new_base(&self, base: BaseMode) -> Self

Clones the current ZOPrepMode but with an updated base mode.

§Arguments
  • base – The new base mode.
§Returns
  • Self – A modified copy of the current mode.
Source

async fn overthink_base( c: &Arc<ModeContext>, base: BaseMode, burn: &BurnSequence, ) -> BaseMode

Determines whether the current base mode should change based on the burn timing and worst-case beacon communication schedules.

§Arguments
  • c – Shared context.
  • base – Proposed base mode.
  • burn – Calculated burn sequence.
§Returns
  • BaseMode – The chosen base mode to continue with.

Trait Implementations§

Source§

impl Clone for ZOPrepMode

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl GlobalMode for ZOPrepMode

Source§

fn type_name(&self) -> &'static str

Returns the internal name of this mode.

Source§

fn init_mode<'life0, 'async_trait>( &'life0 self, context: Arc<ModeContext>, ) -> Pin<Box<dyn Future<Output = OpExitSignal> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Initializes scheduling and preparatory logic for the exit burn.

If a base mode change is required due to beacon conflicts, the mode reinitializes. Otherwise, a scheduler is launched and the burn is queued for execution.

§Arguments
  • context – Shared mode context.
§Returns
  • OpExitSignal – Indicates whether to continue or reinitialize.
Source§

fn exec_task_wait<'life0, 'async_trait>( &'life0 self, c: Arc<ModeContext>, due: DateTime<Utc>, ) -> Pin<Box<dyn Future<Output = WaitExitSignal> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Waits until the next scheduled task using a default primitive, while monitoring safe mode and events.

Source§

fn exec_task<'life0, 'async_trait>( &'life0 self, context: Arc<ModeContext>, task: Task, ) -> Pin<Box<dyn Future<Output = ExecExitSignal> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Executes a scheduled task (only [SwitchState] or [VelocityChange] tasks are allowed).

§Arguments
  • context – Shared mode context.
  • task – The task to execute.
§Returns
  • ExecExitSignal::Continue – Always continues unless an illegal task is found.
Source§

fn safe_handler<'life0, 'async_trait>( &'life0 self, context: Arc<ModeContext>, ) -> Pin<Box<dyn Future<Output = OpExitSignal> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Responds to a safe mode interrupt by escaping and attempting to reinitiate the mode.

Source§

fn zo_handler<'life0, 'life1, 'async_trait>( &'life0 self, c: &'life1 Arc<ModeContext>, obj: KnownImgObjective, ) -> Pin<Box<dyn Future<Output = Option<OpExitSignal>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Handles a newly received zoned objective. Replaces the current target if the new one ends earlier and sufficient time remains.

§Arguments
  • c – Shared context.
  • obj – The new zoned objective.
§Returns
  • Some(OpExitSignal::ReInit) if reprioritization occurs.
  • None otherwise.
Source§

fn bo_event_handler<'life0, 'life1, 'async_trait>( &'life0 self, context: &'life1 Arc<ModeContext>, ) -> Pin<Box<dyn Future<Output = Option<OpExitSignal>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reacts to a Beacon Objective state change by potentially switching the base mode.

§Arguments
  • context – Shared mode context.
§Returns
  • Some(OpExitSignal::ReInit) if a base mode change is needed.
  • None if the current base mode is still valid.
Source§

fn exit_mode<'life0, 'async_trait>( &'life0 self, context: Arc<ModeContext>, ) -> Pin<Box<dyn Future<Output = Box<dyn GlobalMode>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Finalizes the mode and transitions into a ZORetrievalMode if the satellite has left orbit.

§Arguments
  • context – Shared mode context.
§Returns
  • Box<dyn GlobalMode> – The next mode (retrieval or fallback).
Source§

fn safe_mode_rationale(&self) -> &'static str

Returns the rationale string for finishing the current phase due to safe mode entry.
Source§

fn new_zo_rationale(&self) -> &'static str

Returns the rationale string for finishing the current phase due to a new Zoned Objective.
Source§

fn new_bo_rationale(&self) -> &'static str

Returns the rationale string for finishing the current phase due to a new Beacon Objective.
Source§

fn tasks_done_rationale(&self) -> &'static str

Returns the rationale string used when the task queue has completed.
Source§

fn tasks_done_exit_rationale(&self) -> &'static str

Returns the rationale for finishing the task queue and exiting the orbit for ZO Retrieval.
Source§

fn out_of_orbit_rationale(&self) -> &'static str

Returns the rationale for finishing the current phase due to being outside of orbit without a valid reason.
Source§

fn bo_done_rationale(&self) -> &'static str

Returns the rationale used for finishing the current phase when a beacon objective has been completed or expired.
Source§

fn exec_task_queue<'life0, 'async_trait>( &'life0 self, context: Arc<ModeContext>, ) -> Pin<Box<dyn Future<Output = OpExitSignal> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Executes all tasks in the current task queue in sequence. Waits for each task’s scheduled time and handles early exit signals such as safe transitions or new objectives. Read more
Source§

impl OrbitalMode for ZOPrepMode

Source§

fn base(&self) -> &BaseMode

Returns the current base mode for delegation.

Source§

fn get_max_dt() -> TimeDelta

Returns the maximum duration allowed for scheduled task waiting. If the remaining time until a task is due exceeds this value, the mode may begin long-wait procedures; otherwise, a fallback short sleep is used. Read more
Source§

async fn exec_task_wait( &self, context: Arc<ModeContext>, due: DateTime<Utc>, ) -> WaitExitSignal

Waits until a scheduled task’s due time or returns early if a notable event occurs. Read more
Source§

async fn monitor_bo_mon_change( sig: BeaconControllerState, bo_mon: &RwLock<Receiver<BeaconControllerState>>, )

Continuously monitors the BeaconControllerState until it changes to the expected value. Read more
Source§

async fn log_bo_event(&self, context: &Arc<ModeContext>, base: BaseMode)

Logs a beacon-related event and finalizes the orbit at the current satellite position. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T