From 89f1e6cbf8c2bbbf2904064bdafea27f99e4dd83 Mon Sep 17 00:00:00 2001 From: Zhouqi Jiang Date: Wed, 9 Oct 2024 09:39:00 +0800 Subject: [PATCH] hal: code cleanup on derived traits Signed-off-by: Zhouqi Jiang --- src/ccu.rs | 31 +++++++++++++++++-------------- src/gpio.rs | 1 + src/smhc.rs | 44 ++++++++++++++++++++++---------------------- src/spi.rs | 3 +++ src/uart.rs | 12 ++++++++---- 5 files changed, 51 insertions(+), 40 deletions(-) diff --git a/src/ccu.rs b/src/ccu.rs index fe2d63e..4ec536f 100644 --- a/src/ccu.rs +++ b/src/ccu.rs @@ -48,7 +48,7 @@ pub struct RegisterBlock { } /// CPU PLL Control register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct PllCpuControl(u32); @@ -148,7 +148,7 @@ impl PllCpuControl { } /// DDR PLL Control register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct PllDdrControl(u32); @@ -259,7 +259,7 @@ impl PllDdrControl { } /// Peripheral PLL Control register 0. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct PllPeri0Control(u32); @@ -381,7 +381,7 @@ impl PllPeri0Control { } /// AXI CPU clock source. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum CpuClockSource { /// 24-MHz external oscillator. Osc24M, @@ -400,7 +400,7 @@ pub enum CpuClockSource { } /// CPU AXI Configuration register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct CpuAxiConfig(u32); @@ -481,7 +481,7 @@ impl CpuAxiConfig { } /// MBUS Clock register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct MbusClock(u32); @@ -506,7 +506,7 @@ impl MbusClock { } /// DRAM Clock Register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct DramClock(u32); @@ -589,7 +589,7 @@ impl DramClock { } /// Dram Bus Gating Reset register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct DramBusGating(u32); @@ -620,7 +620,7 @@ impl DramBusGating { } /// Clock divide factor N. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum FactorN { /// Don't divide. N1, @@ -633,7 +633,7 @@ pub enum FactorN { } /// Clock divide factor P. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum FactorP { /// Don't divide. P1, @@ -644,9 +644,10 @@ pub enum FactorP { } /// UART Bus Gating Reset register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct UartBusGating(u32); + impl UartBusGating { /// Disable clock gate for UART `I`. #[inline] @@ -671,7 +672,7 @@ impl UartBusGating { } /// SPI Clock Register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct SpiClock(u32); @@ -738,7 +739,7 @@ impl SpiClock { } /// SPI clock source. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum SpiClockSource { /// HOSC. Hosc, @@ -753,7 +754,7 @@ pub enum SpiClockSource { } /// SPI Bus Gating Reset register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct SpiBusGating(u32); @@ -806,6 +807,7 @@ pub trait ClockConfig { /// Universal Asynchronous Receiver-Transmitter clock gate. /// /// UART peripheral should be indexed by type parameter `IDX`. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct UART; impl ClockGate for UART { @@ -828,6 +830,7 @@ impl ClockGate for UART { } /// Serial Peripheral Interface clock gate. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct SPI; impl ClockGate for SPI { diff --git a/src/gpio.rs b/src/gpio.rs index 82ad5d4..4fb62df 100644 --- a/src/gpio.rs +++ b/src/gpio.rs @@ -54,6 +54,7 @@ pub struct PioPow { } /// External interrupt event. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum Event { PositiveEdge, NegativeEdge, diff --git a/src/smhc.rs b/src/smhc.rs index 14026be..7229036 100644 --- a/src/smhc.rs +++ b/src/smhc.rs @@ -56,12 +56,12 @@ pub struct RegisterBlock { } /// Global control register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct GlobalControl(u32); /// FIFO access mode. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum AccessMode { // Dma bus. Dma, @@ -70,7 +70,7 @@ pub enum AccessMode { } /// DDR mode. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum DdrMode { // SDR mode. Sdr, @@ -175,7 +175,7 @@ impl GlobalControl { } /// Clock control register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct ClockControl(u32); @@ -245,12 +245,12 @@ impl TimeOut { } /// Bus width register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct BusWidth(u32); /// Bus width bits. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum BusWidthBits { /// 1 bit. OneBit, @@ -280,7 +280,7 @@ impl BusWidth { } /// Block size register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct BlockSize(u32); @@ -299,7 +299,7 @@ impl BlockSize { } /// Byte count register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct ByteCount(u32); @@ -318,12 +318,12 @@ impl ByteCount { } /// Command register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct Command(u32); /// Transfer direction. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum TransferDirection { /// Read from card. Read, @@ -514,7 +514,7 @@ impl Command { } /// Argument register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct Argument(u32); @@ -534,12 +534,12 @@ impl Argument { } /// Interrupt mask register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct InterruptMask(u32); /// Interrupt type. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum Interrupt { CardRemoved, CardInserted, @@ -655,7 +655,7 @@ impl InterruptMask { } /// Masked Interrupt state masked register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct InterruptStateMasked(u32); @@ -706,7 +706,7 @@ impl InterruptStateMasked { } /// Raw Interrupt state register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct InterruptStateRaw(u32); @@ -781,7 +781,7 @@ impl InterruptStateRaw { } /// State register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] // note: read-only register, no write functions pub struct Status(u32); @@ -815,12 +815,12 @@ impl Status { } /// FIFO water level register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct FifoWaterLevel(u32); /// Burst size. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum BurstSize { /// 1 byte. OneBit, @@ -876,12 +876,12 @@ impl FifoWaterLevel { } /// New timing set register. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct NewTimingSet(u32); /// New timing set timing phase. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum NtsTimingPhase { Offset90, Offset180, @@ -927,12 +927,12 @@ impl NewTimingSet { } /// Drive Delay Control register. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct DriveDelayControl(u32); /// Drive delay control timing phase. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum DdcTimingPhase { /// Offset is 90 degrees at SDR mode, 45 degrees at DDR mode. Sdr90Ddr45, diff --git a/src/spi.rs b/src/spi.rs index 6b18bb6..581b138 100644 --- a/src/spi.rs +++ b/src/spi.rs @@ -239,6 +239,7 @@ impl BurstControl { } /// Transmit data register. +#[derive(Debug)] #[repr(transparent)] pub struct TXD(UnsafeCell); @@ -261,6 +262,7 @@ impl TXD { } /// Receive data register. +#[derive(Debug)] #[repr(transparent)] pub struct RXD(UnsafeCell); @@ -283,6 +285,7 @@ impl RXD { } /// Managed SPI structure with peripheral and pins. +#[derive(Debug)] pub struct Spi> { spi: SPI, pins: PINS, diff --git a/src/uart.rs b/src/uart.rs index ff2a3a8..38d118a 100644 --- a/src/uart.rs +++ b/src/uart.rs @@ -41,7 +41,7 @@ impl Default for Config { } /// Serial word length settings. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum WordLength { /// 5 bits per word. Five, @@ -54,7 +54,7 @@ pub enum WordLength { } /// Serial parity bit settings. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum Parity { /// No parity checks. None, @@ -65,7 +65,7 @@ pub enum Parity { } /// Stop bit settings. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum StopBits { /// 1 stop bit One, @@ -82,6 +82,7 @@ impl core::ops::Deref for RegisterBlock { } /// Managed serial structure with peripheral and pads. +#[derive(Debug)] pub struct Serial> { uart: UART, pads: PADS, @@ -180,12 +181,14 @@ impl, const I: usize, TX: Transmit, RX: Receive } /// Transmit half from splitted serial structure. +#[derive(Debug)] pub struct TransmitHalf> { uart: UART, _pads: PADS, } /// Receive half from splitted serial structure. +#[derive(Debug)] pub struct ReceiveHalf> { uart: UART, _pads: PADS, @@ -315,11 +318,12 @@ impl, const I: usize, PADS: Receive> embedded_io:: } /// UART Status Register. +#[derive(Debug)] #[repr(transparent)] pub struct USR(UnsafeCell); /// Status settings for current peripheral. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(transparent)] pub struct UartStatus(u8);