109 lines
3.3 KiB
Rust
109 lines
3.3 KiB
Rust
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
|
|
}
|
|
}
|