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 mut button = Button::with_default_style_auto_sized(Point::new(10, 40), "Click me", true); 36 let mut exit_button = Button::with_default_style_auto_sized(Point::new(10, 386), "Exit", false); 37 button.draw_init(&mut draw_target); 38 exit_button.draw_init(&mut draw_target); 39 draw_target.refresh(false, RefreshBlockMode::BlockAcknowledge); 40 41 let mut counter = 0; 42 43 loop { 44 while let Some(ev) = next_event() { 45 if exit_button.tick(&mut draw_target, ev).clicked { 46 return; 47 } 48 49 let mut needs_refresh = false; 50 51 let response = button.tick(&mut draw_target, ev); 52 if response.clicked { 53 draw_target.clear(BinaryColor::Off).unwrap(); 54 button.draw_init(&mut draw_target); 55 exit_button.draw_init(&mut draw_target); 56 57 counter += 1; 58 let mut s = String::<16>::new(); 59 write!(s, "{counter}").unwrap(); 60 Text::new(&s, Point::new(10, 80), DEFAULT_TEXT_STYLE) 61 .draw(&mut draw_target) 62 .unwrap(); 63 needs_refresh = true; 64 } 65 needs_refresh |= response.needs_refresh; 66 67 if needs_refresh { 68 draw_target.refresh(true, RefreshBlockMode::NonBlocking); 69 } 70 } 71 72 if !has_event() { 73 unsafe { asm!("wfe", "wfe") }; 74 } 75 } 76}