diff --git a/eepy-launcher/src/main.rs b/eepy-launcher/src/main.rs index c828c64..fe4c494 100644 --- a/eepy-launcher/src/main.rs +++ b/eepy-launcher/src/main.rs @@ -65,8 +65,8 @@ fn main() { if let MainGui::MainPage(page) = &mut gui { page.refresh_buttons(); page.draw_init(&mut draw_target); - draw_target.refresh(false); } + draw_target.refresh(false); } else if NEEDS_REFRESH.swap(false, Ordering::Relaxed) { gui.draw_init(&mut draw_target); draw_target.refresh(false); diff --git a/eepy-launcher/src/serial.rs b/eepy-launcher/src/serial.rs index 9ae59f7..ebe3347 100644 --- a/eepy-launcher/src/serial.rs +++ b/eepy-launcher/src/serial.rs @@ -12,6 +12,7 @@ use eepy_sys::input::{next_event, set_touch_enabled}; use eepy_sys::misc::{debug, info, trace}; use eepy_sys::usb::UsbBus; use crate::{USB_DEVICE, USB_SERIAL}; +use crate::ui::flashing::draw_flashing_ui; #[derive(Copy, Clone, Debug)] enum SerialState { @@ -135,6 +136,7 @@ pub(crate) extern "C" fn usb_handler() { if PROG_SLOT.load(Ordering::Relaxed) == 0 { write_all(serial, &[Response::NoProgramSlot as u8]); } else { + set_touch_enabled(false); *state = SerialState::FlashingProgram { index: 0, page: 0, num_pages: None, remainder: None }; write_all(serial, &[Response::Ack as u8]); } @@ -177,6 +179,7 @@ pub(crate) extern "C" fn usb_handler() { // else is written successfully // Keep page 0 in the first 4096 bytes of BUF for the end if *page == 0 { + draw_flashing_ui(*page, None); debug("receiving page 0"); if let Ok(count) = serial.read(&mut buf[*index..4096]) { *index += count; @@ -195,6 +198,7 @@ pub(crate) extern "C" fn usb_handler() { } } } else { + draw_flashing_ui(*page, *num_pages); if let Ok(count) = serial.read(&mut buf[(4096 + *index)..8192]) { let mut message = heapless::String::<32>::new(); write!(message, "receiving page {page}").unwrap(); @@ -224,6 +228,7 @@ pub(crate) extern "C" fn usb_handler() { PROG_SLOT.store(0, Ordering::Relaxed); NEEDS_REFRESH_PROGRAMS.store(true, Ordering::Relaxed); + set_touch_enabled(true); info("Finished writing program"); *state = SerialState::ReadyForCommand; diff --git a/eepy-launcher/src/ui/flashing.rs b/eepy-launcher/src/ui/flashing.rs new file mode 100644 index 0000000..1b3dd63 --- /dev/null +++ b/eepy-launcher/src/ui/flashing.rs @@ -0,0 +1,24 @@ +use core::fmt::Write; +use embedded_graphics::Drawable; +use embedded_graphics::prelude::*; +use embedded_graphics::text::Text; +use eepy_gui::draw_target::EpdDrawTarget; +use eepy_gui::element::DEFAULT_TEXT_STYLE; + +pub(crate) fn draw_flashing_ui(page: usize, num_pages: Option) { + let mut target = EpdDrawTarget::default(); + + Text::new("Receiving program...", Point::new(10, 20), DEFAULT_TEXT_STYLE) + .draw(&mut target) + .unwrap(); + + if let Some(num_pages) = num_pages { + let mut s = heapless::String::<16>::new(); + write!(s, "({page} / {num_pages})").unwrap(); + + Text::new(&s, Point::new(10, 40), DEFAULT_TEXT_STYLE) + .draw(&mut target) + .unwrap(); + } + target.maybe_refresh(true); +} \ No newline at end of file diff --git a/eepy-launcher/src/ui/mod.rs b/eepy-launcher/src/ui/mod.rs index 0ce96e8..6441ade 100644 --- a/eepy-launcher/src/ui/mod.rs +++ b/eepy-launcher/src/ui/mod.rs @@ -8,6 +8,7 @@ use crate::ui::page::main::MainPage; use crate::ui::page::scratchpad::ScratchpadPage; mod page; +pub(crate) mod flashing; pub(crate) enum MainGui { MainPage(MainPage),