Skip to content

Commit 842adec

Browse files
committed
Merge branch 'develop' of https://github.com/rust-embedded-community/embedded-sdmmc-rs into add/lfn-support
2 parents a1716e0 + 1b9fa5c commit 842adec

29 files changed

+1361
-1144
lines changed

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ let sdcard = embedded_sdmmc::SdCard::new(sdmmc_spi, delay);
1717
println!("Card size is {} bytes", sdcard.num_bytes()?);
1818
// Now let's look for volumes (also known as partitions) on our block device.
1919
// To do this we need a Volume Manager. It will take ownership of the block device.
20-
let mut volume_mgr = embedded_sdmmc::VolumeManager::new(sdcard, time_source);
20+
let volume_mgr = embedded_sdmmc::VolumeManager::new(sdcard, time_source);
2121
// Try and access Volume 0 (i.e. the first partition).
2222
// The volume object holds information about the filesystem on that volume.
23-
let mut volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?;
23+
let volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?;
2424
println!("Volume 0: {:?}", volume0);
2525
// Open the root directory (mutably borrows from the volume).
26-
let mut root_dir = volume0.open_root_dir()?;
26+
let root_dir = volume0.open_root_dir()?;
2727
// Open a file called "MY_FILE.TXT" in the root directory
2828
// This mutably borrows the directory.
29-
let mut my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?;
29+
let my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?;
3030
// Print the contents of the file, assuming it's in ISO-8859-1 encoding
3131
while !my_file.is_eof() {
3232
let mut buffer = [0u8; 32];
@@ -43,7 +43,7 @@ By default the `VolumeManager` will initialize with a maximum number of `4` open
4343

4444
```rust
4545
// Create a volume manager with a maximum of 6 open directories, 12 open files, and 4 volumes (or partitions)
46-
let mut cont: VolumeManager<_, _, 6, 12, 4> = VolumeManager::new_with_limits(block, time_source);
46+
let cont: VolumeManager<_, _, 6, 12, 4> = VolumeManager::new_with_limits(block, time_source);
4747
```
4848

4949
## Supported features

examples/append_file.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,21 @@ use linux::*;
2222

2323
const FILE_TO_APPEND: &str = "README.TXT";
2424

25-
use embedded_sdmmc::{Error, Mode, VolumeIdx, VolumeManager};
25+
use embedded_sdmmc::{Error, Mode, VolumeIdx};
26+
27+
type VolumeManager = embedded_sdmmc::VolumeManager<LinuxBlockDevice, Clock, 8, 4, 4>;
2628

2729
fn main() -> Result<(), embedded_sdmmc::Error<std::io::Error>> {
2830
env_logger::init();
2931
let mut args = std::env::args().skip(1);
3032
let filename = args.next().unwrap_or_else(|| "/dev/mmcblk0".into());
3133
let print_blocks = args.find(|x| x == "-v").map(|_| true).unwrap_or(false);
3234
let lbd = LinuxBlockDevice::new(filename, print_blocks).map_err(Error::DeviceError)?;
33-
let mut volume_mgr: VolumeManager<LinuxBlockDevice, Clock, 8, 8, 4> =
34-
VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
35-
let mut volume = volume_mgr.open_volume(VolumeIdx(0))?;
36-
let mut root_dir = volume.open_root_dir()?;
35+
let volume_mgr: VolumeManager = VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
36+
let volume = volume_mgr.open_volume(VolumeIdx(0))?;
37+
let root_dir = volume.open_root_dir()?;
3738
println!("\nCreating file {}...", FILE_TO_APPEND);
38-
let mut f = root_dir.open_file_in_dir(FILE_TO_APPEND, Mode::ReadWriteAppend)?;
39+
let f = root_dir.open_file_in_dir(FILE_TO_APPEND, Mode::ReadWriteAppend)?;
3940
f.write(b"\r\n\r\nThis has been added to your file.\r\n")?;
4041
Ok(())
4142
}

examples/big_dir.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,29 @@ extern crate embedded_sdmmc;
33
mod linux;
44
use linux::*;
55

6-
use embedded_sdmmc::{Error, VolumeManager};
6+
use embedded_sdmmc::Error;
7+
8+
type VolumeManager = embedded_sdmmc::VolumeManager<LinuxBlockDevice, Clock, 8, 4, 4>;
79

810
fn main() -> Result<(), embedded_sdmmc::Error<std::io::Error>> {
911
env_logger::init();
1012
let mut args = std::env::args().skip(1);
1113
let filename = args.next().unwrap_or_else(|| "/dev/mmcblk0".into());
1214
let print_blocks = args.find(|x| x == "-v").map(|_| true).unwrap_or(false);
1315
let lbd = LinuxBlockDevice::new(filename, print_blocks).map_err(Error::DeviceError)?;
14-
let mut volume_mgr: VolumeManager<LinuxBlockDevice, Clock, 8, 8, 4> =
15-
VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
16-
let mut volume = volume_mgr
16+
let volume_mgr: VolumeManager = VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
17+
let volume = volume_mgr
1718
.open_volume(embedded_sdmmc::VolumeIdx(1))
1819
.unwrap();
1920
println!("Volume: {:?}", volume);
20-
let mut root_dir = volume.open_root_dir().unwrap();
21+
let root_dir = volume.open_root_dir().unwrap();
2122

2223
let mut file_num = 0;
2324
loop {
2425
file_num += 1;
2526
let file_name = format!("{}.da", file_num);
2627
println!("opening file {file_name} for writing");
27-
let mut file = root_dir
28+
let file = root_dir
2829
.open_file_in_dir(
2930
file_name.as_str(),
3031
embedded_sdmmc::Mode::ReadWriteCreateOrTruncate,

examples/create_file.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,24 @@ use linux::*;
2222

2323
const FILE_TO_CREATE: &str = "CREATE.TXT";
2424

25-
use embedded_sdmmc::{Error, Mode, VolumeIdx, VolumeManager};
25+
use embedded_sdmmc::{Error, Mode, VolumeIdx};
26+
27+
type VolumeManager = embedded_sdmmc::VolumeManager<LinuxBlockDevice, Clock, 8, 4, 4>;
2628

2729
fn main() -> Result<(), embedded_sdmmc::Error<std::io::Error>> {
2830
env_logger::init();
2931
let mut args = std::env::args().skip(1);
3032
let filename = args.next().unwrap_or_else(|| "/dev/mmcblk0".into());
3133
let print_blocks = args.find(|x| x == "-v").map(|_| true).unwrap_or(false);
3234
let lbd = LinuxBlockDevice::new(filename, print_blocks).map_err(Error::DeviceError)?;
33-
let mut volume_mgr: VolumeManager<LinuxBlockDevice, Clock, 8, 8, 4> =
34-
VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
35-
let mut volume = volume_mgr.open_volume(VolumeIdx(0))?;
36-
let mut root_dir = volume.open_root_dir()?;
35+
let volume_mgr: VolumeManager = VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
36+
let volume = volume_mgr.open_volume(VolumeIdx(0))?;
37+
let root_dir = volume.open_root_dir()?;
3738
println!("\nCreating file {}...", FILE_TO_CREATE);
3839
// This will panic if the file already exists: use ReadWriteCreateOrAppend
3940
// or ReadWriteCreateOrTruncate instead if you want to modify an existing
4041
// file.
41-
let mut f = root_dir.open_file_in_dir(FILE_TO_CREATE, Mode::ReadWriteCreate)?;
42+
let f = root_dir.open_file_in_dir(FILE_TO_CREATE, Mode::ReadWriteCreate)?;
4243
f.write(b"Hello, this is a new file on disk\r\n")?;
4344
Ok(())
4445
}

examples/delete_file.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,19 @@ use linux::*;
2525

2626
const FILE_TO_DELETE: &str = "README.TXT";
2727

28-
use embedded_sdmmc::{Error, VolumeIdx, VolumeManager};
28+
use embedded_sdmmc::{Error, VolumeIdx};
29+
30+
type VolumeManager = embedded_sdmmc::VolumeManager<LinuxBlockDevice, Clock, 8, 4, 4>;
2931

3032
fn main() -> Result<(), embedded_sdmmc::Error<std::io::Error>> {
3133
env_logger::init();
3234
let mut args = std::env::args().skip(1);
3335
let filename = args.next().unwrap_or_else(|| "/dev/mmcblk0".into());
3436
let print_blocks = args.find(|x| x == "-v").map(|_| true).unwrap_or(false);
3537
let lbd = LinuxBlockDevice::new(filename, print_blocks).map_err(Error::DeviceError)?;
36-
let mut volume_mgr: VolumeManager<LinuxBlockDevice, Clock, 8, 8, 4> =
37-
VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
38-
let mut volume = volume_mgr.open_volume(VolumeIdx(0))?;
39-
let mut root_dir = volume.open_root_dir()?;
38+
let volume_mgr: VolumeManager = VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
39+
let volume = volume_mgr.open_volume(VolumeIdx(0))?;
40+
let root_dir = volume.open_root_dir()?;
4041
println!("Deleting file {}...", FILE_TO_DELETE);
4142
root_dir.delete_file_in_dir(FILE_TO_DELETE)?;
4243
println!("Deleted!");

examples/linux/mod.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,14 @@ impl LinuxBlockDevice {
3434
impl BlockDevice for LinuxBlockDevice {
3535
type Error = std::io::Error;
3636

37-
fn read(
38-
&self,
39-
blocks: &mut [Block],
40-
start_block_idx: BlockIdx,
41-
reason: &str,
42-
) -> Result<(), Self::Error> {
37+
fn read(&self, blocks: &mut [Block], start_block_idx: BlockIdx) -> Result<(), Self::Error> {
4338
self.file
4439
.borrow_mut()
4540
.seek(SeekFrom::Start(start_block_idx.into_bytes()))?;
4641
for block in blocks.iter_mut() {
4742
self.file.borrow_mut().read_exact(&mut block.contents)?;
4843
if self.print_blocks {
49-
println!(
50-
"Read block ({}) {:?}: {:?}",
51-
reason, start_block_idx, &block
52-
);
44+
println!("Read block {:?}: {:?}", start_block_idx, &block);
5345
}
5446
}
5547
Ok(())

examples/list_dir.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,25 @@
3232
//! $ cargo run --example list_dir -- ./disk.img
3333
//! ```
3434
35-
extern crate embedded_sdmmc;
36-
3735
mod linux;
3836
use linux::*;
3937

40-
use embedded_sdmmc::{Directory, VolumeIdx, VolumeManager};
38+
use embedded_sdmmc::{ShortFileName, VolumeIdx};
4139

4240
type Error = embedded_sdmmc::Error<std::io::Error>;
4341

42+
type Directory<'a> = embedded_sdmmc::Directory<'a, LinuxBlockDevice, Clock, 8, 4, 4>;
43+
type VolumeManager = embedded_sdmmc::VolumeManager<LinuxBlockDevice, Clock, 8, 4, 4>;
44+
4445
fn main() -> Result<(), Error> {
4546
env_logger::init();
4647
let mut args = std::env::args().skip(1);
4748
let filename = args.next().unwrap_or_else(|| "/dev/mmcblk0".into());
4849
let print_blocks = args.find(|x| x == "-v").map(|_| true).unwrap_or(false);
50+
4951
let lbd = LinuxBlockDevice::new(filename, print_blocks).map_err(Error::DeviceError)?;
50-
let mut volume_mgr: VolumeManager<LinuxBlockDevice, Clock, 8, 8, 4> =
51-
VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
52-
let mut volume = volume_mgr.open_volume(VolumeIdx(0))?;
52+
let volume_mgr: VolumeManager = VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
53+
let volume = volume_mgr.open_volume(VolumeIdx(0))?;
5354
let root_dir = volume.open_root_dir()?;
5455
list_dir(root_dir, "/")?;
5556
Ok(())
@@ -58,10 +59,7 @@ fn main() -> Result<(), Error> {
5859
/// Recursively print a directory listing for the open directory given.
5960
///
6061
/// The path is for display purposes only.
61-
fn list_dir(
62-
mut directory: Directory<LinuxBlockDevice, Clock, 8, 8, 4>,
63-
path: &str,
64-
) -> Result<(), Error> {
62+
fn list_dir(directory: Directory<'_>, path: &str) -> Result<(), Error> {
6563
println!("Listing {}", path);
6664
let mut children = Vec::new();
6765
directory.iterate_dir(|entry| {
@@ -77,8 +75,8 @@ fn list_dir(
7775
}
7876
);
7977
if entry.attributes.is_directory()
80-
&& entry.name != embedded_sdmmc::ShortFileName::parent_dir()
81-
&& entry.name != embedded_sdmmc::ShortFileName::this_dir()
78+
&& entry.name != ShortFileName::parent_dir()
79+
&& entry.name != ShortFileName::this_dir()
8280
{
8381
children.push(entry.name.clone());
8482
}

examples/read_file.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,24 @@ use linux::*;
3939

4040
const FILE_TO_READ: &str = "README.TXT";
4141

42-
use embedded_sdmmc::{Error, Mode, VolumeIdx, VolumeManager};
42+
use embedded_sdmmc::{Error, Mode, VolumeIdx};
43+
44+
type VolumeManager = embedded_sdmmc::VolumeManager<LinuxBlockDevice, Clock, 8, 4, 4>;
4345

4446
fn main() -> Result<(), embedded_sdmmc::Error<std::io::Error>> {
4547
env_logger::init();
4648
let mut args = std::env::args().skip(1);
4749
let filename = args.next().unwrap_or_else(|| "/dev/mmcblk0".into());
4850
let print_blocks = args.find(|x| x == "-v").map(|_| true).unwrap_or(false);
4951
let lbd = LinuxBlockDevice::new(filename, print_blocks).map_err(Error::DeviceError)?;
50-
let mut volume_mgr: VolumeManager<LinuxBlockDevice, Clock, 8, 8, 4> =
51-
VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
52-
let mut volume = volume_mgr.open_volume(VolumeIdx(0))?;
53-
let mut root_dir = volume.open_root_dir()?;
52+
let volume_mgr: VolumeManager = VolumeManager::new_with_limits(lbd, Clock, 0xAA00_0000);
53+
let volume = volume_mgr.open_volume(VolumeIdx(0))?;
54+
let root_dir = volume.open_root_dir()?;
5455
println!("\nReading file {}...", FILE_TO_READ);
55-
let mut f = root_dir.open_file_in_dir(FILE_TO_READ, Mode::ReadOnly)?;
56+
let f = root_dir.open_file_in_dir(FILE_TO_READ, Mode::ReadOnly)?;
57+
// Proves we can open two files at once now (or try to - this file doesn't exist)
58+
let f2 = root_dir.open_file_in_dir("MISSING.DAT", Mode::ReadOnly);
59+
assert!(f2.is_err());
5660
while !f.is_eof() {
5761
let mut buffer = [0u8; 16];
5862
let offset = f.offset();

examples/readme_test.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,16 @@ fn main() -> Result<(), Error> {
125125
println!("Card size is {} bytes", sdcard.num_bytes()?);
126126
// Now let's look for volumes (also known as partitions) on our block device.
127127
// To do this we need a Volume Manager. It will take ownership of the block device.
128-
let mut volume_mgr = embedded_sdmmc::VolumeManager::new(sdcard, time_source);
128+
let volume_mgr = embedded_sdmmc::VolumeManager::new(sdcard, time_source);
129129
// Try and access Volume 0 (i.e. the first partition).
130130
// The volume object holds information about the filesystem on that volume.
131-
let mut volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?;
131+
let volume0 = volume_mgr.open_volume(embedded_sdmmc::VolumeIdx(0))?;
132132
println!("Volume 0: {:?}", volume0);
133133
// Open the root directory (mutably borrows from the volume).
134-
let mut root_dir = volume0.open_root_dir()?;
134+
let root_dir = volume0.open_root_dir()?;
135135
// Open a file called "MY_FILE.TXT" in the root directory
136136
// This mutably borrows the directory.
137-
let mut my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?;
137+
let my_file = root_dir.open_file_in_dir("MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?;
138138
// Print the contents of the file, assuming it's in ISO-8859-1 encoding
139139
while !my_file.is_eof() {
140140
let mut buffer = [0u8; 32];

0 commit comments

Comments
 (0)