devices/usb/backend/host_backend/
host_backend_device_provider.rs1use std::fs::File;
6use std::sync::Arc;
7
8use sync::Mutex;
9use usb_util::Device;
10
11use crate::usb::backend::device::BackendDeviceType;
12use crate::usb::backend::device::DeviceState;
13use crate::usb::backend::error::Error;
14use crate::usb::backend::error::Result;
15use crate::usb::backend::host_backend::host_device::HostDevice;
16use crate::usb::backend::utils::UsbUtilEventHandler;
17use crate::utils::EventHandler;
18
19pub fn attach_host_backend_device(
22 usb_file: File,
23 device_state: DeviceState,
24) -> Result<(Arc<Mutex<BackendDeviceType>>, Arc<dyn EventHandler>)> {
25 let device = Device::new(usb_file).map_err(Error::CreateHostUsbDevice)?;
26 let host_device = HostDevice::new(Arc::new(Mutex::new(device)), device_state)?;
27 let device_impl = BackendDeviceType::HostDevice(host_device);
28 let arc_mutex_device = Arc::new(Mutex::new(device_impl));
29
30 let event_handler: Arc<dyn EventHandler> = Arc::new(UsbUtilEventHandler {
31 device: arc_mutex_device.clone(),
32 });
33
34 Ok((arc_mutex_device, event_handler))
35}