From d96b3ed11a5ad1f774bad9a09fe35cfd48549aab Mon Sep 17 00:00:00 2001 From: Philipp_EndevourOS Date: Mon, 8 Sep 2025 19:26:56 +0200 Subject: [PATCH] implemented save function for SD Card --- src/init/hardware.rs | 14 ++++++++------ src/init/sd_card.rs | 14 +++++++++++--- src/main.rs | 4 ++-- src/store/id_store.rs | 5 +++-- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/init/hardware.rs b/src/init/hardware.rs index 652e9cd..31957e0 100644 --- a/src/init/hardware.rs +++ b/src/init/hardware.rs @@ -1,3 +1,4 @@ +use bleps::att::Att; use embassy_executor::Spawner; use embassy_net::Stack; @@ -8,9 +9,7 @@ use esp_hal::peripherals::{ UART1, }; use esp_hal::rmt::{ConstChannelAccess, Rmt}; -use esp_hal::spi::{ - master::{Config as Spi_config, Spi}, -}; +use esp_hal::spi::master::{Config as Spi_config, Spi}; use esp_hal::Blocking; use esp_hal::time::Rate; @@ -24,12 +23,15 @@ use esp_hal::{ uart::Uart, }; use esp_hal_smartled::{SmartLedsAdapterAsync, buffer_size_async}; +use esp_println::dbg; use esp_println::logger::init_logger; -use log::{debug, error}; +use log::{debug, error, info}; use crate::init::network; use crate::init::sd_card::setup_sdcard; use crate::init::wifi; +use crate::store::AttendanceDay; +use crate::store::persistence::Persistence; /************************************************* * GPIO Pinout Xiao Esp32c6 @@ -44,7 +46,7 @@ use crate::init::wifi; * D7 -> GPIO17 -> UART/RX -> Level Shifter A1 -> NFC Reader * D8 -> GPIO19 -> SPI/SCLK * D9 -> GPIO20 -> SPI/MISO - * D10 -> GPIO10 -> SPI/MOSI + * D10 -> GPIO18 -> SPI/MOSI * *************************************************/ @@ -107,7 +109,7 @@ pub async fn hardware_init( OutputConfig::default(), ); - let vol_mgr = setup_sdcard(spi_bus, sd_cs_pin); + let mut vol_mgr = setup_sdcard(spi_bus, sd_cs_pin); let buzzer_gpio = peripherals.GPIO21; diff --git a/src/init/sd_card.rs b/src/init/sd_card.rs index 4970412..d90ce17 100644 --- a/src/init/sd_card.rs +++ b/src/init/sd_card.rs @@ -43,20 +43,28 @@ impl Persistence for SDCardPersistence { let mut vol_0 = self.vol_mgr.open_volume(VolumeIdx(0)).unwrap(); let mut root_dir = vol_0.open_root_dir().unwrap(); let mut file = root_dir - .open_file_in_dir("days/TODO", embedded_sdmmc::Mode::ReadOnly) + .open_file_in_dir("day.jsn", embedded_sdmmc::Mode::ReadOnly) .unwrap(); let mut read_buffer: [u8; 1024] = [0; 1024]; let read = file.read(&mut read_buffer).unwrap(); file.close().unwrap(); - let day: AttendanceDay = serde_json::from_slice(&read_buffer).unwrap(); + let day: AttendanceDay = serde_json::from_slice(&read_buffer[..read]).unwrap(); Some(day) } async fn save_day(&mut self, day: Date, data: &AttendanceDay) { - todo!() + let mut vol_0 = self.vol_mgr.open_volume(VolumeIdx(0)).unwrap(); + let mut root_dir = vol_0.open_root_dir().unwrap(); + + let mut file = root_dir + .open_file_in_dir("day.jsn", embedded_sdmmc::Mode::ReadWriteCreateOrTruncate) + .unwrap(); + file.write(&serde_json::to_vec(data).unwrap()).unwrap(); + file.flush(); + file.close(); } async fn load_mapping(&mut self) -> Option { diff --git a/src/main.rs b/src/main.rs index ce84e7a..dca0898 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,7 +15,7 @@ use embassy_time::{Duration, Timer}; use log::{debug, info}; use static_cell::make_static; -use crate::{store::TallyID, webserver::start_webserver}; +use crate::{store::TallyID}; extern crate alloc; @@ -23,7 +23,7 @@ mod drivers; mod feedback; mod init; mod store; -mod webserver; +//mod webserver; static FEEDBACK_STATE: Signal = Signal::new(); diff --git a/src/store/id_store.rs b/src/store/id_store.rs index 9f41e0e..979a576 100644 --- a/src/store/id_store.rs +++ b/src/store/id_store.rs @@ -5,15 +5,16 @@ use super::IDMapping; use super::TallyID; use alloc::vec::Vec; use serde::Deserialize; +use serde::Serialize; -#[derive(Clone, Deserialize)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct AttendanceDay { date: Date, ids: Vec, } impl AttendanceDay { - fn new(date: Date) -> Self { + pub fn new(date: Date) -> Self { Self { date, ids: Vec::new(),