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.

at main 2.7 kB View raw
1#![no_std] 2#![no_main] 3 4extern crate panic_halt; 5 6use core::fmt::Write; 7use embedded_graphics::draw_target::DrawTarget; 8use embedded_graphics::Drawable; 9use embedded_graphics::pixelcolor::BinaryColor; 10use embedded_graphics::prelude::Point; 11use embedded_graphics::text::Text; 12use heapless::String; 13use eepy_gui::draw_target::EpdDrawTarget; 14use eepy_gui::element::button::Button; 15use eepy_gui::element::{Gui, DEFAULT_TEXT_STYLE}; 16use eepy_sys::input::{eep, next_event, set_touch_enabled}; 17use eepy_sys::{eepy_app, kv_store}; 18 19fn load_counter() -> u32 { 20 let mut buf = [0u8; size_of::<i32>()]; 21 match kv_store::get(b"counter", &mut buf) { 22 Ok(_) => u32::from_ne_bytes(buf), 23 Err(_) => 0, 24 } 25} 26 27fn save_counter(counter: u32) { 28 let _ = kv_store::put(b"counter", &counter.to_ne_bytes()); 29} 30 31fn render_counter(draw_target: &mut EpdDrawTarget, counter: u32) { 32 let mut s = String::<16>::new(); 33 write!(s, "{counter}").unwrap(); 34 Text::new(&s, Point::new(10, 80), DEFAULT_TEXT_STYLE) 35 .draw(draw_target) 36 .unwrap(); 37} 38 39#[eepy_app(name = "ExampleApp")] 40fn main() { 41 set_touch_enabled(true); 42 43 let mut draw_target = EpdDrawTarget::default(); 44 45 let text = Text::new("Example App", Point::new(10, 20), DEFAULT_TEXT_STYLE); 46 let mut button = Button::with_default_style_auto_sized(Point::new(10, 40), "Click me", true); 47 let mut exit_button = Button::with_default_style_auto_sized(Point::new(10, 386), "Exit", false); 48 49 let mut counter = load_counter(); 50 51 text.draw(&mut draw_target).unwrap(); 52 button.draw_init(&mut draw_target); 53 exit_button.draw_init(&mut draw_target); 54 render_counter(&mut draw_target, counter); 55 draw_target.refresh(false); 56 57 58 loop { 59 while let Some(ev) = next_event() { 60 let mut needs_refresh = false; 61 62 let exit_res = exit_button.tick(&mut draw_target, ev); 63 if exit_res.clicked { 64 save_counter(counter); 65 return; 66 } else if exit_res.needs_refresh { 67 draw_target.refresh(true); 68 } 69 70 let response = button.tick(&mut draw_target, ev); 71 if response.clicked { 72 draw_target.clear(BinaryColor::Off).unwrap(); 73 text.draw(&mut draw_target).unwrap(); 74 button.draw_init(&mut draw_target); 75 exit_button.draw_init(&mut draw_target); 76 77 counter += 1; 78 render_counter(&mut draw_target, counter); 79 needs_refresh = true; 80 } 81 needs_refresh |= response.needs_refresh; 82 83 if needs_refresh { 84 draw_target.maybe_refresh(true); 85 } 86 } 87 88 eep(); 89 } 90}