#[doc = "Register `DEVICE_TYPE` reader"]
pub type R = crate::R<DeviceTypeSpec>;
#[doc = "Field `DEVICE_TYPE_NUM` reader - Indicates the device part number"]
pub type DeviceTypeNumR = crate::FieldReader<u16>;
#[doc = "Indicates the device type\n\nValue on reset: 0"]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum DeviceTypeSec {
    #[doc = "0: Non Secure"]
    NonSec = 0,
    #[doc = "1: Secure"]
    Sec = 1,
}
impl From<DeviceTypeSec> for bool {
    #[inline(always)]
    fn from(variant: DeviceTypeSec) -> Self {
        variant as u8 != 0
    }
}
#[doc = "Field `DEVICE_TYPE_SEC` reader - Indicates the device type"]
pub type DeviceTypeSecR = crate::BitReader<DeviceTypeSec>;
impl DeviceTypeSecR {
    #[doc = "Get enumerated values variant"]
    #[inline(always)]
    pub const fn variant(&self) -> DeviceTypeSec {
        match self.bits {
            false => DeviceTypeSec::NonSec,
            true => DeviceTypeSec::Sec,
        }
    }
    #[doc = "Non Secure"]
    #[inline(always)]
    pub fn is_non_sec(&self) -> bool {
        *self == DeviceTypeSec::NonSec
    }
    #[doc = "Secure"]
    #[inline(always)]
    pub fn is_sec(&self) -> bool {
        *self == DeviceTypeSec::Sec
    }
}
#[doc = "Indicates the device's package type\n\nValue on reset: 0"]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)]
pub enum DeviceTypePkg {
    #[doc = "0: HLQFP"]
    Hlqfp = 0,
    #[doc = "1: HTQFP"]
    Htqfp = 1,
    #[doc = "2: BGA"]
    Bga = 2,
    #[doc = "3: HDQFP"]
    Hdqfp = 3,
    #[doc = "4: QFN"]
    Qfn = 4,
    #[doc = "5: CSP"]
    Csp = 5,
    #[doc = "6: LQFP"]
    Lqfp = 6,
}
impl From<DeviceTypePkg> for u8 {
    #[inline(always)]
    fn from(variant: DeviceTypePkg) -> Self {
        variant as _
    }
}
impl crate::FieldSpec for DeviceTypePkg {
    type Ux = u8;
}
impl crate::IsEnum for DeviceTypePkg {}
#[doc = "Field `DEVICE_TYPE_PKG` reader - Indicates the device's package type"]
pub type DeviceTypePkgR = crate::FieldReader<DeviceTypePkg>;
impl DeviceTypePkgR {
    #[doc = "Get enumerated values variant"]
    #[inline(always)]
    pub const fn variant(&self) -> Option<DeviceTypePkg> {
        match self.bits {
            0 => Some(DeviceTypePkg::Hlqfp),
            1 => Some(DeviceTypePkg::Htqfp),
            2 => Some(DeviceTypePkg::Bga),
            3 => Some(DeviceTypePkg::Hdqfp),
            4 => Some(DeviceTypePkg::Qfn),
            5 => Some(DeviceTypePkg::Csp),
            6 => Some(DeviceTypePkg::Lqfp),
            _ => None,
        }
    }
    #[doc = "HLQFP"]
    #[inline(always)]
    pub fn is_hlqfp(&self) -> bool {
        *self == DeviceTypePkg::Hlqfp
    }
    #[doc = "HTQFP"]
    #[inline(always)]
    pub fn is_htqfp(&self) -> bool {
        *self == DeviceTypePkg::Htqfp
    }
    #[doc = "BGA"]
    #[inline(always)]
    pub fn is_bga(&self) -> bool {
        *self == DeviceTypePkg::Bga
    }
    #[doc = "HDQFP"]
    #[inline(always)]
    pub fn is_hdqfp(&self) -> bool {
        *self == DeviceTypePkg::Hdqfp
    }
    #[doc = "QFN"]
    #[inline(always)]
    pub fn is_qfn(&self) -> bool {
        *self == DeviceTypePkg::Qfn
    }
    #[doc = "CSP"]
    #[inline(always)]
    pub fn is_csp(&self) -> bool {
        *self == DeviceTypePkg::Csp
    }
    #[doc = "LQFP"]
    #[inline(always)]
    pub fn is_lqfp(&self) -> bool {
        *self == DeviceTypePkg::Lqfp
    }
}
#[doc = "Field `DEVICE_TYPE_PIN` reader - Indicates the device's pin number"]
pub type DeviceTypePinR = crate::FieldReader;
impl R {
    #[doc = "Bits 0:15 - Indicates the device part number"]
    #[inline(always)]
    pub fn device_type_num(&self) -> DeviceTypeNumR {
        DeviceTypeNumR::new((self.bits & 0xffff) as u16)
    }
    #[doc = "Bit 16 - Indicates the device type"]
    #[inline(always)]
    pub fn device_type_sec(&self) -> DeviceTypeSecR {
        DeviceTypeSecR::new(((self.bits >> 16) & 1) != 0)
    }
    #[doc = "Bits 20:23 - Indicates the device's package type"]
    #[inline(always)]
    pub fn device_type_pkg(&self) -> DeviceTypePkgR {
        DeviceTypePkgR::new(((self.bits >> 20) & 0x0f) as u8)
    }
    #[doc = "Bits 24:31 - Indicates the device's pin number"]
    #[inline(always)]
    pub fn device_type_pin(&self) -> DeviceTypePinR {
        DeviceTypePinR::new(((self.bits >> 24) & 0xff) as u8)
    }
}
#[cfg(feature = "debug")]
impl core::fmt::Debug for R {
    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
        f.debug_struct("DEVICE_TYPE")
            .field("device_type_num", &self.device_type_num())
            .field("device_type_sec", &self.device_type_sec())
            .field("device_type_pkg", &self.device_type_pkg())
            .field("device_type_pin", &self.device_type_pin())
            .finish()
    }
}
#[doc = "Device Type\n\nYou can [`read`](crate::Reg::read) this register and get [`device_type::R`](R). See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
pub struct DeviceTypeSpec;
impl crate::RegisterSpec for DeviceTypeSpec {
    type Ux = u32;
}
#[doc = "`read()` method returns [`device_type::R`](R) reader structure"]
impl crate::Readable for DeviceTypeSpec {}
#[doc = "`reset()` method sets DEVICE_TYPE to value 0x2000"]
impl crate::Resettable for DeviceTypeSpec {
    const RESET_VALUE: u32 = 0x2000;
}
