Skip to main content

Rtc

Struct Rtc 

Source
pub struct Rtc { /* private fields */ }
Expand description

Last-Known-Good UTC Time tracking for the device (Matter Core spec).

The persisted utc_us field is the spec-mandated stored fallback used by cert path validation when no live time synchronization is available; it is seeded from crate::utils::epoch::FIRMWARE_BUILD_MATTER_US on a freshly-flashed device.

anchor, granularity, and source are volatile — they describe the current monotonic-clock anchoring around the most recent [Matter::set_utc_time] call. After reboot, anchor is None (no live current-time tracking is active), so the TimeSync cluster reports UTCTime = Null, Granularity = NoTimeGranularity and TimeSource = None (per spec) — while utc_us still carries the persisted LKG value for cert validity.

Implementations§

Source§

impl Rtc

Source

pub fn reset_persist<S>( &mut self, store: S, buf: &mut [u8], ) -> Result<(), Error>
where S: KvBlobStore,

Source

pub fn load_persist<S>(&mut self, kv: S, buf: &mut [u8]) -> Result<(), Error>
where S: KvBlobStore,

Source

pub fn trusted_time_source(&self) -> Option<TrustedTimeSource>

Return the configured Trusted Time Source, or None if unset (Matter Core spec).

Source

pub fn set_trusted_time_source<E>( &mut self, source: Option<TrustedTimeSource>, change_notifier: &dyn AttrChangeNotifier, event_emitter: E, ) -> Result<(), Error>
where E: EventEmitter,

Install or clear the Trusted Time Source (Matter Core spec). fab_idx is the fabric performing the change — recorded so that fabric removal can clear an entry it owns.

Source

pub fn set_trusted_time_source_persist<S, E>( &mut self, source: Option<TrustedTimeSource>, persist: &mut Persist<S>, change_notifier: &dyn AttrChangeNotifier, event_emitter: E, ) -> Result<(), Error>

Install or clear the Trusted Time Source (Matter Core spec). fab_idx is the fabric performing the change — recorded so that fabric removal can clear an entry it owns. source = None clears any existing entry.

Updates in-memory state, persists under crate::persist::TRUSTED_TIME_SOURCE_KEY, and notifies subscribers of the TrustedTimeSource attribute change.

Source

pub fn utc_time(&self) -> UtcTime

Return the current UTC time if available, or the persisted Last-Known-Good UTC Time otherwise.

Source

pub fn utc_time_granularity(&self) -> GranularityEnum

Return the Granularity reported on the wire for the TimeSync cluster’s Granularity attribute, derived from the most recent Self::set_utc_time (with the spec-required step-down and floor already applied) — or NoTimeGranularity if no set_utc_time has been called since boot (per the spec, which forbids NoTimeGranularity only while UTCTime ≠ Null).

Source

pub fn utc_time_source(&self) -> TimeSourceEnum

Return the TimeSource reported on the wire for the TimeSync cluster’s TimeSource attribute — None until the first Self::set_utc_time (per spec).

Source

pub fn set_utc_time( &mut self, utc_us: u64, granularity: GranularityEnum, source: TimeSourceEnum, change_notifier: &dyn AttrChangeNotifier, ) -> bool

Update the Last-Known-Good UTC Time (Matter Core spec), capturing a fresh monotonic anchor so subsequent Self::utc_time reads advance from the supplied value.

Per the spec: the supplied granularity is recorded stepped-down by one level (with a floor of MinutesGranularity per spec); the supplied source is recorded verbatim.

The new value is written to the in-memory state immediately. Persistence to LKG_UTC_KEY happens separately — the TimeSync cluster handler invokes this from inside a kv.access(...) closure and writes through the same handle. Direct callers that need on-disk durability should call [Self::persist_lkg_utc] explicitly.

Source

pub fn set_utc_time_persist<S>( &mut self, utc_us: u64, granularity: GranularityEnum, source: TimeSourceEnum, persist: &mut Persist<S>, change_notifier: &dyn AttrChangeNotifier, ) -> Result<(), Error>

Auto Trait Implementations§

§

impl Freeze for Rtc

§

impl RefUnwindSafe for Rtc

§

impl Send for Rtc

§

impl Sync for Rtc

§

impl Unpin for Rtc

§

impl UnsafeUnpin for Rtc

§

impl UnwindSafe for Rtc

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> 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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, E> Init<T, E> for T

Source§

unsafe fn __init(self, slot: *mut T) -> Result<(), E>

Initializes slot. Read more
Source§

fn chain<F>(self, f: F) -> ChainInit<Self, F, T, E>
where F: FnOnce(&mut T) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. 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<T, I> IntoFallibleInit<T> for I
where I: Init<T>,

Source§

fn into_fallible<E>(self) -> impl Init<T, E>

Convert the infallible initializer to a fallible one.
Source§

impl<Source, Target> OctetsInto<Target> for Source
where Target: OctetsFrom<Source>,

Source§

type Error = <Target as OctetsFrom<Source>>::Error

Source§

fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>

Performs the conversion.
Source§

fn octets_into(self) -> Target
where Self::Error: Into<Infallible>,

Performs an infallible conversion.
Source§

impl<T, E> PinInit<T, E> for T

Source§

unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E>

Initializes slot. Read more
Source§

fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>
where F: FnOnce(Pin<&mut T>) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V