fixed buzzer use in tokio thread

This commit is contained in:
Djeeberjr 2025-05-05 14:39:13 +02:00
parent b416b41040
commit 01454a018d
3 changed files with 7 additions and 7 deletions

View File

@ -1,5 +1,5 @@
use rppal::gpio::{Gpio, OutputPin}; use rppal::gpio::{Gpio, OutputPin};
use std::time; use std::{error::Error, time};
use tokio::time::sleep; use tokio::time::sleep;
pub struct GPIOBuzzer { pub struct GPIOBuzzer {
@ -7,7 +7,7 @@ pub struct GPIOBuzzer {
} }
impl GPIOBuzzer { impl GPIOBuzzer {
pub fn new(pin_num: u8) -> Result<Self, Box<dyn std::error::Error>> { pub fn new(pin_num: u8) -> Result<Self, Box<dyn Error>> {
let gpio = Gpio::new()?; let gpio = Gpio::new()?;
let pin = gpio.get(pin_num)?.into_output(); let pin = gpio.get(pin_num)?.into_output();

View File

@ -4,7 +4,6 @@ use std::{
error::Error, error::Error,
fmt::Display, fmt::Display,
}; };
use tokio::fs; use tokio::fs;
/// Represents the ID that is stored on the Tally /// Represents the ID that is stored on the Tally
@ -67,7 +66,7 @@ impl IDStore {
} }
/// Writes the store to a json file /// Writes the store to a json file
pub async fn export_json(&self, filepath: &str) -> Result<(), Box<dyn Error>> { pub async fn export_json(&self, filepath: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
fs::write(filepath, serde_json::to_string(&self)?).await?; fs::write(filepath, serde_json::to_string(&self)?).await?;
Ok(()) Ok(())
} }

View File

@ -1,3 +1,4 @@
use buzzer::GPIOBuzzer;
use color::NamedColor; use color::NamedColor;
use id_store::IDStore; use id_store::IDStore;
use log::{LevelFilter, error, info, warn}; use log::{LevelFilter, error, info, warn};
@ -69,8 +70,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
}; };
let store: Arc<Mutex<IDStore>> = Arc::new(Mutex::new(raw_store)); let store: Arc<Mutex<IDStore>> = Arc::new(Mutex::new(raw_store));
let gpio_buzzer: Arc<Mutex<GPIOBuzzer>> = Arc::new(Mutex::new(buzzer::GPIOBuzzer::new(4)?));
let mut gpio_buzzer = buzzer::GPIOBuzzer::new(4)?;
let channel_store = store.clone(); let channel_store = store.clone();
tokio::spawn(async move { tokio::spawn(async move {
@ -82,11 +82,12 @@ async fn main() -> Result<(), Box<dyn Error>> {
{ {
info!("Added new id to current day"); info!("Added new id to current day");
// led.set_named_color_time(NamedColor::Green, 1); //led is green for 1 sec // led.set_named_color_time(NamedColor::Green, 1); //led is green for 1 sec
gpio_buzzer.beep_ack().await; gpio_buzzer.lock().await.beep_ack().await;
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);
// TODO: How to handle a failure to save ? // TODO: How to handle a failure to save ?
gpio_buzzer.lock().await.beep_nak().await;
} }
} }
} }