use alloc::{boxed::Box, sync::Arc};
use async_trait::async_trait;
use device_api::device::Device;

use crate::{
    device::{UsbDeviceAccess, UsbSpeed},
    error::UsbError,
    info::PortString,
};

#[async_trait]
pub trait UsbHostController: Device + Sync + Send {
    async fn setup_hub_device(
        self: Arc<Self>,
        hub: Arc<UsbDeviceAccess>,
        port_string: PortString,
        usb_speed: UsbSpeed,
    ) -> Result<(), UsbError>;
    async fn disconnect_device(self: Arc<Self>, port_string: PortString) -> Result<(), UsbError>;
}
