mirror of
				https://github.com/Djeeberjr/fw-anwesenheit.git
				synced 2025-11-03 23:24:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			131 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			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);
 | 
						|
    }
 | 
						|
}
 |