mirror of
https://github.com/Djeeberjr/fw-anwesenheit.git
synced 2025-07-02 01:04:16 +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 std::{env, error::Error, sync::Arc};
|
||||||
use tally_id::TallyID;
|
use tally_id::TallyID;
|
||||||
use tokio::{
|
use tokio::{
|
||||||
fs,
|
fs, join,
|
||||||
sync::{Mutex, mpsc},
|
sync::{Mutex, mpsc},
|
||||||
};
|
};
|
||||||
use webserver::start_webserver;
|
use webserver::start_webserver;
|
||||||
@ -47,13 +47,45 @@ fn setup_logger() {
|
|||||||
let _ = SimpleLogger::init(log_level, config);
|
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]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error>> {
|
async fn main() -> Result<(), Box<dyn Error>> {
|
||||||
setup_logger();
|
setup_logger();
|
||||||
|
|
||||||
info!("Starting application");
|
info!("Starting application");
|
||||||
|
|
||||||
let (tx, mut rx) = mpsc::channel::<String>(1);
|
let (tx, mut rx) = mpsc::channel::<String>(32);
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
match run_pm3(tx).await {
|
match run_pm3(tx).await {
|
||||||
@ -61,7 +93,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
warn!("PM3 exited with a zero exit code");
|
warn!("PM3 exited with a zero exit code");
|
||||||
}
|
}
|
||||||
Err(e) => {
|
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) {
|
if channel_store.lock().await.add_id(tally_id) {
|
||||||
info!("Added new id to current day");
|
info!("Added new id to current day");
|
||||||
|
|
||||||
gpio_buzzer
|
feedback_success(&gpio_buzzer, &status_led).await;
|
||||||
.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);
|
|
||||||
});
|
|
||||||
|
|
||||||
if let Err(e) = channel_store.lock().await.export_json(STORE_PATH).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 ?
|
// 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 {
|
match start_webserver(store.clone()).await {
|
||||||
Ok(()) => {}
|
Ok(()) => {}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Failed to start webserver: {}", e);
|
error!("Failed to start webserver: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user