more async migration
This commit is contained in:
@@ -4,9 +4,10 @@ mod initial_hal;
|
||||
mod rtc;
|
||||
mod v3_hal;
|
||||
mod v4_hal;
|
||||
mod water;
|
||||
mod v4_sensor;
|
||||
mod water;
|
||||
|
||||
use crate::alloc::string::ToString;
|
||||
use crate::hal::rtc::{DS3231Module, RTCModuleInteraction};
|
||||
use crate::hal::water::TankSensor;
|
||||
use crate::{
|
||||
@@ -19,11 +20,16 @@ use crate::{
|
||||
};
|
||||
use alloc::boxed::Box;
|
||||
use anyhow::{Ok, Result};
|
||||
use async_trait::async_trait;
|
||||
use battery::BQ34Z100G1;
|
||||
use bq34z100::Bq34z100g1Driver;
|
||||
use ds323x::{DateTimeAccess, Ds323x};
|
||||
use eeprom24x::{Eeprom24x, SlaveAddr, Storage};
|
||||
use embassy_sync::blocking_mutex::raw::{CriticalSectionRawMutex, NoopRawMutex};
|
||||
use embassy_sync::mutex::Mutex;
|
||||
use embassy_sync::{LazyLock, Mutex};
|
||||
use embedded_hal_bus::i2c::MutexDevice;
|
||||
use esp_idf_hal::can::CAN;
|
||||
use esp_idf_hal::pcnt::PCNT1;
|
||||
use esp_idf_hal::{
|
||||
adc::ADC1,
|
||||
@@ -46,9 +52,6 @@ use esp_idf_sys::{
|
||||
};
|
||||
use esp_ota::mark_app_valid;
|
||||
use measurements::{Current, Voltage};
|
||||
use embassy_sync::{Mutex, LazyLock};
|
||||
use esp_idf_hal::can::CAN;
|
||||
use crate::alloc::string::ToString;
|
||||
|
||||
//Only support for 8 right now!
|
||||
pub const PLANT_COUNT: usize = 8;
|
||||
@@ -87,8 +90,9 @@ pub struct HAL<'a> {
|
||||
pub board_hal: Box<dyn BoardInteraction<'a> + Send>,
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
pub trait BoardInteraction<'a> {
|
||||
fn get_tank_sensor(&mut self) -> Option<&mut TankSensor<'a>>;
|
||||
fn get_tank_sensor(&mut self) -> Option<&mut TankSensor>;
|
||||
fn get_esp(&mut self) -> &mut Esp<'a>;
|
||||
fn get_config(&mut self) -> &PlantControllerConfig;
|
||||
fn get_battery_monitor(&mut self) -> &mut Box<dyn BatteryInteraction + Send>;
|
||||
@@ -99,20 +103,20 @@ pub trait BoardInteraction<'a> {
|
||||
fn is_day(&self) -> bool;
|
||||
//should be multsampled
|
||||
fn light(&mut self, enable: bool) -> Result<()>;
|
||||
fn pump(&mut self, plant: usize, enable: bool) -> Result<()>;
|
||||
fn pump_current(&mut self, plant: usize) -> Result<Current>;
|
||||
fn fault(&mut self, plant: usize, enable: bool) -> Result<()>;
|
||||
fn measure_moisture_hz(&mut self, plant: usize, sensor: Sensor) -> Result<f32>;
|
||||
fn general_fault(&mut self, enable: bool);
|
||||
fn test(&mut self) -> Result<()>;
|
||||
fn set_config(&mut self, config: PlantControllerConfig) -> Result<()>;
|
||||
fn get_mptt_voltage(&mut self) -> anyhow::Result<Voltage>;
|
||||
fn get_mptt_current(&mut self) -> anyhow::Result<Current>;
|
||||
async fn pump(&mut self, plant: usize, enable: bool) -> Result<()>;
|
||||
async fn pump_current(&mut self, plant: usize) -> Result<Current>;
|
||||
async fn fault(&mut self, plant: usize, enable: bool) -> Result<()>;
|
||||
async fn measure_moisture_hz(&mut self, plant: usize, sensor: Sensor) -> Result<f32>;
|
||||
async fn general_fault(&mut self, enable: bool);
|
||||
async fn test(&mut self) -> Result<()>;
|
||||
async fn set_config(&mut self, config: PlantControllerConfig) -> Result<()>;
|
||||
async fn get_mptt_voltage(&mut self) -> anyhow::Result<Voltage>;
|
||||
async fn get_mptt_current(&mut self) -> anyhow::Result<Current>;
|
||||
}
|
||||
|
||||
impl dyn BoardInteraction<'_> {
|
||||
//the counter is just some arbitrary number that increases whenever some progress was made, try to keep the updates < 10 per second for ux reasons
|
||||
fn _progress(&mut self, counter: u32) {
|
||||
async fn _progress(&mut self, counter: u32) {
|
||||
let even = counter % 2 == 0;
|
||||
let current = counter / (PLANT_COUNT as u32);
|
||||
for led in 0..PLANT_COUNT {
|
||||
@@ -177,7 +181,7 @@ impl PlantHal {
|
||||
Mutex::new(I2cDriver::new(i2c, sda, scl, &config).unwrap())
|
||||
}
|
||||
|
||||
pub fn create() -> Result<Mutex<HAL<'static>>> {
|
||||
pub fn create() -> Result<Mutex<CriticalSectionRawMutex, HAL<'static>>> {
|
||||
let peripherals = Peripherals::take()?;
|
||||
let sys_loop = EspSystemEventLoop::take()?;
|
||||
let nvs = EspDefaultNvsPartition::take()?;
|
||||
|
Reference in New Issue
Block a user