Skip to content

Commit

Permalink
Check return of init
Browse files Browse the repository at this point in the history
  • Loading branch information
emeric-martineau committed Dec 31, 2023
1 parent b97baf4 commit f97ddbe
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use core::fmt;
use esp_idf_hal::gpio::{AnyInputPin, AnyOutputPin, Input, Output, PinDriver};
use esp_idf_hal::task::block_on;
use esp_idf_svc::timer::{EspISRTimerService, EspTimer};
use esp_idf_sys::EspError;
use std::time::Duration;

use crate::error::*;
Expand Down Expand Up @@ -110,11 +111,17 @@ impl DevicesDimmerManager {
zero_crossing_pin: InputPin,
devices: Vec<DimmerDevice>,
frequency: Frequency,
) -> &'static mut Self {
) -> Result<&'static mut Self, RbdDimmerError> {
unsafe {
match DEVICES_DIMMER_MANAGER.as_mut() {
None => Self::initialize(zero_crossing_pin, devices, frequency),
Some(d) => d,
None => match Self::initialize(zero_crossing_pin, devices, frequency) {
Ok(d) => Ok(d),
Err(e) => Err(RbdDimmerError::new(
RbdDimmerErrorKind::Other,
format!("Fail to initialize timer. Error code: {}", e),
)),
},
Some(d) => Ok(d),
}
}
}
Expand Down Expand Up @@ -165,7 +172,7 @@ impl DevicesDimmerManager {
zero_crossing_pin: InputPin,
devices: Vec<DimmerDevice>,
frequency: Frequency,
) -> &'static mut Self {
) -> Result<&'static mut Self, EspError> {
unsafe {
// Copy all devices
for d in devices {
Expand Down Expand Up @@ -193,23 +200,23 @@ impl DevicesDimmerManager {
};

// Timer creator
let esp_timer_service = EspISRTimerService::new().unwrap(); //TODO check error
let esp_timer = esp_timer_service.timer(callback).unwrap(); //TODO check error
let esp_timer_service = EspISRTimerService::new()?; //TODO check error
let esp_timer = esp_timer_service.timer(callback)?; //TODO check error

let f = match frequency {
Frequency::F50HZ => HZ_50_DURATION,
_ => HZ_60_DURATION,
};

let _ = esp_timer.every(f); //TODO check error
esp_timer.every(f)?; //TODO check error

// Create New device manager
DEVICES_DIMMER_MANAGER = Some(Self {
zero_crossing_pin,
esp_timer,
});

DEVICES_DIMMER_MANAGER.as_mut().unwrap()
Ok(DEVICES_DIMMER_MANAGER.as_mut().unwrap())
}
}
}
Expand Down

0 comments on commit f97ddbe

Please sign in to comment.