Struct devices::usb::backend::fido_backend::transfer::FidoTransfer     
source · 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: TransferBufferTransferBuffer structure with either a request or response data from the guest/host.
status: TransferStatusStatus of the transfer, used by the xhci layer for a successful completion.
actual_length: usizeActual length of the transfer, as per USB specs.
endpoint: u8USB endpoint associated with this transfer.
submission_time: InstantTimestamp 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
 
impl FidoTransfer
pub fn new(endpoint: u8, buffer: TransferBuffer) -> FidoTransfer
sourcepub fn signal_device_lost(&mut self)
 
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.
sourcepub fn timeout_expired(&self) -> bool
 
pub fn timeout_expired(&self) -> bool
Checks if the current transfer should time out or not
sourcepub fn complete_transfer(self)
 
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
 
impl BackendTransfer for FidoTransfer
source§fn status(&self) -> TransferStatus
 
fn status(&self) -> TransferStatus
TransferStatus enumsource§fn actual_length(&self) -> usize
 
fn actual_length(&self) -> usize
source§fn buffer(&self) -> &TransferBuffer
 
fn buffer(&self) -> &TransferBuffer
TransferBuffer object.source§fn set_callback<C: 'static + Fn(BackendTransferType) + Send + Sync>(
    &mut self,
    cb: C,
)
 
fn set_callback<C: 'static + Fn(BackendTransferType) + Send + Sync>( &mut self, cb: C, )
Auto Trait Implementations§
impl Freeze for FidoTransfer
impl !RefUnwindSafe for FidoTransfer
impl Send for FidoTransfer
impl Sync for FidoTransfer
impl Unpin for FidoTransfer
impl !UnwindSafe for FidoTransfer
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
§impl<T> Downcast for Twhere
    T: Any,
 
impl<T> Downcast for Twhere
    T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
 
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
 
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
 
fn as_any(&self) -> &(dyn Any + 'static)
&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)
 
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.