Skip to main content

Provider

Struct Provider 

Source
pub struct Provider {
    pub fab_idx: NonZero<u8>,
    pub node_id: u64,
    pub endpoint: u16,
}
Expand description

One OTA Provider, scoped to the fabric that registered (or announced) it.

Fields§

§fab_idx: NonZero<u8>

The fabric this provider belongs to.

§node_id: u64

The provider node’s id.

§endpoint: u16

The endpoint on the provider node hosting the OTA Provider cluster.

Implementations§

Source§

impl Provider

Source

pub async fn query<C, F, R>( &self, matter: &Matter<'_>, crypto: C, protocols: &[DownloadProtocolEnum], current_version: Option<u32>, requestor_can_consent: bool, f: F, ) -> Result<R, Error>
where C: Crypto, F: FnOnce(&QueryImageResponse<'_>) -> Result<R, Error>,

Ask this provider whether a software image newer than current_version (defaulting to this device’s sw_ver from BasicInfoConfig when None) is available, advertising the given download protocols.

The request’s VendorID, ProductID, SoftwareVersion and HardwareVersion are taken from the node’s BasicInfoConfig, and Location from the configured Basic Information settings - the spec requires each to equal the corresponding Basic Information cluster attribute. requestor_can_consent declares whether this requestor can obtain user consent on its own (via built-in UI); pass true only if so, as it lets the provider delegate consent (see OtaImagesRegistry).

Opens a CASE exchange to the provider, sends QueryImage, and invokes f with the QueryImageResponse before the exchange is released - so f reads image_uri/software_version/update_token straight off the RX buffer without copying them onto the stack. f’s return value is returned.

query does not interpret the response (it checks neither status nor the returned version); that is left to f. On a bdx:// image_uri, use parse_bdx_url + Exchange::download to fetch.

Source

pub async fn apply_update<C>( &self, matter: &Matter<'_>, crypto: C, update_token: &[u8], new_version: u32, ) -> Result<OtaApplyOutcome, Error>
where C: Crypto,

Ask this provider how to apply the already-downloaded image identified by update_token (the UpdateToken from the provider’s QueryImageResponse), which upgrades to new_version.

Opens a CASE exchange and sends ApplyUpdateRequest. The returned OtaApplyOutcome is the provider’s decision: Proceed (apply, after its delay), Await (wait the delay and call this again), or Discontinue (discard the image).

Source

pub async fn notify_applied<C>( &self, matter: &Matter<'_>, crypto: C, update_token: &[u8], software_version: u32, ) -> Result<(), Error>
where C: Crypto,

Tell this provider that the image identified by update_token has been applied, now running software_version. Opens a CASE exchange and sends NotifyUpdateApplied; there is no response payload.

Trait Implementations§

Source§

impl Clone for Provider

Source§

fn clone(&self) -> Provider

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for Provider

Source§

impl Debug for Provider

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Eq for Provider

Source§

impl<'__from_tlv> FromTLV<'__from_tlv> for Provider

Source§

fn from_tlv(element: &TLVElement<'__from_tlv>) -> Result<Provider, Error>

Deserialize the type from a TLV-encoded element.
Source§

fn init_from_tlv(element: TLVElement<'__from_tlv>) -> impl Init<Provider, Error>

Generate an in-place initializer for the type that initializes the type from a TLV-encoded element.
Source§

fn nullable_from_tlv(element: &TLVElement<'a>) -> Result<Self, Error>

Deserialize the type from a TLV-encoded element. Read more
Source§

fn init_nullable_from_tlv(element: TLVElement<'a>) -> impl Init<Self, Error>

Generate an in-place initializer for the type that initializes the type from a TLV-encoded element. Read more
Source§

impl PartialEq for Provider

Source§

fn eq(&self, other: &Provider) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Provider

Source§

impl ToTLV for Provider

Source§

fn to_tlv<W>(&self, tag: &TLVTag, tw: W) -> Result<(), Error>
where W: TLVWrite,

Serialize the type to a TLV-encoded stream.
Source§

fn tlv_iter(&self, tag: TLVTag) -> impl Iterator<Item = Result<TLV<'_>, Error>>

Serialize the type as an iterator of TLV instances by potentially borrowing data from the type.
Source§

fn nullable_to_tlv<W>(&self, tag: &TLVTag, tw: W) -> Result<(), Error>
where W: TLVWrite,

Serialize the type to a TLV-encoded stream. Read more
Source§

fn nullable_tlv_iter( &self, tag: TLVTag, ) -> impl Iterator<Item = Result<TLV<'_>, Error>>

Serialize the type as an iterator of TLV instances by potentially borrowing data from the type. Read more
Source§

impl<'__from_tlv> TryFrom<&TLVElement<'__from_tlv>> for Provider

Source§

type Error = Error

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

fn try_from( element: &TLVElement<'__from_tlv>, ) -> Result<Provider, <Provider as TryFrom<&TLVElement<'__from_tlv>>>::Error>

Performs the conversion.

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> 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> CloneToUninit for T
where T: Clone,

Source§

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

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> 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
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