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.

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}