Improve error handling, ensure robust defaults, and eliminate unsafe unwraps/expectations across modules.
This commit is contained in:
@@ -31,6 +31,7 @@ use ina219::SyncIna219;
|
||||
use log::{error, info, warn};
|
||||
use measurements::Resistance;
|
||||
use measurements::{Current, Voltage};
|
||||
// use no_panic::no_panic;
|
||||
use pca9535::{GPIOBank, Pca9535Immediate, StandardExpanderInterface};
|
||||
|
||||
pub const BACKUP_HEADER_MAX_SIZE: usize = 64;
|
||||
@@ -368,7 +369,7 @@ impl<'a> BoardInteraction<'a> for V4<'a> {
|
||||
async fn measure_moisture_hz(&mut self) -> FatResult<Moistures> {
|
||||
self.can_power.set_high();
|
||||
Timer::after_millis(500).await;
|
||||
let config = self.twai_config.take().expect("twai config not set");
|
||||
let config = self.twai_config.take().context("twai config not set")?;
|
||||
let mut twai = config.into_async().start();
|
||||
|
||||
if twai.is_bus_off() {
|
||||
@@ -398,7 +399,7 @@ impl<'a> BoardInteraction<'a> for V4<'a> {
|
||||
async fn detect_sensors(&mut self, request: Detection) -> FatResult<Detection> {
|
||||
self.can_power.set_high();
|
||||
Timer::after_millis(500).await;
|
||||
let config = self.twai_config.take().expect("twai config not set");
|
||||
let config = self.twai_config.take().context("twai config not set")?;
|
||||
let mut twai = config.into_async().start();
|
||||
|
||||
if twai.is_bus_off() {
|
||||
@@ -542,8 +543,8 @@ impl<'a> BoardInteraction<'a> for V4<'a> {
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
async fn backup_config(&mut self, controller_config: &PlantControllerConfig) -> FatResult<()>{
|
||||
let mut buffer: [u8; 4096-BACKUP_HEADER_MAX_SIZE] = [0; 4096-BACKUP_HEADER_MAX_SIZE];
|
||||
async fn backup_config(&mut self, controller_config: &PlantControllerConfig) -> FatResult<()> {
|
||||
let mut buffer: [u8; 4096 - BACKUP_HEADER_MAX_SIZE] = [0; 4096 - BACKUP_HEADER_MAX_SIZE];
|
||||
let length = bincode::encode_into_slice(controller_config, &mut buffer, CONFIG)?;
|
||||
let mut checksum = X25.digest();
|
||||
checksum.update(&buffer[..length]);
|
||||
@@ -562,7 +563,7 @@ impl<'a> BoardInteraction<'a> for V4<'a> {
|
||||
|
||||
while to_write > 0 {
|
||||
self.progress(chunk as u32).await;
|
||||
let start = BACKUP_HEADER_MAX_SIZE + chunk* EEPROM_PAGE;
|
||||
let start = BACKUP_HEADER_MAX_SIZE + chunk * EEPROM_PAGE;
|
||||
let end = start + crate::hal::rtc::EEPROM_PAGE;
|
||||
let part = &buffer[start..end];
|
||||
to_write -= part.len();
|
||||
@@ -576,7 +577,8 @@ impl<'a> BoardInteraction<'a> for V4<'a> {
|
||||
async fn read_backup(&mut self) -> FatResult<PlantControllerConfig> {
|
||||
let info = self.backup_info().await?;
|
||||
let mut store = alloc::vec![0_u8; info.size as usize];
|
||||
self.rtc_module.read(BACKUP_HEADER_MAX_SIZE as u32, store.as_mut_slice())?;
|
||||
self.rtc_module
|
||||
.read(BACKUP_HEADER_MAX_SIZE as u32, store.as_mut_slice())?;
|
||||
let mut checksum = X25.digest();
|
||||
checksum.update(&store[..]);
|
||||
let crc = checksum.finalize();
|
||||
@@ -593,7 +595,10 @@ impl<'a> BoardInteraction<'a> for V4<'a> {
|
||||
|
||||
let info: Result<(BackupHeader, usize), bincode::error::DecodeError> =
|
||||
bincode::decode_from_slice(&header_page_buffer[..], CONFIG);
|
||||
info.map(|(header, _)| header).map_err(|e| FatError::String {error:"Could not read backup header: ".to_string() + &e.to_string()})
|
||||
info.map(|(header, _)| header)
|
||||
.map_err(|e| FatError::String {
|
||||
error: "Could not read backup header: ".to_string() + &e.to_string(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -654,8 +659,6 @@ async fn wait_for_can_measurements(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
impl From<Moistures> for Detection {
|
||||
|
||||
Reference in New Issue
Block a user