file up & download and delete
This commit is contained in:
		
							
								
								
									
										73
									
								
								rust/src/hal/little_fs2storage_adapter.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								rust/src/hal/little_fs2storage_adapter.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
use embedded_storage::{ReadStorage, Storage};
 | 
			
		||||
use esp_bootloader_esp_idf::partitions::FlashRegion;
 | 
			
		||||
use esp_storage::FlashStorage;
 | 
			
		||||
use littlefs2::consts::U512 as lfsCache;
 | 
			
		||||
use littlefs2::consts::U512 as lfsLookahead;
 | 
			
		||||
use littlefs2::driver::Storage as lfs2Storage;
 | 
			
		||||
use littlefs2::fs::Filesystem as lfs2Filesystem;
 | 
			
		||||
use littlefs2::io::Error as lfs2Error;
 | 
			
		||||
use littlefs2::io::Result as lfs2Result;
 | 
			
		||||
use log::{error, info};
 | 
			
		||||
 | 
			
		||||
pub struct LittleFs2Filesystem {
 | 
			
		||||
    pub(crate) storage: &'static mut FlashRegion<'static, FlashStorage>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl lfs2Storage for LittleFs2Filesystem {
 | 
			
		||||
    const READ_SIZE: usize = 256;
 | 
			
		||||
    const WRITE_SIZE: usize = 512;
 | 
			
		||||
    const BLOCK_SIZE: usize = 512; //usually optimal for flash access
 | 
			
		||||
    const BLOCK_COUNT: usize = 8 * 1024 * 1024 / 512; //8mb in 32kb blocks
 | 
			
		||||
    const BLOCK_CYCLES: isize = 100;
 | 
			
		||||
    type CACHE_SIZE = lfsCache;
 | 
			
		||||
    type LOOKAHEAD_SIZE = lfsLookahead;
 | 
			
		||||
 | 
			
		||||
    fn read(&mut self, off: usize, buf: &mut [u8]) -> lfs2Result<usize> {
 | 
			
		||||
        let read_size: usize = Self::READ_SIZE;
 | 
			
		||||
        assert_eq!(off % read_size, 0);
 | 
			
		||||
        assert_eq!(buf.len() % read_size, 0);
 | 
			
		||||
        match self.storage.read(off as u32, buf) {
 | 
			
		||||
            anyhow::Result::Ok(..) => lfs2Result::Ok(buf.len()),
 | 
			
		||||
            Err(err) => {
 | 
			
		||||
                error!("Littlefs2Filesystem read error: {:?}", err);
 | 
			
		||||
                Err(lfs2Error::IO)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn write(&mut self, off: usize, data: &[u8]) -> lfs2Result<usize> {
 | 
			
		||||
        info!(
 | 
			
		||||
            "Littlefs2Filesystem write at offset {} with len {}",
 | 
			
		||||
            off,
 | 
			
		||||
            data.len()
 | 
			
		||||
        );
 | 
			
		||||
        let write_size: usize = Self::WRITE_SIZE;
 | 
			
		||||
        assert_eq!(off % write_size, 0);
 | 
			
		||||
        assert_eq!(data.len() % write_size, 0);
 | 
			
		||||
        match self.storage.write(off as u32, data) {
 | 
			
		||||
            anyhow::Result::Ok(..) => lfs2Result::Ok(data.len()),
 | 
			
		||||
            Err(err) => {
 | 
			
		||||
                error!("Littlefs2Filesystem write error: {:?}", err);
 | 
			
		||||
                Err(lfs2Error::IO)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn erase(&mut self, off: usize, len: usize) -> lfs2Result<usize> {
 | 
			
		||||
        info!(
 | 
			
		||||
            "Littlefs2Filesystem erase at offset {} with len {}",
 | 
			
		||||
            off, len
 | 
			
		||||
        );
 | 
			
		||||
        let block_size: usize = Self::BLOCK_SIZE;
 | 
			
		||||
        debug_assert!(off % block_size == 0);
 | 
			
		||||
        debug_assert!(len % block_size == 0);
 | 
			
		||||
        //match self.storage.erase(off as u32, len as u32) {
 | 
			
		||||
        //anyhow::Result::Ok(..) => lfs2Result::Ok(len),
 | 
			
		||||
        //Err(err) => {
 | 
			
		||||
        //error!("Littlefs2Filesystem erase error: {:?}", err);
 | 
			
		||||
        //Err(lfs2Error::IO)
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
        lfs2Result::Ok(len)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user