Compare commits
2 commits
17d6f156db
...
8ea4b4401e
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ea4b4401e | |||
| 1c2823eb1b |
2 changed files with 61 additions and 12 deletions
|
|
@ -193,6 +193,7 @@ pub struct TimerConfig {
|
||||||
pub usb_adc_timer_ms: usize,
|
pub usb_adc_timer_ms: usize,
|
||||||
pub led0_timer_ms: usize,
|
pub led0_timer_ms: usize,
|
||||||
pub led1_timer_ms: usize,
|
pub led1_timer_ms: usize,
|
||||||
|
pub shutdown_timer_ms: usize,
|
||||||
// pub led2_timer_ms: usize,
|
// pub led2_timer_ms: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -203,6 +204,7 @@ pub struct Timers {
|
||||||
usb_adc_timer: TickTimerService,
|
usb_adc_timer: TickTimerService,
|
||||||
led0_timer: TickTimerService,
|
led0_timer: TickTimerService,
|
||||||
led1_timer: TickTimerService,
|
led1_timer: TickTimerService,
|
||||||
|
shutdown_timer: TickTimerService,
|
||||||
// led2_timer: TickTimerService,
|
// led2_timer: TickTimerService,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -233,10 +235,13 @@ impl Timers {
|
||||||
TickServiceData::new(config.led1_timer_ms * system_tick_rate_hz / 1000),
|
TickServiceData::new(config.led1_timer_ms * system_tick_rate_hz / 1000),
|
||||||
true,
|
true,
|
||||||
),
|
),
|
||||||
// led2_timer: TickTimerService::new(
|
shutdown_timer: TickTimerService::new(
|
||||||
// TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000),
|
TickServiceData::new(config.shutdown_timer_ms * system_tick_rate_hz / 1000),
|
||||||
// true,
|
false,
|
||||||
// ),
|
), // led2_timer: TickTimerService::new(
|
||||||
|
// TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000),
|
||||||
|
// true,
|
||||||
|
// ),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn tick(&mut self) {
|
pub fn tick(&mut self) {
|
||||||
|
|
@ -246,6 +251,7 @@ impl Timers {
|
||||||
self.usb_adc_timer.tick();
|
self.usb_adc_timer.tick();
|
||||||
self.led0_timer.tick();
|
self.led0_timer.tick();
|
||||||
self.led1_timer.tick();
|
self.led1_timer.tick();
|
||||||
|
self.shutdown_timer.tick();
|
||||||
// self.led2_timer.tick();
|
// self.led2_timer.tick();
|
||||||
}
|
}
|
||||||
pub fn need_service(&self) -> bool {
|
pub fn need_service(&self) -> bool {
|
||||||
|
|
@ -255,6 +261,7 @@ impl Timers {
|
||||||
| self.usb_adc_timer.need_service()
|
| self.usb_adc_timer.need_service()
|
||||||
| self.led0_timer.need_service()
|
| self.led0_timer.need_service()
|
||||||
| self.led1_timer.need_service()
|
| self.led1_timer.need_service()
|
||||||
|
| self.shutdown_timer.need_service()
|
||||||
// | self.led2_timer.need_service()
|
// | self.led2_timer.need_service()
|
||||||
}
|
}
|
||||||
pub fn init(&mut self) {
|
pub fn init(&mut self) {
|
||||||
|
|
@ -302,6 +309,7 @@ pub struct Sequences {
|
||||||
pub struct Interfaces {
|
pub struct Interfaces {
|
||||||
pub pwm_core: SimplePwmCore<'static, ch32_hal::peripherals::TIM1>,
|
pub pwm_core: SimplePwmCore<'static, ch32_hal::peripherals::TIM1>,
|
||||||
pub adc_core: crate::AdcCore,
|
pub adc_core: crate::AdcCore,
|
||||||
|
pub amp: crate::Amplifier,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct App {
|
pub struct App {
|
||||||
|
|
@ -345,6 +353,9 @@ impl App {
|
||||||
self.timers.led1_timer.reset();
|
self.timers.led1_timer.reset();
|
||||||
self.timers.led1_timer.enable(true);
|
self.timers.led1_timer.enable(true);
|
||||||
|
|
||||||
|
self.timers.shutdown_timer.reset();
|
||||||
|
self.timers.shutdown_timer.enable(true);
|
||||||
|
|
||||||
// self.timers.led2_timer.reset();
|
// self.timers.led2_timer.reset();
|
||||||
// self.timers.led2_timer.enable(true);
|
// self.timers.led2_timer.enable(true);
|
||||||
|
|
||||||
|
|
@ -394,14 +405,8 @@ impl App {
|
||||||
// #[cfg(feature = "enable_print")]
|
// #[cfg(feature = "enable_print")]
|
||||||
// println!("batt adc service: {bv}, {avg}");
|
// println!("batt adc service: {bv}, {avg}");
|
||||||
if avg < 421 {
|
if avg < 421 {
|
||||||
// self.services
|
|
||||||
// .sequencer
|
|
||||||
// .play_sequence(&crate::sequences::COIN_CHIRP, 0);
|
|
||||||
self.set_state(State::DeepSleep);
|
self.set_state(State::DeepSleep);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO:
|
|
||||||
// do stuff if the battery voltage is below some threshold
|
|
||||||
}
|
}
|
||||||
if self.timers.usb_adc_timer.need_service() {
|
if self.timers.usb_adc_timer.need_service() {
|
||||||
self.timers.usb_adc_timer.service();
|
self.timers.usb_adc_timer.service();
|
||||||
|
|
@ -442,6 +447,11 @@ impl App {
|
||||||
// #[cfg(feature = "enable_print")]
|
// #[cfg(feature = "enable_print")]
|
||||||
// println!("led1 service");
|
// println!("led1 service");
|
||||||
}
|
}
|
||||||
|
if self.timers.shutdown_timer.need_service() {
|
||||||
|
self.timers.shutdown_timer.service();
|
||||||
|
self.timers.shutdown_timer.reset();
|
||||||
|
self.set_state(State::DeepSleep);
|
||||||
|
}
|
||||||
// if self.timers.led2_timer.need_service() {
|
// if self.timers.led2_timer.need_service() {
|
||||||
// let out = match self.settings.brightness {
|
// let out = match self.settings.brightness {
|
||||||
// Level::Off => 0,
|
// Level::Off => 0,
|
||||||
|
|
@ -493,10 +503,14 @@ impl App {
|
||||||
} else {
|
} else {
|
||||||
self.services.sequencer.disable();
|
self.services.sequencer.disable();
|
||||||
self.services.synth0.disable();
|
self.services.synth0.disable();
|
||||||
|
self.interfaces.amp.disable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.services.synth0.need_service() {
|
if self.services.synth0.need_service() {
|
||||||
|
if !self.interfaces.amp.enabled() {
|
||||||
|
self.interfaces.amp.enable();
|
||||||
|
}
|
||||||
let out = match self.services.synth0.service() {
|
let out = match self.services.synth0.service() {
|
||||||
Some(value) => value / 6 / self.settings.volume.as_volume_divisor(),
|
Some(value) => value / 6 / self.settings.volume.as_volume_divisor(),
|
||||||
None => 0,
|
None => 0,
|
||||||
|
|
@ -531,16 +545,21 @@ impl App {
|
||||||
self.interfaces
|
self.interfaces
|
||||||
.pwm_core
|
.pwm_core
|
||||||
.disable(ch32_hal::timer::Channel::Ch4);
|
.disable(ch32_hal::timer::Channel::Ch4);
|
||||||
|
self.interfaces.amp.disable();
|
||||||
}
|
}
|
||||||
pub fn volume_button(&mut self) {
|
pub fn volume_button(&mut self) {
|
||||||
self.settings.volume.next();
|
self.settings.volume.next();
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("new volume: {:?}", self.settings.volume);
|
println!("new volume: {:?}", self.settings.volume);
|
||||||
|
self.timers.shutdown_timer.reset();
|
||||||
|
self.timers.shutdown_timer.enable(true);
|
||||||
}
|
}
|
||||||
pub fn brightness_button(&mut self) {
|
pub fn brightness_button(&mut self) {
|
||||||
self.settings.brightness.next();
|
self.settings.brightness.next();
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("new brightness: {:?}", self.settings.brightness);
|
println!("new brightness: {:?}", self.settings.brightness);
|
||||||
|
self.timers.shutdown_timer.reset();
|
||||||
|
self.timers.shutdown_timer.enable(true);
|
||||||
}
|
}
|
||||||
pub fn main_button_press(&mut self) {
|
pub fn main_button_press(&mut self) {
|
||||||
// TODO
|
// TODO
|
||||||
|
|
@ -548,8 +567,10 @@ impl App {
|
||||||
println!("main button press");
|
println!("main button press");
|
||||||
self.timers.sp_timer.reset();
|
self.timers.sp_timer.reset();
|
||||||
self.timers.lp_timer.reset();
|
self.timers.lp_timer.reset();
|
||||||
|
self.timers.shutdown_timer.reset();
|
||||||
self.timers.sp_timer.enable(true);
|
self.timers.sp_timer.enable(true);
|
||||||
self.timers.lp_timer.enable(true);
|
self.timers.lp_timer.enable(true);
|
||||||
|
self.timers.shutdown_timer.enable(true);
|
||||||
self.main_button_click();
|
self.main_button_click();
|
||||||
}
|
}
|
||||||
pub fn main_button_release(&mut self) {
|
pub fn main_button_release(&mut self) {
|
||||||
|
|
@ -581,6 +602,8 @@ impl App {
|
||||||
self.services
|
self.services
|
||||||
.sequencer
|
.sequencer
|
||||||
.play_sequence(&crate::sequences::COIN_CHIRP, 0);
|
.play_sequence(&crate::sequences::COIN_CHIRP, 0);
|
||||||
|
self.timers.shutdown_timer.reset();
|
||||||
|
self.timers.shutdown_timer.enable(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,27 @@ use crate::app::sequencer::{DynamicSequence, SequenceEntry};
|
||||||
|
|
||||||
static LED0_SEQ: [u8; 8] = [0u8, 25u8, 50u8, 75u8, 100u8, 75u8, 50u8, 25u8];
|
static LED0_SEQ: [u8; 8] = [0u8, 25u8, 50u8, 75u8, 100u8, 75u8, 50u8, 25u8];
|
||||||
|
|
||||||
|
pub struct Amplifier {
|
||||||
|
amp_en: Output<'static>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Amplifier {
|
||||||
|
pub fn new(amp_en: Output<'static>) -> Self {
|
||||||
|
let mut amp = Self { amp_en };
|
||||||
|
amp.disable();
|
||||||
|
amp
|
||||||
|
}
|
||||||
|
pub fn enable(&mut self) {
|
||||||
|
self.amp_en.set_low();
|
||||||
|
}
|
||||||
|
pub fn disable(&mut self) {
|
||||||
|
self.amp_en.set_high();
|
||||||
|
}
|
||||||
|
pub fn enabled(&self) -> bool {
|
||||||
|
!self.amp_en.is_set_high()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
use hal::adc::Adc;
|
use hal::adc::Adc;
|
||||||
use hal::peripherals::{ADC1, PD4};
|
use hal::peripherals::{ADC1, PD4};
|
||||||
|
|
||||||
|
|
@ -271,7 +292,7 @@ fn app_main(mut p: hal::Peripherals) -> ! {
|
||||||
let extra_io_2 = p.PD3;
|
let extra_io_2 = p.PD3;
|
||||||
|
|
||||||
let mut amp_en_output = Output::new(amp_en, Level::Low, Default::default());
|
let mut amp_en_output = Output::new(amp_en, Level::Low, Default::default());
|
||||||
amp_en_output.set_low();
|
let amp = Amplifier::new(amp_en_output);
|
||||||
|
|
||||||
// set up interrupts
|
// set up interrupts
|
||||||
unsafe { system::init_gpio_irq(sense_coin_pin.pin(), sense_coin_pin.port(), true, false) };
|
unsafe { system::init_gpio_irq(sense_coin_pin.pin(), sense_coin_pin.port(), true, false) };
|
||||||
|
|
@ -297,6 +318,7 @@ fn app_main(mut p: hal::Peripherals) -> ! {
|
||||||
usb_adc_timer_ms: 10000,
|
usb_adc_timer_ms: 10000,
|
||||||
led0_timer_ms: 100,
|
led0_timer_ms: 100,
|
||||||
led1_timer_ms: 100,
|
led1_timer_ms: 100,
|
||||||
|
shutdown_timer_ms: 4 * 60 * 60 * 1000,
|
||||||
// led2_timer_ms: 100,
|
// led2_timer_ms: 100,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -334,7 +356,11 @@ fn app_main(mut p: hal::Peripherals) -> ! {
|
||||||
audio: &SEQUENCE_LIST,
|
audio: &SEQUENCE_LIST,
|
||||||
};
|
};
|
||||||
|
|
||||||
let app_interfaces = Interfaces { pwm_core, adc_core };
|
let app_interfaces = Interfaces {
|
||||||
|
pwm_core,
|
||||||
|
adc_core,
|
||||||
|
amp,
|
||||||
|
};
|
||||||
|
|
||||||
let mut app = App::new(app_config, app_services, app_sequences, app_interfaces);
|
let mut app = App::new(app_config, app_services, app_sequences, app_interfaces);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue