// TODO write tests or replace with a crate
const SOUND_FIFO_CAPACITY: usize = 32;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct SoundFifo {
wr_pos: usize,
rd_pos: usize,
count: usize,
data: [i8; SOUND_FIFO_CAPACITY],
}
impl SoundFifo {
pub fn new() -> SoundFifo {
SoundFifo {
wr_pos: 0,
rd_pos: 0,
count: 0,
data: [0; SOUND_FIFO_CAPACITY],
pub fn write(&mut self, value: i8) {
if self.count >= SOUND_FIFO_CAPACITY {
return;
self.data[self.wr_pos] = value;
self.wr_pos = (self.wr_pos + 1) % SOUND_FIFO_CAPACITY;
self.count += 1;
pub fn read(&mut self) -> i8 {
if self.count == 0 {
return 0;
};
let value = self.data[self.rd_pos];
self.rd_pos = (self.rd_pos + 1) % SOUND_FIFO_CAPACITY;
self.count -= 1;
value
pub fn count(&self) -> usize {
self.count
pub fn reset(&mut self) {
self.wr_pos = 0;
self.rd_pos = 0;
self.count = 0;