add additional InputFlags and minor refactor
This commit is contained in:
parent
73e4b482a6
commit
b1d7574a80
2 changed files with 66 additions and 32 deletions
|
|
@ -127,13 +127,28 @@ pub enum SystemState {
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct InputFlags {
|
struct InputFlags {
|
||||||
coin_flag: bool,
|
sense_coin_flag: bool,
|
||||||
button_flag: bool,
|
main_btn_flag: bool,
|
||||||
|
volume_btn_flag: bool,
|
||||||
|
light_ctrl_btn_flag: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for InputFlags {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
sense_coin_flag: false,
|
||||||
|
main_btn_flag: false,
|
||||||
|
volume_btn_flag: false,
|
||||||
|
light_ctrl_btn_flag: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static mut INPUT_FLAGS: InputFlags = InputFlags {
|
static mut INPUT_FLAGS: InputFlags = InputFlags {
|
||||||
coin_flag: false,
|
sense_coin_flag: false,
|
||||||
button_flag: false,
|
main_btn_flag: false,
|
||||||
|
volume_btn_flag: false,
|
||||||
|
light_ctrl_btn_flag: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Test {}
|
struct Test {}
|
||||||
|
|
@ -248,8 +263,12 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
println!("ADC calibration value: {}", adc_cal);
|
println!("ADC calibration value: {}", adc_cal);
|
||||||
|
|
||||||
// definitions
|
// definitions
|
||||||
let coin_pin = p.PC2;
|
let sense_coin_pin = p.PC2;
|
||||||
let button_pin = p.PD6;
|
let main_btn_pin = p.PD6;
|
||||||
|
let volume_btn_pin = p.PC6;
|
||||||
|
let light_ctrl_btn_pin = p.PC7;
|
||||||
|
let amp_en = p.PC5;
|
||||||
|
|
||||||
// println!(
|
// println!(
|
||||||
// "coin pin: {} | coin port: {}",
|
// "coin pin: {} | coin port: {}",
|
||||||
// coin_pin.pin(),
|
// coin_pin.pin(),
|
||||||
|
|
@ -265,13 +284,30 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
// 2025-09-10 00:32:23.515: push pin: 6 | push port: 3
|
// 2025-09-10 00:32:23.515: push pin: 6 | push port: 3
|
||||||
|
|
||||||
// set up interrupts
|
// set up interrupts
|
||||||
unsafe { system::init_gpio_irq(coin_pin.pin(), coin_pin.port(), false, true) };
|
unsafe { system::init_gpio_irq(sense_coin_pin.pin(), sense_coin_pin.port(), false, true) };
|
||||||
unsafe { system::init_gpio_irq(button_pin.pin(), button_pin.port(), true, true) };
|
unsafe { system::init_gpio_irq(main_btn_pin.pin(), main_btn_pin.port(), true, true) };
|
||||||
|
unsafe { system::init_gpio_irq(volume_btn_pin.pin(), volume_btn_pin.port(), true, true) };
|
||||||
|
unsafe {
|
||||||
|
system::init_gpio_irq(
|
||||||
|
light_ctrl_btn_pin.pin(),
|
||||||
|
light_ctrl_btn_pin.port(),
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
// coin debouncer (100ms)
|
// coin debouncer (100ms)
|
||||||
let mut coin_input = DebouncedGPIO::new(coin_pin.degrade(), core_config.tick_rate_hz, 100);
|
let mut sense_coin_input =
|
||||||
|
DebouncedGPIO::new(sense_coin_pin.degrade(), core_config.tick_rate_hz, 100);
|
||||||
|
// main button debouncer (100ms)
|
||||||
|
let mut main_btn_input =
|
||||||
|
DebouncedGPIO::new(main_btn_pin.degrade(), core_config.tick_rate_hz, 100);
|
||||||
// button debouncer (100ms)
|
// button debouncer (100ms)
|
||||||
let mut button_input = DebouncedGPIO::new(button_pin.degrade(), core_config.tick_rate_hz, 100);
|
let mut volume_btn_input =
|
||||||
|
DebouncedGPIO::new(volume_btn_pin.degrade(), core_config.tick_rate_hz, 100);
|
||||||
|
// button debouncer (100ms)
|
||||||
|
let mut light_ctrl_btn_input =
|
||||||
|
DebouncedGPIO::new(light_ctrl_btn_pin.degrade(), core_config.tick_rate_hz, 100);
|
||||||
|
|
||||||
let pwm_core = SimplePwmCore::new(pwm);
|
let pwm_core = SimplePwmCore::new(pwm);
|
||||||
|
|
||||||
|
|
@ -321,6 +357,7 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
// dac data
|
// dac data
|
||||||
// let coin_sound = include_bytes!("../audio/coin.raw");
|
// let coin_sound = include_bytes!("../audio/coin.raw");
|
||||||
let coin_sound = include_bytes!("../audio/sweep_dpcm_u4.raw");
|
let coin_sound = include_bytes!("../audio/sweep_dpcm_u4.raw");
|
||||||
|
let button_sounds = [include_bytes!("../audio/sweep_dpcm_u4.raw")];
|
||||||
// let button_sound = include_bytes!("../audio/coinMixTest1_dpcm_u4.raw");
|
// let button_sound = include_bytes!("../audio/coinMixTest1_dpcm_u4.raw");
|
||||||
|
|
||||||
let mut system_state = SystemState::Active;
|
let mut system_state = SystemState::Active;
|
||||||
|
|
@ -353,11 +390,11 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
{
|
{
|
||||||
// system input servicing
|
// system input servicing
|
||||||
unsafe {
|
unsafe {
|
||||||
if INPUT_FLAGS.coin_flag {
|
if INPUT_FLAGS.sense_coin_flag {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("coin flag active");
|
println!("coin flag active");
|
||||||
INPUT_FLAGS.coin_flag = false;
|
INPUT_FLAGS.sense_coin_flag = false;
|
||||||
coin_input.begin();
|
sense_coin_input.begin();
|
||||||
// enter the active state
|
// enter the active state
|
||||||
system_state = SystemState::Active;
|
system_state = SystemState::Active;
|
||||||
|
|
||||||
|
|
@ -366,31 +403,31 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
tt1.enable(true);
|
tt1.enable(true);
|
||||||
interfaces.dac.load_data(coin_sound);
|
interfaces.dac.load_data(coin_sound);
|
||||||
}
|
}
|
||||||
if INPUT_FLAGS.button_flag {
|
if INPUT_FLAGS.main_btn_flag {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("button flag active");
|
println!("button flag active");
|
||||||
INPUT_FLAGS.button_flag = false;
|
INPUT_FLAGS.main_btn_flag = false;
|
||||||
button_input.begin();
|
main_btn_input.begin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// debouncer
|
// debouncer
|
||||||
coin_input.service();
|
sense_coin_input.service();
|
||||||
button_input.service();
|
main_btn_input.service();
|
||||||
|
|
||||||
if coin_input.ready() {
|
if sense_coin_input.ready() {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("debounced coin_input value: {}", coin_input.value());
|
println!("debounced coin_input value: {}", sense_coin_input.value());
|
||||||
coin_input.reset();
|
sense_coin_input.reset();
|
||||||
}
|
}
|
||||||
if button_input.ready() {
|
if main_btn_input.ready() {
|
||||||
let value = button_input.value();
|
let value = main_btn_input.value();
|
||||||
button_input.reset();
|
main_btn_input.reset();
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("debounced button_input value: {}", value);
|
println!("debounced button_input value: {}", value);
|
||||||
|
|
||||||
if !value {
|
if !value {
|
||||||
// interfaces.dac.load_data(button_sound);
|
interfaces.dac.load_data(button_sounds[0]);
|
||||||
|
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("reset hold timers + enable");
|
println!("reset hold timers + enable");
|
||||||
|
|
@ -458,7 +495,7 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! {
|
||||||
hal::rcc::init(config.rcc);
|
hal::rcc::init(config.rcc);
|
||||||
}
|
}
|
||||||
unsafe {
|
unsafe {
|
||||||
if INPUT_FLAGS.coin_flag {
|
if INPUT_FLAGS.sense_coin_flag {
|
||||||
system_state = SystemState::Active;
|
system_state = SystemState::Active;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,7 @@ pub unsafe fn init_gpio_irq(pin: u8, port: u8, rising: bool, falling: bool) {
|
||||||
|
|
||||||
// FIXME: should return a vec of the interrupts
|
// FIXME: should return a vec of the interrupts
|
||||||
pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
||||||
let mut input_flags = crate::InputFlags {
|
let mut input_flags = crate::InputFlags::default();
|
||||||
coin_flag: false,
|
|
||||||
button_flag: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
let exti = &hal::pac::EXTI;
|
let exti = &hal::pac::EXTI;
|
||||||
|
|
||||||
|
|
@ -44,7 +41,7 @@ pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
||||||
if (bits & (0x1 << coin_pin)) != 0x0 {
|
if (bits & (0x1 << coin_pin)) != 0x0 {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("coin irq!");
|
println!("coin irq!");
|
||||||
input_flags.coin_flag = true;
|
input_flags.sense_coin_flag = true;
|
||||||
// unsafe {
|
// unsafe {
|
||||||
// INPUT_FLAGS.coin_flag = true;
|
// INPUT_FLAGS.coin_flag = true;
|
||||||
// }
|
// }
|
||||||
|
|
@ -54,7 +51,7 @@ pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags {
|
||||||
if (bits & (0x1 << button_pin)) != 0x0 {
|
if (bits & (0x1 << button_pin)) != 0x0 {
|
||||||
#[cfg(feature = "enable_print")]
|
#[cfg(feature = "enable_print")]
|
||||||
println!("button irq!");
|
println!("button irq!");
|
||||||
input_flags.button_flag = true;
|
input_flags.main_btn_flag = true;
|
||||||
// unsafe {
|
// unsafe {
|
||||||
// INPUT_FLAGS.button_flag = true;
|
// INPUT_FLAGS.button_flag = true;
|
||||||
// }
|
// }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue