usbd_storage/
transport.rs1use core::fmt::Debug;
4use usb_device::UsbError;
5use usb_device::bus::UsbBus;
6use usb_device::class::ControlIn;
7use usb_device::descriptor::DescriptorWriter;
8
9#[cfg(feature = "bbb")]
10pub mod bbb;
11
12pub const TRANSPORT_VENDOR_SPECIFIC: u8 = 0xFF;
14
15pub trait Transport {
22 const PROTO: u8;
24
25 type Bus: UsbBus;
26 #[cfg(not(feature = "defmt"))]
27 type Error: Debug;
28 #[cfg(feature = "defmt")]
29 type Error: Debug + defmt::Format;
30
31 fn get_endpoint_descriptors(&self, writer: &mut DescriptorWriter) -> Result<(), UsbError>;
33
34 fn reset(&mut self);
36
37 fn control_in(&mut self, xfer: ControlIn<Self::Bus>);
38
39 fn poll(&mut self) -> Result<(), TransportError<Self::Error>>;
44}
45
46#[derive(Debug)]
48#[cfg_attr(feature = "defmt", derive(defmt::Format))]
49pub enum TransportError<E: Debug> {
50 Usb(UsbError),
52 Error(E),
54}
55
56#[repr(u8)]
60#[derive(Default, Copy, Clone)]
61#[cfg_attr(feature = "defmt", derive(defmt::Format))]
62pub enum CommandStatus {
63 #[default]
64 Passed = 0x00,
65 Failed = 0x01,
66 PhaseError = 0x02,
67}