Refactor interface

This commit is contained in:
Jiajie Chen
2020-05-16 17:00:03 +08:00
parent b10ca84ef9
commit fac58ccdf9
4 changed files with 29 additions and 26 deletions

View File

@@ -11,16 +11,14 @@ async fn main() {
let handler =
Arc::new(Mutex::new(Box::new(usbip::cdc::UsbCdcAcmHandler::new())
as Box<dyn usbip::UsbInterfaceHandler + Send>));
let server = usbip::UsbIpServer {
devices: vec![usbip::UsbDevice::new(0).with_interface(
usbip::ClassCode::CDC as u8,
usbip::cdc::CDC_ACM_SUBCLASS,
0x00,
"Test CDC ACM",
usbip::cdc::UsbCdcAcmHandler::endpoints(),
handler.clone(),
)],
};
let server = usbip::UsbIpServer::new_simulated(vec![usbip::UsbDevice::new(0).with_interface(
usbip::ClassCode::CDC as u8,
usbip::cdc::CDC_ACM_SUBCLASS,
0x00,
"Test CDC ACM",
usbip::cdc::UsbCdcAcmHandler::endpoints(),
handler.clone(),
)]);
let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 3240);
tokio::spawn(usbip::server(addr, server));

View File

@@ -12,21 +12,19 @@ async fn main() {
Box::new(usbip::hid::UsbHidKeyboardHandler::new_keyboard())
as Box<dyn usbip::UsbInterfaceHandler + Send>,
));
let server = usbip::UsbIpServer {
devices: vec![usbip::UsbDevice::new(0).with_interface(
usbip::ClassCode::HID as u8,
0x00,
0x00,
"Test HID",
vec![usbip::UsbEndpoint {
address: 0x81, // IN
attributes: 0x03, // Interrupt
max_packet_size: 0x08, // 8 bytes
interval: 10,
}],
handler.clone(),
)],
};
let server = usbip::UsbIpServer::new_simulated(vec![usbip::UsbDevice::new(0).with_interface(
usbip::ClassCode::HID as u8,
0x00,
0x00,
"Test HID",
vec![usbip::UsbEndpoint {
address: 0x81, // IN
attributes: 0x03, // Interrupt
max_packet_size: 0x08, // 8 bytes
interval: 10,
}],
handler.clone(),
)]);
let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 3240);
tokio::spawn(usbip::server(addr, server));

View File

@@ -33,10 +33,16 @@ pub use util::*;
/// Main struct of a USB/IP server
pub struct UsbIpServer {
pub devices: Vec<UsbDevice>,
devices: Vec<UsbDevice>,
}
impl UsbIpServer {
/// Create a `UsbIpServer` with simulated devices
pub fn new_simulated(devices: Vec<UsbDevice>) -> Self {
Self { devices }
}
/// Create a `UsbIpServer` exposing devices in the host, and redirect all USB transfers to them using libusb
pub fn new_from_host() -> Self {
let mut devices = vec![];
if let Ok(list) = rusb::devices() {

View File

@@ -11,6 +11,7 @@ pub(crate) async fn socket_write_fixed_string<T: AsyncReadExt + AsyncWriteExt +
socket.write_all(&path).await
}
/// Check validity of a USB descriptor
pub fn verify_descriptor(desc: &[u8]) {
let mut offset = 0;
while offset < desc.len() {