use crate::{pac::SIM, HALExt};
impl HALExt for SIM {
type T = Sim;
fn split(self) -> Sim {
Sim {
id: Id { _0: () },
status: Status { _0: () },
uuid: UUID,
}
}
}
pub struct Sim {
pub id: Id,
pub status: Status,
pub uuid: UUID,
}
pub struct Status {
_0: (),
}
pub struct Id {
_0: (),
}
#[repr(u8)]
pub enum DevicePinOuts {
Pin8 = 0,
Pin16 = 1,
Pin20 = 2,
Pin24 = 3,
Pin32 = 4,
Pin44 = 5,
Pin48 = 6,
Pin64 = 7,
Pin80 = 8,
Pin100 = 10,
Reserved,
}
impl Id {
pub fn family(&self) -> u8 {
unsafe { &(*SIM::ptr()) }.srsid.read().famid().bits()
}
pub fn subfamily(&self) -> u8 {
unsafe { &(*SIM::ptr()) }.srsid.read().subfamid().bits()
}
pub fn revision(&self) -> u8 {
unsafe { &(*SIM::ptr()) }.srsid.read().rev_id().bits()
}
pub fn pinout(&self) -> DevicePinOuts {
let sim = unsafe { &(*SIM::ptr()) };
match sim.srsid.read().pinid().bits() {
0 => DevicePinOuts::Pin8,
1 => DevicePinOuts::Pin16,
2 => DevicePinOuts::Pin20,
3 => DevicePinOuts::Pin24,
4 => DevicePinOuts::Pin32,
5 => DevicePinOuts::Pin44,
6 => DevicePinOuts::Pin48,
7 => DevicePinOuts::Pin64,
8 => DevicePinOuts::Pin80,
10 => DevicePinOuts::Pin100,
_ => DevicePinOuts::Reserved,
}
}
}
impl Status {
pub fn stop_error_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().sackerr().bit()
}
pub fn debugger_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().mdmap().bit()
}
pub fn software_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().sw().bit()
}
pub fn lockup_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().lockup().bit()
}
pub fn power_on_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().por().bit()
}
pub fn pin_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().pin().bit()
}
pub fn watchdog_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().wdog().bit()
}
pub fn ics_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().loc().bit()
}
pub fn lv_reset(&self) -> bool {
unsafe { &(*SIM::ptr()) }.srsid.read().lvd().bit()
}
}
pub struct UUID;
impl UUID {
pub fn uuid(&self) -> u64 {
((self.uuid_h() as u64) << 32) | (self.uuid_l() as u64)
}
pub fn uuid_l(&self) -> u32 {
unsafe { &(*SIM::ptr()) }.uuidh.read().bits()
}
pub fn uuid_h(&self) -> u32 {
unsafe { &(*SIM::ptr()) }.uuidl.read().bits()
}
}