mirror of
https://github.com/jiegec/usbip.git
synced 2026-10-31 09:57:08 -04:00
Refactor interface
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user