fix ota abort/invalid switching
This commit is contained in:
@@ -17,6 +17,7 @@ use crate::config::{NetworkConfig, PlantConfig};
|
||||
use crate::fat_error::FatResult;
|
||||
use crate::hal::esp::MQTT_STAY_ALIVE;
|
||||
use crate::hal::{esp_time, TIME_ACCESS};
|
||||
use crate::hal::PROGRESS_ACTIVE;
|
||||
use crate::log::{log, LOG_ACCESS};
|
||||
use crate::tank::{determine_tank_state, TankError, TankState, WATER_FROZEN_THRESH};
|
||||
use crate::webserver::http_server;
|
||||
@@ -822,18 +823,9 @@ async fn publish_firmware_info(
|
||||
let esp = board.board_hal.get_esp();
|
||||
let _ = esp.mqtt_publish("/firmware/address", ip_address).await;
|
||||
let _ = esp
|
||||
.mqtt_publish("/firmware/githash", &version.git_hash)
|
||||
.await;
|
||||
let _ = esp
|
||||
.mqtt_publish("/firmware/buildtime", &version.build_time)
|
||||
.mqtt_publish("/firmware/state", format!("{:?}", &version).as_str())
|
||||
.await;
|
||||
let _ = esp.mqtt_publish("/firmware/last_online", timezone_time);
|
||||
let state = esp.get_ota_state();
|
||||
let _ = esp.mqtt_publish("/firmware/ota_state", &state).await;
|
||||
let slot = esp.get_current_ota_slot();
|
||||
let _ = esp
|
||||
.mqtt_publish("/firmware/ota_slot", &format!("slot{slot}"))
|
||||
.await;
|
||||
let _ = esp.mqtt_publish("/state", "online").await;
|
||||
}
|
||||
macro_rules! mk_static {
|
||||
@@ -995,41 +987,48 @@ async fn wait_infinity(
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
update_charge_indicator(&mut board).await;
|
||||
|
||||
match wait_type {
|
||||
WaitType::MissingConfig => {
|
||||
// Keep existing behavior: circular filling pattern
|
||||
led_count %= 8;
|
||||
led_count += 1;
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, i < led_count).await;
|
||||
}
|
||||
}
|
||||
WaitType::ConfigButton => {
|
||||
// Alternating pattern: 1010 1010 -> 0101 0101
|
||||
pattern_step = (pattern_step + 1) % 2;
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, (i + pattern_step) % 2 == 0).await;
|
||||
}
|
||||
}
|
||||
WaitType::MqttConfig => {
|
||||
// Moving dot pattern
|
||||
pattern_step = (pattern_step + 1) % 8;
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, i == pattern_step).await;
|
||||
// Skip default blink code when a progress display is active
|
||||
if !PROGRESS_ACTIVE.load(Ordering::Relaxed) {
|
||||
match wait_type {
|
||||
WaitType::MissingConfig => {
|
||||
// Keep existing behavior: circular filling pattern
|
||||
led_count %= 8;
|
||||
led_count += 1;
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, i < led_count).await;
|
||||
}
|
||||
}
|
||||
WaitType::ConfigButton => {
|
||||
// Alternating pattern: 1010 1010 -> 0101 0101
|
||||
pattern_step = (pattern_step + 1) % 2;
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, (i + pattern_step) % 2 == 0).await;
|
||||
}
|
||||
}
|
||||
WaitType::MqttConfig => {
|
||||
// Moving dot pattern
|
||||
pattern_step = (pattern_step + 1) % 8;
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, i == pattern_step).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
board.board_hal.general_fault(true).await;
|
||||
}
|
||||
board.board_hal.general_fault(true).await;
|
||||
}
|
||||
|
||||
Timer::after_millis(delay).await;
|
||||
{
|
||||
let mut board = BOARD_ACCESS.get().await.lock().await;
|
||||
board.board_hal.general_fault(false).await;
|
||||
|
||||
// Clear all LEDs
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, false).await;
|
||||
// Skip clearing LEDs when progress is active to avoid interrupting the progress display
|
||||
if !PROGRESS_ACTIVE.load(Ordering::Relaxed) {
|
||||
board.board_hal.general_fault(false).await;
|
||||
|
||||
// Clear all LEDs
|
||||
for i in 0..8 {
|
||||
let _ = board.board_hal.fault(i, false).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1096,14 +1095,12 @@ async fn get_version(
|
||||
let hash = &env!("VERGEN_GIT_SHA")[0..8];
|
||||
|
||||
let board = board.board_hal.get_esp();
|
||||
|
||||
let ota_slot = board.get_current_ota_slot();
|
||||
let ota_state = board.get_ota_state();
|
||||
VersionInfo {
|
||||
git_hash: branch + "@" + hash,
|
||||
build_time: env!("VERGEN_BUILD_TIMESTAMP").to_owned(),
|
||||
partition: ota_slot,
|
||||
ota_state,
|
||||
current: format!("{:?}", board.current),
|
||||
slot0_state: format!("{:?}", board.slot0_state),
|
||||
slot1_state: format!("{:?}", board.slot1_state),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1111,6 +1108,7 @@ async fn get_version(
|
||||
struct VersionInfo {
|
||||
git_hash: String,
|
||||
build_time: String,
|
||||
partition: String,
|
||||
ota_state: String,
|
||||
current: String,
|
||||
slot0_state: String,
|
||||
slot1_state: String,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user