crab-usb 0.11.0

A usb host for embedded systems, written in Rust.
Documentation
use crate::{
    Mmio, USBHost,
    backend::kmod::hub::{HubId, HubInfo},
};

mod dwc;
mod dwc2;
mod ehci;
mod hub;
mod kcore;
pub mod osal;
pub(crate) mod queue;
mod transfer;
mod xhci;

use alloc::{boxed::Box, collections::btree_map::BTreeMap};

use dwc::Dwc;
pub use dwc::{
    DwcNewParams, DwcParams, NamedResetLine, ResetLine, UdphyParam, Usb2PhyParam,
    UsbPhyInterfaceMode, usb2phy::Usb2PhyPortId,
};
use dwc2::Dwc2;
pub use dwc2::{
    Dwc2FifoSizes, Dwc2HostParams, Dwc2NewParams, Dwc2Quirks, Dwc2TransferStats, Dwc2UtmiWidth,
};
use ehci::Ehci;
pub use ehci::EhciNewParams;
use kcore::*;
pub use osal::*;
use usb_if::Speed;
use xhci::Xhci;

use crate::err::*;

impl USBHost {
    pub fn new_xhci(
        mmio: Mmio,
        coherency: DmaCoherency,
        kernel: &'static dyn KernelOp,
    ) -> Result<USBHost> {
        Ok(USBHost::new(Xhci::new(mmio, coherency, kernel)?))
    }

    pub fn new_dwc(params: DwcNewParams<'_>) -> Result<USBHost> {
        Ok(USBHost::new(Dwc::new(params)?))
    }

    pub fn new_dwc2(params: Dwc2NewParams) -> Result<USBHost> {
        Ok(USBHost::new(Dwc2::new(params)?))
    }

    pub fn new_ehci(params: EhciNewParams) -> Result<USBHost> {
        Ok(USBHost::new(Ehci::new(params)?))
    }

    pub(crate) fn new(backend: impl CoreOp) -> Self {
        let b = Core::new(backend);
        Self {
            backend: Box::new(b),
            initialized: false,
        }
    }
}

pub struct DeviceAddressInfo {
    pub root_port_id: u8,
    pub parent_hub: Option<HubId>,
    pub port_speed: Speed,
    pub port_id: u8,
    pub infos: BTreeMap<HubId, HubInfo>,
}