From 8502ed75bf8d3e8df1eb5f1b5576079f55c6e13e Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Sun, 27 Jul 2025 14:58:02 -0600 Subject: [PATCH] initial commit of dac files --- .gitignore | 1 + Cargo.lock | 7 +++++++ Cargo.toml | 6 ++++++ src/dac.rs | 33 +++++++++++++++++++++++++++++++++ src/interface.rs | 4 ++++ src/lib.rs | 3 +++ 6 files changed, 54 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/dac.rs create mode 100644 src/interface.rs create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..4e404bc --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adpcm-pwm-dac" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..0f74483 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "adpcm-pwm-dac" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/dac.rs b/src/dac.rs new file mode 100644 index 0000000..32ead8f --- /dev/null +++ b/src/dac.rs @@ -0,0 +1,33 @@ +use crate::interface::DacInterface; +pub struct Dac<'a, T: DacInterface> { + output: T, + data: Option<&'a [u8]>, + index: usize, +} + +impl<'a, T: DacInterface> Dac<'a, T> { + pub fn new(output: T) -> Self { + Self { + output, + data: None, + index: 0, + } + } + pub fn load_data(&mut self, data: &'a [u8]) { + self.data = Some(data); + } + pub fn seek_to_sample(&mut self, index: usize) { + self.index = index; + } + pub fn output_next(&mut self) { + if let Some(data) = self.data { + self.index = self.index + 1; + // reset the index to 0 if we roll over + if (self.index >= data.len()) { + self.index = 0; + } + self.output.write_amplitude(data[self.index]); + // self.output.write_amplitude(100); + } + } +} \ No newline at end of file diff --git a/src/interface.rs b/src/interface.rs new file mode 100644 index 0000000..ea18854 --- /dev/null +++ b/src/interface.rs @@ -0,0 +1,4 @@ +pub trait DacInterface { + // write the amplitude (0->100%) + fn write_amplitude(&mut self, amplitude: u8); +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..d34c0f8 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] +pub mod interface; +pub mod dac; \ No newline at end of file