fw-anwesenheit/src/feedback.rs

131 lines
4.5 KiB
Rust

use embassy_time::{Duration, Timer};
use esp_hal::peripherals;
use esp_hal_smartled::SmartLedsAdapterAsync;
use log::debug;
use smart_leds::SmartLedsWriteAsync;
use smart_leds::colors::{BLACK, GREEN, RED, YELLOW};
use smart_leds::{brightness, colors::BLUE};
use crate::{FEEDBACK_STATE, init};
#[derive(Copy, Clone, Debug)]
pub enum FeedbackState {
Ack,
Nack,
Error,
Startup,
WIFI,
Idle,
}
const LED_LEVEL: u8 = 255;
//TODO ERROR STATE: 1 Blink = unknows error, 3 Blink = no sd card
#[embassy_executor::task]
pub async fn feedback_task(
// mut led: SmartLedsAdapterAsync<
// ConstChannelAccess<esp_hal::rmt::Tx, 0>,
// { init::hardware::LED_BUFFER_SIZE },
// >,
buzzer: peripherals::GPIO21<'static>,
) {
debug!("Starting feedback task");
let mut buzzer = init::hardware::setup_buzzer(buzzer);
loop {
let feedback_state = FEEDBACK_STATE.wait().await;
// match feedback_state {
// FeedbackState::Ack => {
// led.write(brightness(
// [GREEN; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low();
// Timer::after(Duration::from_millis(50)).await;
// }
// FeedbackState::Nack => {
// led.write(brightness(
// [YELLOW; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low();
// Timer::after(Duration::from_millis(100)).await;
// buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low();
// led.write(brightness(
// [BLACK; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// }
// FeedbackState::Error => {
// led.write(brightness(
// [RED; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// buzzer.set_high();
// Timer::after(Duration::from_millis(500)).await;
// buzzer.set_low();
// Timer::after(Duration::from_millis(500)).await;
// buzzer.set_high();
// Timer::after(Duration::from_millis(500)).await;
// buzzer.set_low();
// }
// FeedbackState::Startup => {
// led.write(brightness(
// [GREEN; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// buzzer.set_high();
// Timer::after(Duration::from_millis(10)).await;
// buzzer.set_low();
// Timer::after(Duration::from_millis(10)).await;
// buzzer.set_high();
// Timer::after(Duration::from_millis(10)).await;
// buzzer.set_low();
// Timer::after(Duration::from_millis(50)).await;
// buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low();
// led.write(brightness(
// [BLACK; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// }
// FeedbackState::WIFI => {
// led.write(brightness(
// [BLUE; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// }
// FeedbackState::Idle => {
// led.write(brightness(
// [GREEN; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL,
// ))
// .await
// .unwrap();
// }
// };
debug!("Feedback state: {:?}", feedback_state);
}
}