allow list get put delete of files
This commit is contained in:
@@ -2,6 +2,7 @@ use bq34z100::{Bq34Z100Error, Bq34z100g1, Bq34z100g1Driver};
|
||||
|
||||
use ds323x::{DateTimeAccess, Ds323x};
|
||||
|
||||
use eeprom24x::page_size::No;
|
||||
use eeprom24x::{Eeprom24x, SlaveAddr};
|
||||
use embedded_hal_bus::i2c::MutexDevice;
|
||||
use embedded_svc::wifi::{
|
||||
@@ -13,6 +14,7 @@ use esp_idf_hal::adc::{attenuation, Resolution};
|
||||
use esp_idf_hal::i2c::{APBTickType, I2cConfig, I2cDriver, I2cError};
|
||||
use esp_idf_hal::units::FromValueType;
|
||||
use esp_idf_svc::eventloop::EspSystemEventLoop;
|
||||
use esp_idf_svc::io::vfs;
|
||||
use esp_idf_svc::ipv4::IpInfo;
|
||||
use esp_idf_svc::mqtt::client::QoS::AtLeastOnce;
|
||||
use esp_idf_svc::mqtt::client::QoS::ExactlyOnce;
|
||||
@@ -50,7 +52,7 @@ use esp_idf_hal::prelude::Peripherals;
|
||||
use esp_idf_hal::reset::ResetReason;
|
||||
use esp_idf_svc::sntp::{self, SyncStatus};
|
||||
use esp_idf_svc::systime::EspSystemTime;
|
||||
use esp_idf_sys::{gpio_hold_dis, gpio_hold_en, vTaskDelay, EspError};
|
||||
use esp_idf_sys::{esp, esp_spiffs_check, f_opendir, gpio_hold_dis, gpio_hold_en, vTaskDelay, EspError};
|
||||
use one_wire_bus::OneWire;
|
||||
|
||||
use crate::config::{self, Config};
|
||||
@@ -174,21 +176,82 @@ pub struct FileInfo{
|
||||
size:usize
|
||||
}
|
||||
|
||||
#[derive(Serialize, Debug)]
|
||||
pub struct FileList{
|
||||
files: Vec<FileInfo>,
|
||||
file_system_corrupt: Option<String>,
|
||||
iter_error: Option<String>,
|
||||
}
|
||||
|
||||
impl PlantCtrlBoard<'_> {
|
||||
pub fn list_files(&self) -> Result<Vec<FileInfo>> {
|
||||
let spiffs = Path::new(BASE_PATH);
|
||||
let list = fs::read_dir(spiffs).unwrap().map(|dir| {
|
||||
let file = dir.unwrap();
|
||||
FileInfo{
|
||||
filename: file.file_name().into_string().unwrap(),
|
||||
size: file.metadata().unwrap().len() as usize
|
||||
pub fn list_files(&self, filename:&str) -> FileList {
|
||||
let storage = CString::new(SPIFFS_PARTITION_NAME).unwrap();
|
||||
let error = unsafe {
|
||||
esp!{
|
||||
esp_spiffs_check(storage.as_ptr())
|
||||
}
|
||||
});
|
||||
return Ok(list.collect());
|
||||
};
|
||||
|
||||
let mut file_system_corrupt = match error {
|
||||
OkStd(_) => {
|
||||
None
|
||||
},
|
||||
Err(err) => {
|
||||
println!("Corrupt spiffs {err:?}");
|
||||
Some(format!("{err:?}"))
|
||||
},
|
||||
};
|
||||
|
||||
let mut iter_error = None;
|
||||
let mut result = Vec::new();
|
||||
|
||||
println!("Filename {filename}");
|
||||
let filepath = Path::new(BASE_PATH);
|
||||
let read_dir = fs::read_dir(filepath);
|
||||
match read_dir {
|
||||
OkStd(read_dir) => {
|
||||
for item in read_dir {
|
||||
println!("start loop");
|
||||
match item {
|
||||
OkStd(file) => {
|
||||
let f = FileInfo{
|
||||
filename: file.file_name().into_string().unwrap(),
|
||||
size: file.metadata().and_then(|it| core::result::Result::Ok(it.len())).unwrap_or_default() as usize
|
||||
};
|
||||
println!("fileinfo {f:?}");
|
||||
result.push(f);
|
||||
},
|
||||
Err(err) => {
|
||||
iter_error = Some (format!("{err:?}"));
|
||||
break;
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
file_system_corrupt = Some(format!("{err:?}"));
|
||||
},
|
||||
}
|
||||
|
||||
return FileList{
|
||||
file_system_corrupt,
|
||||
files: result,
|
||||
iter_error
|
||||
};
|
||||
}
|
||||
|
||||
pub fn get_file_handle(&self, filename:String, write:bool) -> Result<File> {
|
||||
let filepath = Path::new(BASE_PATH).join(Path::new(&filename));
|
||||
pub fn delete_file(&self, filename:&str) -> Result<()>{
|
||||
let filepath = Path::new(BASE_PATH).join(Path::new(filename));
|
||||
match (fs::remove_file(filepath)){
|
||||
OkStd(_) => Ok(()),
|
||||
Err(err) => {
|
||||
bail!(format!("{err:?}"))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_file_handle(&self, filename:&str, write:bool) -> Result<File> {
|
||||
let filepath = Path::new(BASE_PATH).join(Path::new(filename));
|
||||
return Ok(if write {
|
||||
File::create(filepath)?
|
||||
} else {
|
||||
@@ -417,7 +480,7 @@ impl PlantCtrlBoard<'_> {
|
||||
.unwrap();
|
||||
|
||||
let delay = Delay::new_default();
|
||||
let measurement = 5000;
|
||||
let measurement = 100;
|
||||
let factor = 1000 as f32 / measurement as f32;
|
||||
|
||||
//give some time to stabilize
|
||||
@@ -532,9 +595,11 @@ impl PlantCtrlBoard<'_> {
|
||||
let conf = esp_idf_sys::esp_vfs_spiffs_conf_t {
|
||||
base_path: base_path.as_ptr(),
|
||||
partition_label: storage.as_ptr(),
|
||||
max_files: 2,
|
||||
max_files: 5,
|
||||
format_if_mount_failed: true,
|
||||
};
|
||||
|
||||
//TODO check fielsystem esp_spiffs_check
|
||||
|
||||
unsafe {
|
||||
esp_idf_sys::esp!(esp_idf_sys::esp_vfs_spiffs_register(&conf))?;
|
||||
|
||||
Reference in New Issue
Block a user