pub struct FidoTransfer {
    pub buffer: TransferBuffer,
    status: TransferStatus,
    pub actual_length: usize,
    pub endpoint: u8,
    submission_time: Instant,
    pub callback: Option<Box<dyn Fn(FidoTransfer) + Send + Sync>>,
}
Expand description

Implementation of a generic USB transfer for the FIDO backend. It implements common USB transfer functionality since it cannot rely on the transfer structures provided by the usb_utils crate as the FIDO backend does not use usbdevfs to communicate with the host.

Fields§

§buffer: TransferBuffer

TransferBuffer structure with either a request or response data from the guest/host.

§status: TransferStatus

Status of the transfer, used by the xhci layer for a successful completion.

§actual_length: usize

Actual length of the transfer, as per USB specs.

§endpoint: u8

USB endpoint associated with this transfer.

§submission_time: Instant

Timestamp of the transfer submission time.

§callback: Option<Box<dyn Fn(FidoTransfer) + Send + Sync>>

Callback to be executed once the transfer has completed, to signal the xhci layer.

Implementations§

source§

impl FidoTransfer

source

pub fn new(endpoint: u8, buffer: TransferBuffer) -> FidoTransfer

source

pub fn signal_device_lost(&mut self)

Called when the device is lost and we need to signal to the xhci layer that the transfer cannot continue and the device should be detached.

source

pub fn timeout_expired(&self) -> bool

Checks if the current transfer should time out or not

source

pub fn complete_transfer(self)

Finalizes the transfer by setting the right status and then calling the callback to signal the xhci layer.

Trait Implementations§

source§

impl BackendTransfer for FidoTransfer

source§

fn status(&self) -> TransferStatus

Returns the status of the transfer in a TransferStatus enum
source§

fn actual_length(&self) -> usize

Returns the actual amount of data transferred, which may be less than the original length.
source§

fn buffer(&self) -> &TransferBuffer

Returns a reference to the TransferBuffer object.
source§

fn set_callback<C: 'static + Fn(BackendTransferType) + Send + Sync>( &mut self, cb: C )

Sets an optional callback on the transfer to be called when the transfer completes.

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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.
§

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

§

fn vzip(self) -> V