cheapsdo2.0/firmware/src/config.rs

39 lines
944 B
Rust

use postcard::{from_bytes_cobs, to_slice_cobs};
use serde::{Deserialize, Serialize};
use stm32f1xx_hal::flash::FlashWriter;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct Config {
pub pwm: u16,
}
impl Default for Config {
fn default() -> Self {
Self { pwm: 1500u16 }
}
}
const PAGE_SIZE: usize = 1024;
const CONFIG_OFFSET: u32 = 63 * PAGE_SIZE as u32;
pub fn load(flash: &mut FlashWriter) -> Config {
let tmp = flash.read(CONFIG_OFFSET, PAGE_SIZE).unwrap();
let mut config_page = [0u8; PAGE_SIZE];
config_page.copy_from_slice(tmp);
match from_bytes_cobs::<Config>(&mut config_page) {
Ok(config) => config,
Err(_) => Config::default(),
}
}
impl Config {
pub fn save(&self, flash: &mut FlashWriter) {
let mut page = [0u8; PAGE_SIZE];
let used = to_slice_cobs(self, &mut page).unwrap();
flash.write(CONFIG_OFFSET, &used).unwrap();
}
}