firmware for my Touchscreen E-Paper Input Module for Framework Laptop 16
1use tp370pgh01::IMAGE_BYTES;
2use crate::syscall;
3use crate::syscall::SyscallNumber;
4
5#[repr(usize)]
6#[derive(Copy, Clone, Debug, Eq, PartialEq)]
7#[cfg_attr(feature = "defmt", derive(defmt::Format))]
8pub enum ImageSyscall {
9 WriteImage = 0,
10 Refresh = 1,
11}
12
13impl TryFrom<usize> for ImageSyscall {
14 type Error = ();
15
16 fn try_from(value: usize) -> Result<Self, Self::Error> {
17 match value {
18 x if x == ImageSyscall::WriteImage as usize => Ok(ImageSyscall::WriteImage),
19 x if x == ImageSyscall::Refresh as usize => Ok(ImageSyscall::Refresh),
20 _ => Err(()),
21 }
22 }
23}
24
25#[repr(usize)]
26#[derive(Copy, Clone, Debug, Eq, PartialEq)]
27#[cfg_attr(feature = "defmt", derive(defmt::Format))]
28pub enum RefreshBlockMode {
29 NonBlocking,
30 BlockAcknowledge,
31 BlockFinish,
32}
33
34impl TryFrom<usize> for RefreshBlockMode {
35 type Error = ();
36
37 fn try_from(value: usize) -> Result<Self, Self::Error> {
38 match value {
39 x if x == RefreshBlockMode::NonBlocking as usize => Ok(RefreshBlockMode::NonBlocking),
40 x if x == RefreshBlockMode::BlockAcknowledge as usize => Ok(RefreshBlockMode::BlockAcknowledge),
41 x if x == RefreshBlockMode::BlockFinish as usize => Ok(RefreshBlockMode::BlockFinish),
42 _ => Err(()),
43 }
44 }
45}
46
47pub fn write_image(image: &[u8; IMAGE_BYTES]) {
48 unsafe {
49 syscall!(
50 SyscallNumber::Image,
51 in ImageSyscall::WriteImage,
52 in &raw const *image,
53 );
54 }
55}
56
57pub fn refresh(fast_refresh: bool, refresh_block_mode: RefreshBlockMode) {
58 unsafe {
59 syscall!(
60 SyscallNumber::Image,
61 in ImageSyscall::Refresh,
62 in fast_refresh,
63 in refresh_block_mode,
64 );
65 }
66}