Skip to content

Commit

Permalink
Using postcard
Browse files Browse the repository at this point in the history
  • Loading branch information
ryan-summers committed Nov 13, 2023
1 parent 5e59ea6 commit 2a30ade
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 22 deletions.
18 changes: 18 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ usbd-serial = "0.1.1"
miniconf = "0.9.0"
smoltcp-nal = { version = "0.4.1", features = ["shared-stack"]}
bbqueue = "0.5"
postcard = "1"

[dependencies.stm32h7xx-hal]
version = "0.15.0"
Expand Down
38 changes: 16 additions & 22 deletions src/hardware/flash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,17 @@ impl FlashSettings {
mac: smoltcp_nal::smoltcp::wire::EthernetAddress,
) -> Self {
let mut settings = Settings::new(mac);
let mut buffer = [0u8; 256];
let mut offset: usize = 0;
let mut buffer = [0u8; 512];
flash.read(0, &mut buffer[..]).unwrap();

let mut data = &buffer[..];

// We iteratively read the settings from flash to allow for easy expansion of the settings
// without losing data in the future when new fields are added.
flash.read(offset as u32, &mut buffer[..]).unwrap();
let len =
buffer.iter().skip(1).position(|x| x == &b'"').unwrap_or(0) + 2;
settings.broker = {
match serde_json_core::from_slice(&buffer[..len]) {
Ok((item, size)) => {
offset += size;
match postcard::take_from_bytes(data) {
Ok((item, remainder)) => {
data = remainder;
item
}
Err(e) => {
Expand All @@ -52,14 +51,9 @@ impl FlashSettings {
}
};

flash.read(offset as u32, &mut buffer[..]).unwrap();
let len =
buffer.iter().skip(1).position(|x| x == &b'"').unwrap_or(0) + 2;
settings.id = {
match serde_json_core::from_slice(&buffer[..len]) {
Ok((item, size)) => {
item
}
match postcard::from_bytes(data) {
Ok(item) => item,
Err(e) => {
log::warn!("Failed to MQTT ID from flash settings memory - using default: {e:?}");
settings.id
Expand All @@ -72,16 +66,16 @@ impl FlashSettings {

pub fn save(&mut self) {
let mut bank = self.flash.unlocked();

let mut data = [0; 512];
let mut offset: usize = 0;
offset += serde_json_core::to_slice(
&self.settings.broker,
&mut data[offset..],
)
.unwrap();
offset +=
serde_json_core::to_slice(&self.settings.id, &mut data[offset..])
.unwrap();
postcard::to_slice(&self.settings.broker, &mut data[offset..])
.unwrap()
.len();
offset += postcard::to_slice(&self.settings.id, &mut data[offset..])
.unwrap()
.len();

bank.erase(0, UnlockedFlashBank::ERASE_SIZE as u32).unwrap();
bank.write(0, &data[..offset]).unwrap();
Expand Down

0 comments on commit 2a30ade

Please sign in to comment.