37 lines
1.0 KiB
Rust
37 lines
1.0 KiB
Rust
use crate::{scsi::MassStorageClass, storage::SdCard};
|
|
use embassy_futures::select::select;
|
|
use embassy_rp::{peripherals::USB, usb::Driver};
|
|
use embassy_usb::{Builder, Config};
|
|
|
|
pub async fn usb_handler(driver: Driver<'static, USB>, sdcard: SdCard) {
|
|
let mut config = Config::new(0xc0de, 0xcafe);
|
|
config.manufacturer = Some("LegitCamper");
|
|
config.product = Some("PicoCalc");
|
|
config.serial_number = Some("01001100");
|
|
config.max_power = 100;
|
|
config.max_packet_size_0 = 64;
|
|
|
|
let mut config_descriptor = [0; 256];
|
|
let mut bos_descriptor = [0; 64];
|
|
let mut control_buf = [0; 64];
|
|
|
|
let mut builder = Builder::new(
|
|
driver,
|
|
config,
|
|
&mut config_descriptor,
|
|
&mut bos_descriptor,
|
|
&mut [],
|
|
&mut control_buf,
|
|
);
|
|
|
|
let mut scsi = MassStorageClass::new(&mut builder, sdcard);
|
|
let mut usb = builder.build();
|
|
|
|
loop {
|
|
select(usb.run(), scsi.poll()).await;
|
|
|
|
defmt::warn!("rebuilding usb");
|
|
usb.disable().await;
|
|
}
|
|
}
|