use embedded_graphics::{ drawable::Drawable, fonts::Text, pixelcolor::Rgb565, prelude::*, primitives::rectangle::Rectangle, style::PrimitiveStyleBuilder, style::TextStyleBuilder, }; use embedded_hal::digital::v2::InputPin; use stm32f1xx_hal::prelude::*; use crate::application::App; use crate::profiles; impl App { pub fn confirm_profile(&mut self) -> bool { let mut disp = self.get_display(); let rect = Rectangle::new(Point::new(0, 0), Point::new(160, 128)) .into_styled(self.styles.fill_black); rect.draw(&mut disp).unwrap(); Text::new("Confirm profile", Point::new(4, 4)) .into_styled(self.styles.text) .draw(&mut disp) .unwrap(); Text::new( profiles::REFLOW_PROFILES[self.selected_profile].get_name(), Point::new(20, 50), ) .into_styled(self.styles.text_big) .draw(&mut disp) .unwrap(); let mut press_count = 0; let mut needs_redraw = true; let mut confirmed = false; let encoder_start = self.qei.count(); while press_count < 5 { if needs_redraw { let style = if confirmed { self.styles.ok_box } else { self.styles.normal_box }; Rectangle::new(Point::new(4, 104), Point::new(70, 124)) .into_styled(style) .draw(&mut disp) .unwrap(); let text_style = if confirmed { self.styles.text_big_black } else { self.styles.text_big }; Text::new("Start", Point::new(12, 105)) .into_styled(text_style) .draw(&mut disp) .unwrap(); let style = if !confirmed { self.styles.cancel_box } else { self.styles.normal_box }; Rectangle::new(Point::new(90, 104), Point::new(155, 124)) .into_styled(style) .draw(&mut disp) .unwrap(); let text_style = if !confirmed { self.styles.text_big_black } else { self.styles.text_big }; Text::new("Cancel", Point::new(96, 105)) .into_styled(text_style) .draw(&mut disp) .unwrap(); needs_redraw = false; } self.delay.delay_ms(10u16); let new_selection = (((self.qei.count().wrapping_sub(encoder_start)) as usize) / 4) % 2 == 0; if new_selection != confirmed { needs_redraw = true; confirmed = new_selection; } if !needs_redraw && self.button.is_low().unwrap() { press_count += 1; } else { press_count = 0; } } // Make sure the button has been released, before continuing to the next stage while !self.button.is_high().unwrap() { self.delay.delay_ms(10u16); } self.release_display(disp); confirmed } }