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::input::{has_event, next_event, set_touch_enabled}; 18use eepy_sys::{eepy_app, kv_store}; 19 20fn load_counter() -> u32 { 21 let mut buf = [0u8; size_of::<i32>()]; 22 match kv_store::get(b"counter", &mut buf) { 23 Ok(_) => u32::from_ne_bytes(buf), 24 Err(_) => 0, 25 } 26} 27 28fn save_counter(counter: u32) { 29 let _ = kv_store::put(b"counter", &counter.to_ne_bytes()); 30} 31 32fn render_counter(draw_target: &mut EpdDrawTarget, counter: u32) { 33 let mut s = String::<16>::new(); 34 write!(s, "{counter}").unwrap(); 35 Text::new(&s, Point::new(10, 80), DEFAULT_TEXT_STYLE) 36 .draw(draw_target) 37 .unwrap(); 38} 39 40#[eepy_app(name = "ExampleApp")] 41fn main() { 42 set_touch_enabled(true); 43 44 let mut draw_target = EpdDrawTarget::default(); 45 46 let text = Text::new("Example App", Point::new(10, 20), DEFAULT_TEXT_STYLE); 47 let mut button = Button::with_default_style_auto_sized(Point::new(10, 40), "Click me", true); 48 let mut exit_button = Button::with_default_style_auto_sized(Point::new(10, 386), "Exit", false); 49 50 let mut counter = load_counter(); 51 52 text.draw(&mut draw_target).unwrap(); 53 button.draw_init(&mut draw_target); 54 exit_button.draw_init(&mut draw_target); 55 render_counter(&mut draw_target, counter); 56 draw_target.refresh(false); 57 58 59 loop { 60 while let Some(ev) = next_event() { 61 if exit_button.tick(&mut draw_target, ev).clicked { 62 save_counter(counter); 63 return; 64 } 65 66 let mut needs_refresh = false; 67 68 let response = button.tick(&mut draw_target, ev); 69 if response.clicked { 70 draw_target.clear(BinaryColor::Off).unwrap(); 71 text.draw(&mut draw_target).unwrap(); 72 button.draw_init(&mut draw_target); 73 exit_button.draw_init(&mut draw_target); 74 75 counter += 1; 76 render_counter(&mut draw_target, counter); 77 needs_refresh = true; 78 } 79 needs_refresh |= response.needs_refresh; 80 81 if needs_refresh { 82 draw_target.maybe_refresh(true); 83 } 84 } 85 86 if !has_event() { 87 unsafe { asm!("wfe", "wfe") }; 88 } 89 } 90}