Struct devices::usb::backend::host_backend::host_device::HostDevice
source · pub struct HostDevice {
pub device: Arc<Mutex<Device>>,
alt_settings: HashMap<u8, u8>,
claimed_interfaces: Vec<u8>,
state: Arc<RwLock<DeviceState>>,
control_transfer_state: Arc<RwLock<ControlTransferState>>,
}
Expand description
Host device is a device connected to host.
Fields§
§device: Arc<Mutex<Device>>
§alt_settings: HashMap<u8, u8>
§claimed_interfaces: Vec<u8>
§state: Arc<RwLock<DeviceState>>
§control_transfer_state: Arc<RwLock<ControlTransferState>>
Implementations§
source§impl HostDevice
impl HostDevice
sourcepub fn new(device: Arc<Mutex<Device>>, state: DeviceState) -> Result<HostDevice>
pub fn new(device: Arc<Mutex<Device>>, state: DeviceState) -> Result<HostDevice>
Create a new host device.
pub fn get_config_descriptor_filtered( &mut self, buffer: &ScatterGatherBuffer, descriptor_index: u8 ) -> Result<(TransferStatus, u32)>
pub fn set_interface( &mut self, interface: u8, alt_setting: u8 ) -> Result<TransferStatus>
pub fn claim_interfaces(&mut self, config_descriptor: &ConfigDescriptorTree)
pub fn release_interfaces(&mut self)
Trait Implementations§
source§impl AsRawDescriptor for HostDevice
impl AsRawDescriptor for HostDevice
source§fn as_raw_descriptor(&self) -> RawDescriptor
fn as_raw_descriptor(&self) -> RawDescriptor
Returns the underlying raw descriptor. Read more
source§impl BackendDevice for HostDevice
impl BackendDevice for HostDevice
source§fn submit_backend_transfer(
&mut self,
transfer: BackendTransferType
) -> Result<BackendTransferHandle>
fn submit_backend_transfer( &mut self, transfer: BackendTransferType ) -> Result<BackendTransferHandle>
Submits a transfer to the specific backend implementation.
source§fn detach_event_handler(&self, event_loop: &Arc<EventLoop>) -> Result<()>
fn detach_event_handler(&self, event_loop: &Arc<EventLoop>) -> Result<()>
This is called by a generic backend provider when a USB detach message is received from the
vm control socket. It detaches the backend device from the backend provider event loop.
source§fn request_transfer_buffer(&mut self, size: usize) -> TransferBuffer
fn request_transfer_buffer(&mut self, size: usize) -> TransferBuffer
Gets a buffer used for data transfer between the host and this device. The buffer returned
by this function must be consumed by
submit_backend_transfer()
.source§fn build_bulk_transfer(
&mut self,
ep_addr: u8,
transfer_buffer: TransferBuffer,
stream_id: Option<u16>
) -> Result<BackendTransferType>
fn build_bulk_transfer( &mut self, ep_addr: u8, transfer_buffer: TransferBuffer, stream_id: Option<u16> ) -> Result<BackendTransferType>
Requests the backend to build a backend-specific bulk transfer request
source§fn build_interrupt_transfer(
&mut self,
ep_addr: u8,
transfer_buffer: TransferBuffer
) -> Result<BackendTransferType>
fn build_interrupt_transfer( &mut self, ep_addr: u8, transfer_buffer: TransferBuffer ) -> Result<BackendTransferType>
Requests the backend to build a backend-specific interrupt transfer request
source§fn get_control_transfer_state(&mut self) -> Arc<RwLock<ControlTransferState>>
fn get_control_transfer_state(&mut self) -> Arc<RwLock<ControlTransferState>>
Returns the
ControlTransferState
for the given backend device.source§fn get_device_state(&mut self) -> Arc<RwLock<DeviceState>>
fn get_device_state(&mut self) -> Arc<RwLock<DeviceState>>
Returns the
DeviceState
for the given backend device. This state contains all the
backend-agnostic state for all generic USB backends.source§fn get_active_config_descriptor(&mut self) -> Result<ConfigDescriptorTree>
fn get_active_config_descriptor(&mut self) -> Result<ConfigDescriptorTree>
Gets the device active config descriptor tree.
source§fn get_config_descriptor(&mut self, config: u8) -> Result<ConfigDescriptorTree>
fn get_config_descriptor(&mut self, config: u8) -> Result<ConfigDescriptorTree>
Gets a specific device config descriptor tree.
source§fn get_config_descriptor_by_index(
&mut self,
config_index: u8
) -> Result<ConfigDescriptorTree>
fn get_config_descriptor_by_index( &mut self, config_index: u8 ) -> Result<ConfigDescriptorTree>
Gets a specific device config descriptor tree by index.
source§fn get_device_descriptor_tree(&mut self) -> Result<DeviceDescriptorTree>
fn get_device_descriptor_tree(&mut self) -> Result<DeviceDescriptorTree>
Gets the device descriptor tree.
source§fn get_active_configuration(&mut self) -> Result<u8>
fn get_active_configuration(&mut self) -> Result<u8>
Gets the device current active configuration.
source§fn set_active_configuration(&mut self, config: u8) -> Result<()>
fn set_active_configuration(&mut self, config: u8) -> Result<()>
Sets the device active configuration.
source§fn clear_feature(&mut self, value: u16, index: u16) -> Result<TransferStatus>
fn clear_feature(&mut self, value: u16, index: u16) -> Result<TransferStatus>
Handles a clear feature endpoint request for the given device.
source§fn create_endpoints(
&mut self,
config_descriptor: &ConfigDescriptorTree
) -> Result<()>
fn create_endpoints( &mut self, config_descriptor: &ConfigDescriptorTree ) -> Result<()>
Creates endpoints for the device with the given config descriptor tree.
source§impl Drop for HostDevice
impl Drop for HostDevice
source§impl XhciBackendDevice for HostDevice
impl XhciBackendDevice for HostDevice
source§fn get_backend_type(&self) -> BackendType
fn get_backend_type(&self) -> BackendType
Returns the type of USB device provided by this device.
source§fn set_address(&mut self, _address: UsbDeviceAddress)
fn set_address(&mut self, _address: UsbDeviceAddress)
Set address of this backend.
source§fn get_speed(&self) -> Option<DeviceSpeed>
fn get_speed(&self) -> Option<DeviceSpeed>
Get speed of this device.
Auto Trait Implementations§
impl RefUnwindSafe for HostDevice
impl Send for HostDevice
impl Sync for HostDevice
impl Unpin for HostDevice
impl UnwindSafe for HostDevice
Blanket Implementations§
source§impl<T> AsRawDescriptors for Twhere
T: AsRawDescriptor,
impl<T> AsRawDescriptors for Twhere
T: AsRawDescriptor,
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
Mutably borrows from an owned value. Read more
§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>
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>
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)
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)
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.