pub use imxrt_ral::{modify_reg, read_reg, usb, usbphy, write_reg};
const ANY_INSTANCE: u8 = u8::MAX;
pub type AnyUsbInstance = usb::Instance<{ ANY_INSTANCE }>;
pub type AnyUsbphyInstance = usbphy::Instance<{ ANY_INSTANCE }>;
fn into_any<T, const N: u8>(
inst: imxrt_ral::Instance<T, N>,
) -> imxrt_ral::Instance<T, { ANY_INSTANCE }> {
unsafe {
let rb: *const T = &*inst;
imxrt_ral::Instance::new(rb)
}
}
pub(crate) struct ErasedInstances {
pub usb: AnyUsbInstance,
pub usbphy: AnyUsbphyInstance,
}
pub(crate) fn erase_instances<const N: u8>(instances: super::Instances<N>) -> ErasedInstances {
let super::Instances {
usb,
usbnc: _,
usbphy,
} = instances;
ErasedInstances {
usb: into_any(usb),
usbphy: into_any(usbphy),
}
}
pub mod endpoint_control {
use imxrt_ral as ral;
#[allow(non_snake_case)]
pub struct EndptCtrl<'a> {
pub ENDPTCTRL: &'a ral::RWRegister<u32>,
}
#[allow(non_snake_case)]
pub mod ENDPTCTRL {
pub use imxrt_ral::usb::ENDPTCTRL::*;
}
pub fn register(usb: &super::AnyUsbInstance, endpoint: usize) -> EndptCtrl<'_> {
EndptCtrl {
ENDPTCTRL: if endpoint == 0 {
&usb.ENDPTCTRL0
} else {
&usb.ENDPTCTRL[endpoint - 1]
},
}
}
}