mirror of
				https://github.com/Djeeberjr/fw-anwesenheit.git
				synced 2025-11-04 07:34:10 +00:00 
			
		
		
		
	refactored led & buzzer feedback in main
This commit is contained in:
		
							parent
							
								
									7225643296
								
							
						
					
					
						commit
						0617092f54
					
				
							
								
								
									
										75
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								src/main.rs
									
									
									
									
									
								
							@ -8,7 +8,7 @@ use simplelog::{ConfigBuilder, SimpleLogger};
 | 
			
		||||
use std::{env, error::Error, sync::Arc};
 | 
			
		||||
use tally_id::TallyID;
 | 
			
		||||
use tokio::{
 | 
			
		||||
    fs,
 | 
			
		||||
    fs, join,
 | 
			
		||||
    sync::{Mutex, mpsc},
 | 
			
		||||
};
 | 
			
		||||
use webserver::start_webserver;
 | 
			
		||||
@ -47,13 +47,45 @@ fn setup_logger() {
 | 
			
		||||
    let _ = SimpleLogger::init(log_level, config);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Signal the user success via buzzer and led
 | 
			
		||||
async fn feedback_success(gpio_buzzer: &Arc<Mutex<GPIOBuzzer>>, status_led: &Arc<Mutex<Led>>) {
 | 
			
		||||
    let mut buzzer_guard = gpio_buzzer.lock().await;
 | 
			
		||||
    let mut led_guard = status_led.lock().await;
 | 
			
		||||
 | 
			
		||||
    let (buzz, led) = join!(buzzer_guard.beep_ack(), led_guard.turn_green_on_1s());
 | 
			
		||||
 | 
			
		||||
    buzz.unwrap_or_else(|err| {
 | 
			
		||||
        error!("Failed to buzz: {err}");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    led.unwrap_or_else(|err| {
 | 
			
		||||
        error!("Failed to set LED: {err}");
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Signal the user failure via buzzer and led
 | 
			
		||||
async fn feedback_failure(gpio_buzzer: &Arc<Mutex<GPIOBuzzer>>, status_led: &Arc<Mutex<Led>>) {
 | 
			
		||||
    let mut buzzer_guard = gpio_buzzer.lock().await;
 | 
			
		||||
    let mut led_guard = status_led.lock().await;
 | 
			
		||||
 | 
			
		||||
    let (buzz, led) = join!(buzzer_guard.beep_nak(), led_guard.turn_red_on_1s());
 | 
			
		||||
 | 
			
		||||
    buzz.unwrap_or_else(|err| {
 | 
			
		||||
        error!("Failed to buzz: {err}");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    led.unwrap_or_else(|err| {
 | 
			
		||||
        error!("Failed to set LED: {err}");
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
async fn main() -> Result<(), Box<dyn Error>> {
 | 
			
		||||
    setup_logger();
 | 
			
		||||
 | 
			
		||||
    info!("Starting application");
 | 
			
		||||
 | 
			
		||||
    let (tx, mut rx) = mpsc::channel::<String>(1);
 | 
			
		||||
    let (tx, mut rx) = mpsc::channel::<String>(32);
 | 
			
		||||
 | 
			
		||||
    tokio::spawn(async move {
 | 
			
		||||
        match run_pm3(tx).await {
 | 
			
		||||
@ -61,7 +93,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
 | 
			
		||||
                warn!("PM3 exited with a zero exit code");
 | 
			
		||||
            }
 | 
			
		||||
            Err(e) => {
 | 
			
		||||
                error!("Failed to run PM3: {}", e);
 | 
			
		||||
                error!("Failed to run PM3: {e}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
@ -107,41 +139,12 @@ async fn main() -> Result<(), Box<dyn Error>> {
 | 
			
		||||
            if channel_store.lock().await.add_id(tally_id) {
 | 
			
		||||
                info!("Added new id to current day");
 | 
			
		||||
 | 
			
		||||
                gpio_buzzer
 | 
			
		||||
                    .lock()
 | 
			
		||||
                    .await
 | 
			
		||||
                    .beep_ack()
 | 
			
		||||
                    .await
 | 
			
		||||
                    .unwrap_or_else(|e| error!("Failed to beep Ack {}", e));
 | 
			
		||||
 | 
			
		||||
                status_led
 | 
			
		||||
                    .lock()
 | 
			
		||||
                    .await
 | 
			
		||||
                    .turn_green_on_1s()
 | 
			
		||||
                    .await
 | 
			
		||||
                    .unwrap_or_else(|e| {
 | 
			
		||||
                        error!("Failed to blink LED {}", e);
 | 
			
		||||
                    });
 | 
			
		||||
                feedback_success(&gpio_buzzer, &status_led).await;
 | 
			
		||||
 | 
			
		||||
                if let Err(e) = channel_store.lock().await.export_json(STORE_PATH).await {
 | 
			
		||||
                    error!("Failed to save id store to file: {}", e);
 | 
			
		||||
                    error!("Failed to save id store to file: {e}");
 | 
			
		||||
                    feedback_failure(&gpio_buzzer, &status_led).await;
 | 
			
		||||
                    // TODO: How to handle a failure to save ?
 | 
			
		||||
                    gpio_buzzer
 | 
			
		||||
                        .lock()
 | 
			
		||||
                        .await
 | 
			
		||||
                        .beep_nak()
 | 
			
		||||
                        .await
 | 
			
		||||
                        .unwrap_or_else(|e| error!("Failed to beep Nack {}", e));
 | 
			
		||||
 | 
			
		||||
                    //TODO: Error routine
 | 
			
		||||
                    status_led
 | 
			
		||||
                        .lock()
 | 
			
		||||
                        .await
 | 
			
		||||
                        .turn_red_on_1s()
 | 
			
		||||
                        .await
 | 
			
		||||
                        .unwrap_or_else(|e| {
 | 
			
		||||
                            error!("Failed to blink LED {}", e);
 | 
			
		||||
                        });
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@ -150,7 +153,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
 | 
			
		||||
    match start_webserver(store.clone()).await {
 | 
			
		||||
        Ok(()) => {}
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            error!("Failed to start webserver: {}", e);
 | 
			
		||||
            error!("Failed to start webserver: {e}");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user