firmware streaming
This commit is contained in:
@@ -191,7 +191,7 @@ pub trait PlantCtrlBoardInteraction {
|
||||
fn mqtt_publish(&mut self, config: &Config, subtopic: &str, message: &[u8]) -> Result<()>;
|
||||
|
||||
fn sensor_multiplexer(&mut self, n: u8) -> Result<()>;
|
||||
fn flash_bq34_z100(&mut self, line: &str, dryrun:bool) -> Result<()>;
|
||||
fn flash_bq34_z100(&mut self, line: &str, dryrun: bool) -> Result<()>;
|
||||
}
|
||||
|
||||
pub trait CreatePlantHal<'a> {
|
||||
@@ -206,7 +206,8 @@ pub struct PlantCtrlBoard<'a> {
|
||||
PinDriver<'a, esp_idf_hal::gpio::AnyIOPin, InputOutput>,
|
||||
PinDriver<'a, esp_idf_hal::gpio::AnyIOPin, InputOutput>,
|
||||
>,
|
||||
shift_register_enable_invert: PinDriver<'a, esp_idf_hal::gpio::AnyIOPin, esp_idf_hal::gpio::Output>,
|
||||
shift_register_enable_invert:
|
||||
PinDriver<'a, esp_idf_hal::gpio::AnyIOPin, esp_idf_hal::gpio::Output>,
|
||||
tank_channel: AdcChannelDriver<'a, Gpio5, AdcDriver<'a, esp_idf_hal::adc::ADC1>>,
|
||||
solar_is_day: PinDriver<'a, esp_idf_hal::gpio::AnyIOPin, esp_idf_hal::gpio::Input>,
|
||||
boot_button: PinDriver<'a, esp_idf_hal::gpio::AnyIOPin, esp_idf_hal::gpio::Input>,
|
||||
@@ -359,7 +360,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
||||
5 => FAULT_6,
|
||||
6 => FAULT_7,
|
||||
7 => FAULT_8,
|
||||
_ => panic!("Invalid plant id {}", plant)
|
||||
_ => panic!("Invalid plant id {}", plant),
|
||||
};
|
||||
self.shift_register.decompose()[index]
|
||||
.set_state(enable.into())
|
||||
@@ -413,7 +414,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
||||
5 => SENSOR_A_6,
|
||||
6 => SENSOR_A_7,
|
||||
7 => SENSOR_A_8,
|
||||
_ => bail!("Invalid plant id {}", plant)
|
||||
_ => bail!("Invalid plant id {}", plant),
|
||||
},
|
||||
Sensor::B => match plant {
|
||||
0 => SENSOR_B_1,
|
||||
@@ -424,52 +425,45 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
||||
5 => SENSOR_B_6,
|
||||
6 => SENSOR_B_7,
|
||||
7 => SENSOR_B_8,
|
||||
_ => bail!("Invalid plant id {}", plant)
|
||||
_ => bail!("Invalid plant id {}", plant),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
let mut results = [0;REPEAT_MOIST_MEASURE];
|
||||
let mut results = [0; REPEAT_MOIST_MEASURE];
|
||||
for repeat in 0..REPEAT_MOIST_MEASURE {
|
||||
self.signal_counter.counter_pause()?;
|
||||
self.signal_counter.counter_clear()?;
|
||||
//Disable all
|
||||
self.shift_register.decompose()[MS_4]
|
||||
self.shift_register.decompose()[MS_4].set_high().unwrap();
|
||||
|
||||
self.sensor_multiplexer(sensor_channel)?;
|
||||
|
||||
self.shift_register.decompose()[MS_4].set_low().unwrap();
|
||||
self.shift_register.decompose()[SENSOR_ON]
|
||||
.set_high()
|
||||
.unwrap();
|
||||
|
||||
self.sensor_multiplexer(sensor_channel)?;
|
||||
|
||||
self.shift_register.decompose()[MS_4]
|
||||
.set_low()
|
||||
.unwrap();
|
||||
self.shift_register.decompose()[SENSOR_ON]
|
||||
.set_high()
|
||||
.unwrap();
|
||||
|
||||
|
||||
let delay = Delay::new_default();
|
||||
let measurement = 10;
|
||||
let factor = 1000 as f32 / measurement as f32;
|
||||
|
||||
|
||||
//give some time to stabilize
|
||||
delay.delay_ms(10);
|
||||
self.signal_counter.counter_resume()?;
|
||||
delay.delay_ms(measurement);
|
||||
self.signal_counter.counter_pause()?;
|
||||
self.shift_register.decompose()[MS_4]
|
||||
.set_high()
|
||||
.unwrap();
|
||||
self.shift_register.decompose()[MS_4].set_high().unwrap();
|
||||
self.shift_register.decompose()[SENSOR_ON]
|
||||
.set_low()
|
||||
.unwrap();
|
||||
delay.delay_ms(10);
|
||||
.set_low()
|
||||
.unwrap();
|
||||
delay.delay_ms(10);
|
||||
let unscaled = self.signal_counter.get_counter_value()? as i32;
|
||||
let hz = (unscaled as f32 * factor) as i32;
|
||||
results[repeat] = hz;
|
||||
//println!("Measuring {:?} @ {} with {}", sensor, plant, hz);
|
||||
}
|
||||
results.sort();
|
||||
|
||||
|
||||
let mid = results.len() / 2;
|
||||
|
||||
Ok(results[mid])
|
||||
@@ -693,7 +687,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
||||
for plant in 0..PLANT_COUNT {
|
||||
let a = self.measure_moisture_hz(plant, plant_hal::Sensor::A);
|
||||
let b = self.measure_moisture_hz(plant, plant_hal::Sensor::B);
|
||||
print!("P:{} a:{:?} b:{:?}", plant, a ,b)
|
||||
print!("P:{} a:{:?} b:{:?}", plant, a, b)
|
||||
}
|
||||
println!();
|
||||
Delay::new_default().delay_ms(10);
|
||||
@@ -1006,7 +1000,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
fn flash_bq34_z100(&mut self, line: &str, dryrun: bool) -> Result<()> {
|
||||
match &mut self.battery_driver {
|
||||
Some(driver) => match driver.write_flash_stream_i2c(line, dryrun) {
|
||||
@@ -1127,10 +1121,10 @@ impl CreatePlantHal<'_> for PlantHal {
|
||||
ms2.set_low()?;
|
||||
let ms3 = &mut shift_register.decompose()[MS_3];
|
||||
ms3.set_low()?;
|
||||
|
||||
|
||||
let ms4 = &mut shift_register.decompose()[MS_4];
|
||||
ms4.set_high()?;
|
||||
|
||||
|
||||
//init,reset rtc memory depending on cause
|
||||
let reasons = ResetReason::get();
|
||||
let reset_store = match reasons {
|
||||
@@ -1255,7 +1249,6 @@ impl CreatePlantHal<'_> for PlantHal {
|
||||
println!("Managed to comunnicate with battery");
|
||||
}
|
||||
|
||||
|
||||
let shift_register_enable_invert = PinDriver::output(peripherals.pins.gpio21.downgrade())?;
|
||||
|
||||
let rv = Mutex::new(PlantCtrlBoard {
|
||||
@@ -1276,14 +1269,13 @@ impl CreatePlantHal<'_> for PlantHal {
|
||||
battery_driver: Some(battery_driver),
|
||||
});
|
||||
|
||||
let _ = rv.lock().is_ok_and(|mut board|{
|
||||
unsafe { gpio_hold_dis(board.shift_register_enable_invert.pin())};
|
||||
board.shift_register_enable_invert.set_low().unwrap();
|
||||
unsafe { gpio_hold_en(board.shift_register_enable_invert.pin())};
|
||||
let _ = rv.lock().is_ok_and(|mut board| {
|
||||
unsafe { gpio_hold_dis(board.shift_register_enable_invert.pin()) };
|
||||
board.shift_register_enable_invert.set_low().unwrap();
|
||||
unsafe { gpio_hold_en(board.shift_register_enable_invert.pin()) };
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
|
||||
Ok(rv)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user