Skip to content

Commit 7336603

Browse files
committed
Enforce correct SD state at compilation using a new type
The struct `SdMmcSpi` had two separate methods for initialization and deinitialization. It was up to the user not to mess them up at runtime. A new `BlockSpi` struct takes over `BlockDevice` interface duties, making it impossible to use block procedures while the SD interface is in the wrong state.
1 parent 65ba598 commit 7336603

File tree

2 files changed

+161
-145
lines changed

2 files changed

+161
-145
lines changed

src/lib.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@
3535
//! # let mut sdmmc_spi = DummySpi;
3636
//! # let mut sdmmc_cs = DummyCsPin;
3737
//! # let time_source = DummyTimeSource;
38-
//! let mut cont = embedded_sdmmc::Controller::new(embedded_sdmmc::SdMmcSpi::new(sdmmc_spi, sdmmc_cs), time_source);
38+
//! let mut spi_dev = embedded_sdmmc::SdMmcSpi::new(sdmmc_spi, sdmmc_cs);
3939
//! write!(uart, "Init SD card...").unwrap();
40-
//! match cont.device().init() {
41-
//! Ok(_) => {
40+
//! match spi_dev.acquire() {
41+
//! Ok(block) => {
42+
//! let mut cont = embedded_sdmmc::Controller::new(block, time_source);
4243
//! write!(uart, "OK!\nCard size...").unwrap();
4344
//! match cont.device().card_size_bytes() {
4445
//! Ok(size) => writeln!(uart, "{}", size).unwrap(),
@@ -51,7 +52,7 @@
5152
//! }
5253
//! }
5354
//! Err(e) => writeln!(uart, "{:?}!", e).unwrap(),
54-
//! }
55+
//! };
5556
//! ```
5657
5758
#![cfg_attr(not(test), no_std)]
@@ -88,7 +89,7 @@ pub use crate::filesystem::{
8889
Timestamp, MAX_FILE_SIZE,
8990
};
9091
pub use crate::sdmmc::Error as SdMmcError;
91-
pub use crate::sdmmc::SdMmcSpi;
92+
pub use crate::sdmmc::{BlockSpi, SdMmcSpi};
9293

9394
// ****************************************************************************
9495
//

0 commit comments

Comments
 (0)