use async_trait::async_trait;
use std::io;
use std::time::Duration;
pub(super) mod cmds;
pub const BEEP_TONE: Tone = Tone::square(800, Duration::from_millis(250));
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Waveform {
Square,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct Tone {
pub frequency_hz: u32,
pub duration: Duration,
pub waveform: Waveform,
}
impl Tone {
pub const fn square(frequency_hz: u32, duration: Duration) -> Self {
Self { frequency_hz, duration, waveform: Waveform::Square }
}
}
#[async_trait(?Send)]
pub trait AudioOps {
async fn play_tone(&mut self, tone: Tone) -> io::Result<()>;
}
pub struct NoopAudioOps;
#[async_trait(?Send)]
impl AudioOps for NoopAudioOps {
async fn play_tone(&mut self, _tone: Tone) -> io::Result<()> {
Err(io::Error::other("No audio support in this console"))
}
}