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: 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
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 !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.