From 485f617515fc07c2bc95aba62151d009f16cdbb7 Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Sun, 26 Oct 2025 15:44:35 -0600 Subject: [PATCH] cursed input flags stuff --- ch32v-insert-coin/src/main.rs | 43 ++++++++++++++++++--------------- ch32v-insert-coin/src/system.rs | 40 ++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 27 deletions(-) diff --git a/ch32v-insert-coin/src/main.rs b/ch32v-insert-coin/src/main.rs index 8929c69..ba13aee 100644 --- a/ch32v-insert-coin/src/main.rs +++ b/ch32v-insert-coin/src/main.rs @@ -144,6 +144,21 @@ impl Default for InputFlags { } } +impl InputFlags { + pub fn set_sense_coin_flag(&mut self, val: bool) { + self.sense_coin_flag = val; + } + pub fn set_main_btn_flag(&mut self, val: bool) { + self.main_btn_flag = val; + } + pub fn set_volume_btn_flag(&mut self, val: bool) { + self.volume_btn_flag = val; + } + pub fn set_light_ctrl_btn_flag(&mut self, val: bool) { + self.light_ctrl_btn_flag = val; + } +} + static mut INPUT_FLAGS: InputFlags = InputFlags { sense_coin_flag: false, main_btn_flag: false, @@ -157,7 +172,9 @@ impl Handler for Test { #[cfg(feature = "enable_print")] println!("on_interrupt()"); critical_section::with(|_| unsafe { - INPUT_FLAGS = system::clear_interrupt(2, 6); + let flags = system::clear_interrupt(2, 6); + INPUT_FLAGS.sense_coin_flag = flags.sense_coin_flag; + INPUT_FLAGS.main_btn_flag = flags.main_btn_flag; }); } } @@ -249,11 +266,11 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! { // adc let mut adc = hal::adc::Adc::new(p.ADC1, Default::default()); - let mut adc_pin = p.PD4; + let mut batt_monitor_pin = p.PD4; // adc2 // let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default()); - let mut usb_adc_pin = p.PD5; + let mut usb_detect_pin = p.PD5; // println!("ADC_PIN CHANNEL: {}", adc_pin.channel().channel()); delay.delay_ms(1000); @@ -268,20 +285,8 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! { let volume_btn_pin = p.PC6; let light_ctrl_btn_pin = p.PC7; let amp_en = p.PC5; - - // println!( - // "coin pin: {} | coin port: {}", - // coin_pin.pin(), - // coin_pin.port() - // ); - // println!( - // "push pin: {} | push port: {}", - // button_pin.pin(), - // button_pin.port() - // ); - - //2025-09-10 00:32:23.514: coin pin: 4 | coin port: 3 - // 2025-09-10 00:32:23.515: push pin: 6 | push port: 3 + let extra_io_1 = p.PD0; + let extra_io_2 = p.PD3; // set up interrupts unsafe { system::init_gpio_irq(sense_coin_pin.pin(), sense_coin_pin.port(), false, true) }; @@ -473,8 +478,8 @@ fn app_main(mut p: hal::Peripherals, mut delay: Delay) -> ! { } if adc1_timer.need_service() { - let val = adc.convert(&mut adc_pin, hal::adc::SampleTime::CYCLES241); - let val = adc.convert(&mut usb_adc_pin, hal::adc::SampleTime::CYCLES241); + let val = adc.convert(&mut batt_monitor_pin, hal::adc::SampleTime::CYCLES241); + let val = adc.convert(&mut usb_detect_pin, hal::adc::SampleTime::CYCLES241); #[cfg(feature = "enable_print")] println!("ADC value: {}", val); diff --git a/ch32v-insert-coin/src/system.rs b/ch32v-insert-coin/src/system.rs index d1cbb43..5266894 100644 --- a/ch32v-insert-coin/src/system.rs +++ b/ch32v-insert-coin/src/system.rs @@ -4,7 +4,7 @@ use hal::println; pub unsafe fn init_gpio_irq(pin: u8, port: u8, rising: bool, falling: bool) { critical_section::with(|_| { #[cfg(feature = "enable_print")] - println!("init_gpio_irq"); + println!("init_gpio_irq {pin}:{port}"); let exti = &hal::pac::EXTI; let afio = &hal::pac::AFIO; @@ -20,7 +20,6 @@ pub unsafe fn init_gpio_irq(pin: u8, port: u8, rising: bool, falling: bool) { }); } -// FIXME: should return a vec of the interrupts pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags { let mut input_flags = crate::InputFlags::default(); @@ -36,27 +35,52 @@ pub fn clear_interrupt(coin_pin: u8, button_pin: u8) -> crate::InputFlags { // We don't handle or change any EXTI lines above 24. let bits = bits.0 & 0x00FFFFFF; + println!("bits: {bits:08x}"); // coin_flag if (bits & (0x1 << coin_pin)) != 0x0 { #[cfg(feature = "enable_print")] println!("coin irq!"); input_flags.sense_coin_flag = true; - // unsafe { - // INPUT_FLAGS.coin_flag = true; - // } } // button_flag if (bits & (0x1 << button_pin)) != 0x0 { #[cfg(feature = "enable_print")] - println!("button irq!"); - input_flags.main_btn_flag = true; + println!("main_btn irq!"); + // CHECK PC6 // unsafe { - // INPUT_FLAGS.button_flag = true; + // let mut val = 0; + // let reg: u32 = 0x40011008; + // val = (reg as *mut u32).read_volatile(); + // if ((val >> 0x6) & 0x1) == 0x0 { + // input_flags.volume_btn_flag = true; + // #[cfg(feature = "enable_print")] + // println!("volume irq!"); + // println!("CBANK: {val:08x}"); + // } + // } + // // CHECK PD6 + // unsafe { + // let mut val = 0; + // let reg: u32 = 0x40011408; + // val = (reg as *mut u32).read_volatile(); + // // if ((val >> 0x6) & 0x1) == 0x0 { + // input_flags.main_btn_flag = true; + // #[cfg(feature = "enable_print")] + // println!("main_btn irq!"); + // println!("DBANK: {val:08x}"); + // // } // } } + // light_ctrl_btn_flag + // if (bits & (0x1 << light_ctrl_btn_pin)) != 0x0 { + // #[cfg(feature = "enable_print")] + // println!("light ctrl btn irq!"); + // input_flags.light_ctrl_btn_flag = true; + // } + // Clear pending - Clears the EXTI's line pending bits. exti.intfr().write(|w| w.0 = bits);