-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathcdc_acm_serial.rs
37 lines (35 loc) · 1.11 KB
/
cdc_acm_serial.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use log::*;
use std::net::*;
use std::sync::{Arc, Mutex};
use std::time::Duration;
#[tokio::main]
async fn main() {
env_logger::init();
let handler =
Arc::new(Mutex::new(Box::new(usbip::cdc::UsbCdcAcmHandler::new())
as Box<dyn usbip::UsbInterfaceHandler + Send>));
let server = Arc::new(usbip::UsbIpServer::new_simulated(vec![
usbip::UsbDevice::new(0).with_interface(
usbip::ClassCode::CDC as u8,
usbip::cdc::CDC_ACM_SUBCLASS,
0x00,
Some("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));
loop {
// sleep 1s
tokio::time::sleep(Duration::new(1, 0)).await;
let mut handler = handler.lock().unwrap();
if let Some(acm) = handler
.as_any()
.downcast_mut::<usbip::cdc::UsbCdcAcmHandler>()
{
acm.tx_buffer.push(b'a');
info!("Simulate a char input");
}
}
}