firmware for my Touchscreen E-Paper Input Module for Framework Laptop 16
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

program interface: add option to select refresh blocking mode

+13 -12
+3 -3
fw16-epd-main/src/gui.rs
··· 7 7 use embedded_graphics::text::Text; 8 8 use heapless::String; 9 9 use fw16_epd_program_interface::eg::EpdDrawTarget; 10 - use fw16_epd_program_interface::{TouchEvent, TouchEventType}; 10 + use fw16_epd_program_interface::TouchEvent; 11 11 use crate::{next_touch_event, set_touch_enabled}; 12 12 13 13 pub(crate) fn gui_main(mut draw_target: EpdDrawTarget) -> ! { 14 - draw_target.refresh(false); 14 + draw_target.refresh(false, true); 15 15 16 16 unsafe { set_touch_enabled(true) }; 17 17 ··· 32 32 .draw(&mut draw_target) 33 33 .unwrap(); 34 34 debug!("triggering refresh"); 35 - draw_target.refresh(true); 35 + draw_target.refresh(true, false); 36 36 } 37 37 } 38 38 }
+5 -3
fw16-epd-main/src/main.rs
··· 59 59 critical_section::with(|cs| IMAGE_BUFFER.borrow_ref_mut(cs).copy_from_slice(image)); 60 60 } 61 61 62 - extern "C" fn refresh(fast_refresh: bool) { 62 + extern "C" fn refresh(fast_refresh: bool, block_ack: bool) { 63 63 DO_REFRESH.store(true, Ordering::Relaxed); 64 64 FAST_REFRESH.store(fast_refresh, Ordering::Relaxed); 65 65 cortex_m::asm::sev(); 66 - // Wait until the refresh has been initiated 67 - while DO_REFRESH.load(Ordering::Relaxed) {} 66 + 67 + if block_ack { 68 + while DO_REFRESH.load(Ordering::Relaxed) {} 69 + } 68 70 } 69 71 70 72 extern "C" fn next_touch_event() -> SafeOption<TouchEvent> {
+4 -5
fw16-epd-program-interface/src/eg.rs
··· 5 5 use embedded_graphics::pixelcolor::BinaryColor; 6 6 use embedded_graphics::primitives::Rectangle; 7 7 use tp370pgh01::{DIM_X, DIM_Y, IMAGE_BYTES}; 8 - use crate::ProgramFunctionTable; 9 8 10 9 pub struct EpdDrawTarget { 11 10 write_image: extern "C" fn(&[u8; IMAGE_BYTES]), 12 - refresh: extern "C" fn(bool), 11 + refresh: extern "C" fn(bool, bool), 13 12 buf: [u8; IMAGE_BYTES], 14 13 } 15 14 ··· 56 55 } 57 56 58 57 impl EpdDrawTarget { 59 - pub const fn new(write_image: extern "C" fn(&[u8; IMAGE_BYTES]), refresh: extern "C" fn(bool)) -> Self { 58 + pub const fn new(write_image: extern "C" fn(&[u8; IMAGE_BYTES]), refresh: extern "C" fn(bool, bool)) -> Self { 60 59 Self { 61 60 write_image, 62 61 refresh, ··· 64 63 } 65 64 } 66 65 67 - pub fn refresh(&self, fast_refresh: bool) { 66 + pub fn refresh(&self, fast_refresh: bool, block_ack: bool) { 68 67 (self.write_image)(&self.buf); 69 - (self.refresh)(fast_refresh); 68 + (self.refresh)(fast_refresh, block_ack); 70 69 } 71 70 }
+1 -1
fw16-epd-program-interface/src/lib.rs
··· 35 35 #[derive(Copy, Clone)] 36 36 pub struct ProgramFunctionTable { 37 37 pub write_image: extern "C" fn(&[u8; IMAGE_BYTES]), 38 - pub refresh: extern "C" fn(bool), 38 + pub refresh: extern "C" fn(bool, bool), 39 39 pub next_touch_event: extern "C" fn() -> SafeOption<TouchEvent>, 40 40 pub set_touch_enabled: unsafe extern "C" fn(bool), 41 41 }