firmware for my Touchscreen E-Paper Input Module for Framework Laptop 16
1use crate::syscall;
2use crate::syscall::SyscallNumber;
3
4#[repr(usize)]
5#[derive(Copy, Clone, Debug, Eq, PartialEq)]
6#[cfg_attr(feature = "defmt", derive(defmt::Format))]
7pub enum FlashSyscall {
8 Erase = 0,
9 Program = 1,
10 EraseAndProgram = 2,
11 InvalidateCache = 3,
12}
13
14impl TryFrom<usize> for FlashSyscall {
15 type Error = ();
16
17 fn try_from(value: usize) -> Result<Self, Self::Error> {
18 match value {
19 x if x == FlashSyscall::Erase as usize => Ok(FlashSyscall::Erase),
20 x if x == FlashSyscall::Program as usize => Ok(FlashSyscall::Program),
21 x if x == FlashSyscall::EraseAndProgram as usize => Ok(FlashSyscall::EraseAndProgram),
22 x if x == FlashSyscall::InvalidateCache as usize => Ok(FlashSyscall::InvalidateCache),
23 _ => Err(()),
24 }
25 }
26}
27
28pub unsafe fn erase(start_addr: u32, len: u32) {
29 syscall!(
30 SyscallNumber::Flash,
31 in FlashSyscall::Erase,
32 in start_addr,
33 in len,
34 );
35}
36
37pub unsafe fn program(start_addr: u32, data: &[u8]) {
38 syscall!(
39 SyscallNumber::Flash,
40 in FlashSyscall::Program,
41 in start_addr,
42 in data.len(),
43 in data.as_ptr(),
44 );
45}
46
47pub unsafe fn erase_and_program(start_addr: u32, data: &[u8]) {
48 syscall!(
49 SyscallNumber::Flash,
50 in FlashSyscall::EraseAndProgram,
51 in start_addr,
52 in data.len(),
53 in data.as_ptr(),
54 );
55}
56
57pub unsafe fn invalidate_cache() {
58 syscall!(
59 SyscallNumber::Flash,
60 in FlashSyscall::InvalidateCache,
61 );
62}