Add #![deny(missing_docs)] to the aes, analog, clock, and dma modules (#1849)

* Deny missing documentation within the `analog` module

* Deny missing documentation in the `dma` module

* Remove unused `ENCRYPT_MODE`/`DECRYPT_MODE` constants from `AesFlavour` trait

* Deny missing documentation in the `aes` module

* Deny missing documentation in the `clock` module

* Update `CHANGELOG.md`
This commit is contained in:
Jesse Braham 2024-07-25 13:05:59 +00:00 committed by GitHub
parent 3215d93f53
commit 45db1b55ec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 58 additions and 30 deletions

View File

@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Removed ### Removed
- This package no longer re-exports the `esp_hal_procmacros::main` macro (#1828) - This package no longer re-exports the `esp_hal_procmacros::main` macro (#1828)
- The `AesFlavour` trait no longer has the `ENCRYPT_MODE`/`DECRYPT_MODE` associated constants (#1849)
## [0.19.0] - 2024-07-15 ## [0.19.0] - 2024-07-15

View File

@ -73,18 +73,12 @@ impl<'d> Aes<'d> {
impl AesFlavour for Aes128 { impl AesFlavour for Aes128 {
type KeyType<'b> = &'b [u8; 16]; type KeyType<'b> = &'b [u8; 16];
const ENCRYPT_MODE: u32 = 0;
const DECRYPT_MODE: u32 = 4;
} }
impl AesFlavour for Aes192 { impl AesFlavour for Aes192 {
type KeyType<'b> = &'b [u8; 24]; type KeyType<'b> = &'b [u8; 24];
const ENCRYPT_MODE: u32 = 1;
const DECRYPT_MODE: u32 = 5;
} }
impl AesFlavour for Aes256 { impl AesFlavour for Aes256 {
type KeyType<'b> = &'b [u8; 32]; type KeyType<'b> = &'b [u8; 32];
const ENCRYPT_MODE: u32 = 2;
const DECRYPT_MODE: u32 = 6;
} }

View File

@ -50,12 +50,8 @@ impl<'d> Aes<'d> {
impl AesFlavour for Aes128 { impl AesFlavour for Aes128 {
type KeyType<'b> = &'b [u8; 16]; type KeyType<'b> = &'b [u8; 16];
const ENCRYPT_MODE: u32 = 0;
const DECRYPT_MODE: u32 = 4;
} }
impl AesFlavour for Aes256 { impl AesFlavour for Aes256 {
type KeyType<'b> = &'b [u8; 32]; type KeyType<'b> = &'b [u8; 32];
const ENCRYPT_MODE: u32 = 2;
const DECRYPT_MODE: u32 = 6;
} }

View File

@ -87,18 +87,12 @@ impl<'d> Aes<'d> {
impl AesFlavour for Aes128 { impl AesFlavour for Aes128 {
type KeyType<'b> = &'b [u8; 16]; type KeyType<'b> = &'b [u8; 16];
const ENCRYPT_MODE: u32 = 0;
const DECRYPT_MODE: u32 = 4;
} }
impl AesFlavour for Aes192 { impl AesFlavour for Aes192 {
type KeyType<'b> = &'b [u8; 24]; type KeyType<'b> = &'b [u8; 24];
const ENCRYPT_MODE: u32 = 1;
const DECRYPT_MODE: u32 = 5;
} }
impl AesFlavour for Aes256 { impl AesFlavour for Aes256 {
type KeyType<'b> = &'b [u8; 32]; type KeyType<'b> = &'b [u8; 32];
const ENCRYPT_MODE: u32 = 2;
const DECRYPT_MODE: u32 = 6;
} }

View File

@ -59,12 +59,8 @@ impl<'d> Aes<'d> {
impl AesFlavour for Aes128 { impl AesFlavour for Aes128 {
type KeyType<'b> = &'b [u8; 16]; type KeyType<'b> = &'b [u8; 16];
const ENCRYPT_MODE: u32 = 0;
const DECRYPT_MODE: u32 = 4;
} }
impl AesFlavour for Aes256 { impl AesFlavour for Aes256 {
type KeyType<'b> = &'b [u8; 32]; type KeyType<'b> = &'b [u8; 32];
const ENCRYPT_MODE: u32 = 2;
const DECRYPT_MODE: u32 = 6;
} }

View File

@ -46,6 +46,8 @@
//! * AES-DMA mode is currently not supported on ESP32 and ESP32S2 //! * AES-DMA mode is currently not supported on ESP32 and ESP32S2
//! * AES-DMA Initialization Vector (IV) is currently not supported //! * AES-DMA Initialization Vector (IV) is currently not supported
#![deny(missing_docs)]
use crate::{ use crate::{
peripheral::{Peripheral, PeripheralRef}, peripheral::{Peripheral, PeripheralRef},
peripherals::AES, peripherals::AES,
@ -179,9 +181,11 @@ impl<'d> Aes<'d> {
/// Specifications for AES flavours /// Specifications for AES flavours
pub trait AesFlavour: crate::private::Sealed { pub trait AesFlavour: crate::private::Sealed {
/// Type of the AES key, a fixed-size array of bytes
///
/// The size of this type depends on various factors, such as the device
/// being targeted and the desired key size.
type KeyType<'b>; type KeyType<'b>;
const ENCRYPT_MODE: u32;
const DECRYPT_MODE: u32;
} }
/// Marker type for AES-128 /// Marker type for AES-128
@ -202,7 +206,9 @@ impl crate::private::Sealed for Aes256 {}
/// State matrix endianness /// State matrix endianness
#[cfg(any(esp32, esp32s2))] #[cfg(any(esp32, esp32s2))]
pub enum Endianness { pub enum Endianness {
/// Big endian (most-significant byte at the smallest address)
BigEndian = 1, BigEndian = 1,
/// Little endian (least-significant byte at the smallest address)
LittleEndian = 0, LittleEndian = 0,
} }
@ -258,6 +264,7 @@ pub mod dma {
C: DmaChannel, C: DmaChannel,
C::P: AesPeripheral, C::P: AesPeripheral,
{ {
/// The underlying [`Aes`](super::Aes) driver
pub aes: super::Aes<'d>, pub aes: super::Aes<'d>,
pub(crate) channel: Channel<'d, C, crate::Blocking>, pub(crate) channel: Channel<'d, C, crate::Blocking>,
@ -265,11 +272,13 @@ pub mod dma {
rx_chain: DescriptorChain, rx_chain: DescriptorChain,
} }
/// Functionality for using AES with DMA.
pub trait WithDmaAes<'d, C> pub trait WithDmaAes<'d, C>
where where
C: DmaChannel, C: DmaChannel,
C::P: AesPeripheral, C::P: AesPeripheral,
{ {
/// Enable DMA for the current instance of the AES driver
fn with_dma( fn with_dma(
self, self,
channel: Channel<'d, C, crate::Blocking>, channel: Channel<'d, C, crate::Blocking>,

View File

@ -9,9 +9,13 @@ pub(super) const NUM_ATTENS: usize = 10;
/// The sampling/readout resolution of the ADC. /// The sampling/readout resolution of the ADC.
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum Resolution { pub enum Resolution {
/// 9-bit resolution
Resolution9Bit = 0b00, Resolution9Bit = 0b00,
/// 10-bit resolution
Resolution10Bit = 0b01, Resolution10Bit = 0b01,
/// 11-bit resolution
Resolution11Bit = 0b10, Resolution11Bit = 0b10,
/// 12-bit resolution
#[default] #[default]
Resolution12Bit = 0b11, Resolution12Bit = 0b11,
} }
@ -324,15 +328,15 @@ where
} }
impl<'d, ADC1> Adc<'d, ADC1> { impl<'d, ADC1> Adc<'d, ADC1> {
/// Enable the Hall sensor
pub fn enable_hall_sensor() { pub fn enable_hall_sensor() {
// Connect hall sensor
unsafe { &*RTC_IO::ptr() } unsafe { &*RTC_IO::ptr() }
.hall_sens() .hall_sens()
.modify(|_, w| w.xpd_hall().set_bit()); .modify(|_, w| w.xpd_hall().set_bit());
} }
/// Disable the Hall sensor
pub fn disable_hall_sensor() { pub fn disable_hall_sensor() {
// Disconnect hall sensor
unsafe { &*RTC_IO::ptr() } unsafe { &*RTC_IO::ptr() }
.hall_sens() .hall_sens()
.modify(|_, w| w.xpd_hall().clear_bit()); .modify(|_, w| w.xpd_hall().clear_bit());

View File

@ -87,13 +87,17 @@ pub enum Attenuation {
#[cfg(not(esp32))] #[cfg(not(esp32))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdcCalSource { pub enum AdcCalSource {
/// Use Ground as the calibration source
Gnd, Gnd,
/// Use Vref as the calibration source
Ref, Ref,
} }
/// An I/O pin which can be read using the ADC. /// An I/O pin which can be read using the ADC.
pub struct AdcPin<PIN, ADCI, CS = ()> { pub struct AdcPin<PIN, ADCI, CS = ()> {
/// The underlying GPIO pin
pub pin: PIN, pub pin: PIN,
/// Calibration scheme used for the configured ADC pin
#[cfg_attr(esp32, allow(unused))] #[cfg_attr(esp32, allow(unused))]
pub cal_scheme: CS, pub cal_scheme: CS,
_phantom: PhantomData<ADCI>, _phantom: PhantomData<ADCI>,
@ -113,8 +117,9 @@ where
/// Configuration for the ADC. /// Configuration for the ADC.
pub struct AdcConfig<ADCI> { pub struct AdcConfig<ADCI> {
pub resolution: Resolution, #[cfg_attr(not(esp32), allow(unused))]
pub attenuations: [Option<Attenuation>; NUM_ATTENS], resolution: Resolution,
attenuations: [Option<Attenuation>; NUM_ATTENS],
_phantom: PhantomData<ADCI>, _phantom: PhantomData<ADCI>,
} }
@ -190,6 +195,7 @@ pub trait CalibrationAccess: RegisterAccess {
/// A helper trait to get the ADC channel of a compatible GPIO pin. /// A helper trait to get the ADC channel of a compatible GPIO pin.
pub trait AdcChannel { pub trait AdcChannel {
/// Channel number used by the ADC
const CHANNEL: u8; const CHANNEL: u8;
} }

View File

@ -103,6 +103,7 @@ cfg_if::cfg_if! {
/// The sampling/readout resolution of the ADC. /// The sampling/readout resolution of the ADC.
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum Resolution { pub enum Resolution {
/// 12-bit resolution
#[default] #[default]
Resolution12Bit, Resolution12Bit,
} }

View File

@ -74,6 +74,7 @@ cfg_if::cfg_if! {
/// The sampling/readout resolution of the ADC. /// The sampling/readout resolution of the ADC.
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum Resolution { pub enum Resolution {
/// 13-bit resolution
#[default] #[default]
Resolution13Bit, Resolution13Bit,
} }

View File

@ -41,8 +41,6 @@
//! # } //! # }
//! ``` //! ```
#![deny(missing_docs)]
use crate::{ use crate::{
gpio::{self, AnalogPin}, gpio::{self, AnalogPin},
peripheral::{Peripheral, PeripheralRef}, peripheral::{Peripheral, PeripheralRef},

View File

@ -5,6 +5,8 @@
//! available on the device. For more information about a peripheral driver, //! available on the device. For more information about a peripheral driver,
//! please refer to the relevant module documentation. //! please refer to the relevant module documentation.
#![deny(missing_docs)]
#[cfg(adc)] #[cfg(adc)]
pub mod adc; pub mod adc;
#[cfg(dac)] #[cfg(dac)]

View File

@ -70,6 +70,8 @@
//! # } //! # }
//! ``` //! ```
#![deny(missing_docs)]
use fugit::HertzU32; use fugit::HertzU32;
#[cfg(any(esp32, esp32c2))] #[cfg(any(esp32, esp32c2))]
@ -88,13 +90,17 @@ use crate::{
#[cfg_attr(esp32s3, path = "clocks_ll/esp32s3.rs")] #[cfg_attr(esp32s3, path = "clocks_ll/esp32s3.rs")]
pub(crate) mod clocks_ll; pub(crate) mod clocks_ll;
/// Clock properties
pub trait Clock { pub trait Clock {
/// Frequency of the clock in [Hertz](fugit::HertzU32), using [fugit] types.
fn frequency(&self) -> HertzU32; fn frequency(&self) -> HertzU32;
/// Frequency of the clock in Megahertz
fn mhz(&self) -> u32 { fn mhz(&self) -> u32 {
self.frequency().to_MHz() self.frequency().to_MHz()
} }
/// Frequency of the clock in Hertz
fn hz(&self) -> u32 { fn hz(&self) -> u32 {
self.frequency().to_Hz() self.frequency().to_Hz()
} }
@ -103,14 +109,19 @@ pub trait Clock {
/// CPU clock speed /// CPU clock speed
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum CpuClock { pub enum CpuClock {
/// 80MHz CPU clock
#[cfg(not(esp32h2))] #[cfg(not(esp32h2))]
Clock80MHz, Clock80MHz,
/// 96MHz CPU clock
#[cfg(esp32h2)] #[cfg(esp32h2)]
Clock96MHz, Clock96MHz,
/// 120MHz CPU clock
#[cfg(esp32c2)] #[cfg(esp32c2)]
Clock120MHz, Clock120MHz,
/// 160MHz CPU clock
#[cfg(not(any(esp32c2, esp32h2)))] #[cfg(not(any(esp32c2, esp32h2)))]
Clock160MHz, Clock160MHz,
/// 240MHz CPU clock
#[cfg(xtensa)] #[cfg(xtensa)]
Clock240MHz, Clock240MHz,
} }
@ -133,15 +144,20 @@ impl Clock for CpuClock {
} }
} }
/// XTAL clock speed
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
#[non_exhaustive] #[non_exhaustive]
pub enum XtalClock { pub enum XtalClock {
/// 26MHz XTAL clock
#[cfg(any(esp32, esp32c2))] #[cfg(any(esp32, esp32c2))]
RtcXtalFreq26M, RtcXtalFreq26M,
/// 32MHz XTAL clock
#[cfg(any(esp32c3, esp32h2, esp32s3))] #[cfg(any(esp32c3, esp32h2, esp32s3))]
RtcXtalFreq32M, RtcXtalFreq32M,
/// 40MHz XTAL clock
#[cfg(not(esp32h2))] #[cfg(not(esp32h2))]
RtcXtalFreq40M, RtcXtalFreq40M,
/// Other XTAL clock
RtcXtalFreqOther(u32), RtcXtalFreqOther(u32),
} }
@ -239,23 +255,32 @@ impl Clock for ApbClock {
/// Frozen clock frequencies /// Frozen clock frequencies
/// ///
/// The existence of this value indicates that the clock configuration can no /// The instantiation of this type indicates that the clock configuration can no
/// longer be changed /// longer be changed
pub struct Clocks<'d> { pub struct Clocks<'d> {
_private: PeripheralRef<'d, SystemClockControl>, _private: PeripheralRef<'d, SystemClockControl>,
/// CPU clock frequency
pub cpu_clock: HertzU32, pub cpu_clock: HertzU32,
/// APB clock frequency
pub apb_clock: HertzU32, pub apb_clock: HertzU32,
/// XTAL clock frequency
pub xtal_clock: HertzU32, pub xtal_clock: HertzU32,
/// I2C clock frequency
#[cfg(esp32)] #[cfg(esp32)]
pub i2c_clock: HertzU32, pub i2c_clock: HertzU32,
/// PWM clock frequency
#[cfg(esp32)] #[cfg(esp32)]
pub pwm_clock: HertzU32, pub pwm_clock: HertzU32,
/// Crypto PWM clock frequency
#[cfg(esp32s3)] #[cfg(esp32s3)]
pub crypto_pwm_clock: HertzU32, pub crypto_pwm_clock: HertzU32,
/// Crypto clock frequency
#[cfg(any(esp32c6, esp32h2))] #[cfg(any(esp32c6, esp32h2))]
pub crypto_clock: HertzU32, pub crypto_clock: HertzU32,
/// PLL 48M clock frequency (fixed)
#[cfg(esp32h2)] #[cfg(esp32h2)]
pub pll_48m_clock: HertzU32, pub pll_48m_clock: HertzU32,
/// PLL 96M clock frequency (fixed)
#[cfg(esp32h2)] #[cfg(esp32h2)]
pub pll_96m_clock: HertzU32, pub pll_96m_clock: HertzU32,
} }

View File

@ -49,7 +49,8 @@
//! on esp32s3. //! on esp32s3.
//! //!
//! For convenience you can use the [crate::dma_buffers] macro. //! For convenience you can use the [crate::dma_buffers] macro.
#![warn(missing_docs)]
#![deny(missing_docs)]
use core::{fmt::Debug, marker::PhantomData, ptr::addr_of_mut, sync::atomic::compiler_fence}; use core::{fmt::Debug, marker::PhantomData, ptr::addr_of_mut, sync::atomic::compiler_fence};