|
17 | 17 | //! suitable for reading SD and SDHC cards over SPI.
|
18 | 18 | //!
|
19 | 19 | //! ```rust,no_run
|
20 |
| -//! # struct DummySpi; |
21 |
| -//! # struct DummyCsPin; |
22 |
| -//! # struct DummyUart; |
23 |
| -//! # struct DummyTimeSource; |
24 |
| -//! # struct DummyDelayer; |
25 |
| -//! # use embedded_hal::spi::Operation; |
26 |
| -//! # use embedded_hal::spi::ErrorType; |
27 |
| -//! # use core::convert::Infallible; |
28 |
| -//! # use core::fmt; |
29 |
| -//! # impl ErrorType for DummySpi { |
30 |
| -//! # type Error = Infallible; |
31 |
| -//! # } |
32 |
| -//! # impl embedded_hal::spi::SpiDevice<u8> for DummySpi { |
33 |
| -//! # fn transaction(&mut self, operations: &mut [Operation<'_, u8>]) -> Result<(), Self::Error> { Ok(()) } |
34 |
| -//! # fn read(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> { Ok(()) } |
35 |
| -//! # fn write(&mut self, buf: &[u8]) -> Result<(), Self::Error> { Ok(()) } |
36 |
| -//! # fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { Ok(()) } |
37 |
| -//! # fn transfer_in_place(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> { Ok(()) } |
38 |
| -//! # } |
39 |
| -//! # impl embedded_hal::digital::ErrorType for DummyCsPin { |
40 |
| -//! # type Error = Infallible; |
41 |
| -//! # } |
42 |
| -//! # impl embedded_hal::digital::OutputPin for DummyCsPin { |
43 |
| -//! # fn set_low(&mut self) -> Result<(), Self::Error> { Ok(()) } |
44 |
| -//! # fn set_high(&mut self) -> Result<(), Self::Error> { Ok(()) } |
45 |
| -//! # } |
46 |
| -//! # impl embedded_sdmmc::TimeSource for DummyTimeSource { |
47 |
| -//! # fn get_timestamp(&self) -> embedded_sdmmc::Timestamp { embedded_sdmmc::Timestamp::from_fat(0, 0) } |
48 |
| -//! # } |
49 |
| -//! # impl embedded_hal::delay::DelayNs for DummyDelayer { |
50 |
| -//! # fn delay_ns(&mut self, ns: u32) {} |
51 |
| -//! # } |
52 |
| -//! # impl fmt::Write for DummyUart { |
53 |
| -//! # fn write_str(&mut self, s: &str) -> fmt::Result { Ok(()) } |
54 |
| -//! # } |
55 |
| -//! # use embedded_sdmmc::VolumeManager; |
56 |
| -//! # fn main() -> Result<(), embedded_sdmmc::Error<embedded_sdmmc::SdCardError>> { |
57 |
| -//! # let mut sdmmc_spi = DummySpi; |
58 |
| -//! # let mut sdmmc_cs = DummyCsPin; |
59 |
| -//! # let time_source = DummyTimeSource; |
60 |
| -//! # let delayer = DummyDelayer; |
61 |
| -//! # let sdcard = embedded_sdmmc::SdCard::new(sdmmc_spi, sdmmc_cs, delayer); |
62 |
| -//! # println!("Card size is {} bytes", sdcard.num_bytes()?); |
63 |
| -//! # let mut volume_mgr = VolumeManager::new(sdcard, time_source); |
64 |
| -//! # let mut volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?; |
65 |
| -//! # println!("Volume 0: {:?}", volume0); |
66 |
| -//! # let mut root_dir = volume0.open_root_dir()?; |
67 |
| -//! # let mut my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?; |
68 |
| -//! # while !my_file.is_eof() { |
69 |
| -//! # let mut buffer = [0u8; 32]; |
70 |
| -//! # let num_read = my_file.read(&mut buffer)?; |
71 |
| -//! # for b in &buffer[0..num_read] { |
72 |
| -//! # print!("{}", *b as char); |
73 |
| -//! # } |
74 |
| -//! # } |
75 |
| -//! # Ok(()) |
76 |
| -//! # } |
| 20 | +//! struct DummySpi; |
| 21 | +//! struct DummyCsPin; |
| 22 | +//! struct DummyUart; |
| 23 | +//! struct DummyTimeSource; |
| 24 | +//! struct DummyDelayer; |
| 25 | +//! use embedded_hal::spi::Operation; |
| 26 | +//! use embedded_hal::spi::ErrorType; |
| 27 | +//! use core::convert::Infallible; |
| 28 | +//! use core::fmt; |
| 29 | +//! impl ErrorType for DummySpi { |
| 30 | +//! type Error = Infallible; |
| 31 | +//! } |
| 32 | +//! impl embedded_hal::spi::SpiDevice<u8> for DummySpi { |
| 33 | +//! fn transaction(&mut self, operations: &mut [Operation<'_, u8>]) -> Result<(), Self::Error> { Ok(()) } |
| 34 | +//! fn read(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> { Ok(()) } |
| 35 | +//! fn write(&mut self, buf: &[u8]) -> Result<(), Self::Error> { Ok(()) } |
| 36 | +//! fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { Ok(()) } |
| 37 | +//! fn transfer_in_place(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> { Ok(()) } |
| 38 | +//! } |
| 39 | +//! impl embedded_hal::digital::ErrorType for DummyCsPin { |
| 40 | +//! type Error = Infallible; |
| 41 | +//! } |
| 42 | +//! impl embedded_hal::digital::OutputPin for DummyCsPin { |
| 43 | +//! fn set_low(&mut self) -> Result<(), Self::Error> { Ok(()) } |
| 44 | +//! fn set_high(&mut self) -> Result<(), Self::Error> { Ok(()) } |
| 45 | +//! } |
| 46 | +//! impl embedded_sdmmc::TimeSource for DummyTimeSource { |
| 47 | +//! fn get_timestamp(&self) -> embedded_sdmmc::Timestamp { embedded_sdmmc::Timestamp::from_fat(0, 0) } |
| 48 | +//! } |
| 49 | +//! impl embedded_hal::delay::DelayNs for DummyDelayer { |
| 50 | +//! fn delay_ns(&mut self, ns: u32) {} |
| 51 | +//! } |
| 52 | +//! impl fmt::Write for DummyUart { |
| 53 | +//! fn write_str(&mut self, s: &str) -> fmt::Result { Ok(()) } |
| 54 | +//! } |
| 55 | +//! use embedded_sdmmc::VolumeManager; |
| 56 | +//! fn main() -> Result<(), embedded_sdmmc::Error<embedded_sdmmc::SdCardError>> { |
| 57 | +//! let mut sdmmc_spi = DummySpi; |
| 58 | +//! let mut sdmmc_cs = DummyCsPin; |
| 59 | +//! let time_source = DummyTimeSource; |
| 60 | +//! let delayer = DummyDelayer; |
| 61 | +//! let sdcard = embedded_sdmmc::SdCard::new(sdmmc_spi, sdmmc_cs, delayer); |
| 62 | +//! println!("Card size is {} bytes", sdcard.num_bytes()?); |
| 63 | +//! let mut volume_mgr = VolumeManager::new(sdcard, time_source); |
| 64 | +//! let mut volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?; |
| 65 | +//! println!("Volume 0: {:?}", volume0); |
| 66 | +//! let mut root_dir = volume0.open_root_dir()?; |
| 67 | +//! let mut my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?; |
| 68 | +//! while !my_file.is_eof() { |
| 69 | +//! let mut buffer = [0u8; 32]; |
| 70 | +//! let num_read = my_file.read(&mut buffer)?; |
| 71 | +//! for b in &buffer[0..num_read] { |
| 72 | +//! print!("{}", *b as char); |
| 73 | +//! } |
| 74 | +//! } |
| 75 | +//! Ok(()) |
| 76 | +//! } |
77 | 77 | //! ```
|
78 | 78 | //!
|
79 | 79 | //! ## Features
|
|
0 commit comments