1use crate::pac::usb::{RegisterBlock, EPR};
2use crate::UsbPeripheral;
3use core::marker::PhantomData;
4
5pub struct UsbRegisters<USB> {
7 _marker: PhantomData<USB>,
8}
9
10impl<USB: UsbPeripheral> core::ops::Deref for UsbRegisters<USB> {
11 type Target = RegisterBlock;
12
13 fn deref(&self) -> &Self::Target {
14 let ptr = USB::REGISTERS as *const Self::Target;
15 unsafe { &*ptr }
16 }
17}
18
19impl<USB: UsbPeripheral> UsbRegisters<USB> {
20 pub fn new() -> Self {
21 Self { _marker: PhantomData }
22 }
23
24 pub fn ep_register(index: u8) -> &'static EPR {
25 let usb_ptr = USB::REGISTERS as *const RegisterBlock;
26 unsafe { &(*usb_ptr).epr[index as usize] }
27 }
28}