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

Configure Feed

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

1#![no_std] 2#![no_main] 3 4extern crate panic_halt; 5 6use core::arch::asm; 7use core::fmt::Write; 8use embedded_graphics::draw_target::DrawTarget; 9use embedded_graphics::Drawable; 10use embedded_graphics::pixelcolor::BinaryColor; 11use embedded_graphics::prelude::Point; 12use embedded_graphics::text::Text; 13use heapless::String; 14use eepy_gui::draw_target::EpdDrawTarget; 15use eepy_gui::element::button::Button; 16use eepy_gui::element::{Gui, DEFAULT_TEXT_STYLE}; 17use eepy_sys::header::ProgramSlotHeader; 18use eepy_sys::image::RefreshBlockMode; 19use eepy_sys::input::{has_event, next_event, set_touch_enabled}; 20 21#[link_section = ".header"] 22#[used] 23static HEADER: ProgramSlotHeader = ProgramSlotHeader::partial( 24 "ExampleApp", 25 env!("CARGO_PKG_VERSION"), 26 entry, 27); 28 29#[no_mangle] 30pub extern "C" fn entry() { 31 set_touch_enabled(true); 32 33 let mut draw_target = EpdDrawTarget::new(); 34 35 let text = Text::new("Example App", Point::new(10, 20), DEFAULT_TEXT_STYLE); 36 let mut button = Button::with_default_style_auto_sized(Point::new(10, 40), "Click me", true); 37 let mut exit_button = Button::with_default_style_auto_sized(Point::new(10, 386), "Exit", false); 38 39 text.draw(&mut draw_target).unwrap(); 40 button.draw_init(&mut draw_target); 41 exit_button.draw_init(&mut draw_target); 42 draw_target.refresh(false, RefreshBlockMode::BlockAcknowledge); 43 44 let mut counter = 0; 45 46 loop { 47 while let Some(ev) = next_event() { 48 if exit_button.tick(&mut draw_target, ev).clicked { 49 return; 50 } 51 52 let mut needs_refresh = false; 53 54 let response = button.tick(&mut draw_target, ev); 55 if response.clicked { 56 draw_target.clear(BinaryColor::Off).unwrap(); 57 text.draw(&mut draw_target).unwrap(); 58 button.draw_init(&mut draw_target); 59 exit_button.draw_init(&mut draw_target); 60 61 counter += 1; 62 let mut s = String::<16>::new(); 63 write!(s, "{counter}").unwrap(); 64 Text::new(&s, Point::new(10, 80), DEFAULT_TEXT_STYLE) 65 .draw(&mut draw_target) 66 .unwrap(); 67 needs_refresh = true; 68 } 69 needs_refresh |= response.needs_refresh; 70 71 if needs_refresh { 72 draw_target.refresh(true, RefreshBlockMode::NonBlocking); 73 } 74 } 75 76 if !has_event() { 77 unsafe { asm!("wfe", "wfe") }; 78 } 79 } 80}