add basic volume control
This commit is contained in:
parent
d3ccc70782
commit
95b55f88a8
2 changed files with 64 additions and 20 deletions
|
|
@ -11,7 +11,7 @@ pub enum State {
|
||||||
|
|
||||||
mod settings {
|
mod settings {
|
||||||
|
|
||||||
#[derive(Default, Clone, Copy)]
|
#[derive(Debug, Default, Clone, Copy)]
|
||||||
pub enum Level {
|
pub enum Level {
|
||||||
Off,
|
Off,
|
||||||
Low,
|
Low,
|
||||||
|
|
@ -33,6 +33,19 @@ mod settings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// volume control
|
||||||
|
impl Level {
|
||||||
|
pub fn as_volume_divisor(&self) -> u8 {
|
||||||
|
match self {
|
||||||
|
Self::Off => u8::MAX,
|
||||||
|
Self::Low => 4,
|
||||||
|
Self::Medium => 3,
|
||||||
|
Self::High => 2,
|
||||||
|
Self::Maximum => 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
pub struct Settings {
|
pub struct Settings {
|
||||||
pub brightness: Level,
|
pub brightness: Level,
|
||||||
|
|
@ -285,8 +298,8 @@ impl App {
|
||||||
self.services
|
self.services
|
||||||
.led0
|
.led0
|
||||||
.set_amplitude(self.sequences.led0.get_value());
|
.set_amplitude(self.sequences.led0.get_value());
|
||||||
#[cfg(feature = "enable_print")]
|
// #[cfg(feature = "enable_print")]
|
||||||
println!("led0 sevice {}", self.sequences.led0.get_value());
|
// println!("led0 sevice {}", self.sequences.led0.get_value());
|
||||||
}
|
}
|
||||||
if self.timers.led1_timer.need_service() {
|
if self.timers.led1_timer.need_service() {
|
||||||
self.timers.led1_timer.service();
|
self.timers.led1_timer.service();
|
||||||
|
|
@ -294,8 +307,8 @@ impl App {
|
||||||
self.services
|
self.services
|
||||||
.led1
|
.led1
|
||||||
.set_amplitude(self.sequences.led1.get_value());
|
.set_amplitude(self.sequences.led1.get_value());
|
||||||
#[cfg(feature = "enable_print")]
|
// #[cfg(feature = "enable_print")]
|
||||||
println!("led1 service");
|
// println!("led1 service");
|
||||||
}
|
}
|
||||||
if self.timers.led2_timer.need_service() {
|
if self.timers.led2_timer.need_service() {
|
||||||
self.timers.led2_timer.service();
|
self.timers.led2_timer.service();
|
||||||
|
|
@ -303,8 +316,8 @@ impl App {
|
||||||
self.services
|
self.services
|
||||||
.led2
|
.led2
|
||||||
.set_amplitude(self.sequences.led2.get_value());
|
.set_amplitude(self.sequences.led2.get_value());
|
||||||
#[cfg(feature = "enable_print")]
|
// #[cfg(feature = "enable_print")]
|
||||||
println!("led2 service");
|
// println!("led2 service");
|
||||||
}
|
}
|
||||||
|
|
||||||
// services
|
// services
|
||||||
|
|
@ -328,7 +341,7 @@ impl App {
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.services.synth0.need_service() {
|
if self.services.synth0.need_service() {
|
||||||
let out = self.services.synth0.service();
|
let out = self.services.synth0.service() / self.settings.volume.as_volume_divisor();
|
||||||
self.interfaces
|
self.interfaces
|
||||||
.pwm_core
|
.pwm_core
|
||||||
.write_amplitude(ch32_hal::timer::Channel::Ch4, out);
|
.write_amplitude(ch32_hal::timer::Channel::Ch4, out);
|
||||||
|
|
@ -336,11 +349,31 @@ impl App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// interfaces to the app (for buttons, etc.)
|
||||||
|
impl App {
|
||||||
|
pub fn volume_button(&mut self) {
|
||||||
|
self.settings.volume.next();
|
||||||
|
#[cfg(feature = "enable_print")]
|
||||||
|
println!("new volume: {:?}", self.settings.volume);
|
||||||
|
}
|
||||||
|
pub fn brightness_button(&mut self) {
|
||||||
|
#[cfg(feature = "enable_print")]
|
||||||
|
println!("brightness button app handler");
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
pub fn main_button(&mut self) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
pub fn coin_detect(&mut self) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO LIST
|
// TODO LIST
|
||||||
//
|
//
|
||||||
// AUDIO:
|
// AUDIO:
|
||||||
// 1. volume control
|
|
||||||
// 2. dac switching
|
// 2. dac switching
|
||||||
|
// 3. amp_en control
|
||||||
//
|
//
|
||||||
// LED:
|
// LED:
|
||||||
// 1. brightness control
|
// 1. brightness control
|
||||||
|
|
@ -355,3 +388,6 @@ impl App {
|
||||||
// 1. deep sleep
|
// 1. deep sleep
|
||||||
// 2. battery voltage monitoring
|
// 2. battery voltage monitoring
|
||||||
// 3. battery voltage cutoff
|
// 3. battery voltage cutoff
|
||||||
|
//
|
||||||
|
// STRETCH TODO LIST
|
||||||
|
// 1. clean up edge detector
|
||||||
|
|
|
||||||
|
|
@ -329,6 +329,25 @@ fn app_main(mut p: hal::Peripherals) -> ! {
|
||||||
app.init();
|
app.init();
|
||||||
loop {
|
loop {
|
||||||
// system servicing
|
// system servicing
|
||||||
|
//
|
||||||
|
// edge detector
|
||||||
|
if !volume_btn_input.active() {
|
||||||
|
let volume_btn_curr = volume_btn_input.is_high_immediate();
|
||||||
|
if volume_btn_prev != volume_btn_curr {
|
||||||
|
volume_btn_input.begin();
|
||||||
|
volume_btn_prev = volume_btn_curr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
volume_btn_input.service();
|
||||||
|
if volume_btn_input.ready() {
|
||||||
|
#[cfg(feature = "enable_print")]
|
||||||
|
println!("volume btn value: {}", volume_btn_input.value());
|
||||||
|
if !volume_btn_input.value() {
|
||||||
|
app.volume_button();
|
||||||
|
}
|
||||||
|
volume_btn_input.reset();
|
||||||
|
}
|
||||||
|
|
||||||
// systick tick
|
// systick tick
|
||||||
if unsafe {
|
if unsafe {
|
||||||
|
|
@ -347,17 +366,6 @@ fn app_main(mut p: hal::Peripherals) -> ! {
|
||||||
// interfaces.service();
|
// interfaces.service();
|
||||||
}
|
}
|
||||||
|
|
||||||
// // edge detector
|
|
||||||
// if !volume_btn_input.active() {
|
|
||||||
// let volume_btn_curr = volume_btn_input.is_high_immediate();
|
|
||||||
// if volume_btn_prev != volume_btn_curr {
|
|
||||||
// volume_btn_prev = volume_btn_curr;
|
|
||||||
// unsafe {
|
|
||||||
// INPUT_FLAGS.volume_btn_flag = true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if !light_ctrl_btn_input.active() {
|
// if !light_ctrl_btn_input.active() {
|
||||||
// let light_ctrl_btn_curr = light_ctrl_btn_input.is_high_immediate();
|
// let light_ctrl_btn_curr = light_ctrl_btn_input.is_high_immediate();
|
||||||
// if light_ctrl_btn_prev != light_ctrl_btn_curr {
|
// if light_ctrl_btn_prev != light_ctrl_btn_curr {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue