firmware for my Touchscreen E-Paper Input Module for Framework Laptop 16
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::{ProgramFunctionTable, RefreshBlockMode, SafeOption};
17use eepy_sys::header::ProgramSlotHeader;
18
19extern "C" {
20 static _end: *const u8;
21}
22
23#[link_section = ".header"]
24#[used]
25static HEADER: ProgramSlotHeader = ProgramSlotHeader::partial(
26 "Example TESTING FOO BAR BAZ",
27 env!("CARGO_PKG_VERSION"),
28 entry,
29);
30
31#[used]
32static mut FOO: u32 = 10;
33
34#[no_mangle]
35pub extern "C" fn entry(pft: &ProgramFunctionTable) {
36
37 unsafe { (pft.set_touch_enabled)(true) };
38
39 let mut draw_target = EpdDrawTarget::new(pft.write_image, pft.refresh);
40
41 let mut button = Button::with_default_style_auto_sized(Point::new(10, 40), "Click me", true);
42 button.draw_init(&mut draw_target);
43 draw_target.refresh(false, RefreshBlockMode::BlockAcknowledge);
44
45 let mut counter = 0;
46
47 loop {
48 while let SafeOption::Some(ev) = (pft.next_event)() {
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
56 counter += 1;
57 let mut s = String::<16>::new();
58 write!(s, "{counter}").unwrap();
59 Text::new(&s, Point::new(10, 80), DEFAULT_TEXT_STYLE)
60 .draw(&mut draw_target)
61 .unwrap();
62 needs_refresh = true;
63 }
64 needs_refresh |= response.needs_refresh;
65
66 if needs_refresh {
67 draw_target.refresh(true, RefreshBlockMode::NonBlocking);
68 }
69 }
70 }
71}