···11#[repr(usize)]
22-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
22+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
33#[cfg_attr(feature = "defmt", derive(defmt::Format))]
44pub enum CsSyscall {
55 Acquire = 0,
66 Release = 1,
77-}
88-99-impl TryFrom<usize> for CsSyscall {
1010- type Error = ();
1111-1212- fn try_from(value: usize) -> Result<Self, Self::Error> {
1313- match value {
1414- x if x == CsSyscall::Acquire as usize => Ok(CsSyscall::Acquire),
1515- x if x == CsSyscall::Release as usize => Ok(CsSyscall::Release),
1616- _ => Err(()),
1717- }
1818- }
197}
+1-15
eepy-sys/src/flash.rs
···22use crate::syscall::SyscallNumber;
3344#[repr(usize)]
55-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
55+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
66#[cfg_attr(feature = "defmt", derive(defmt::Format))]
77pub enum FlashSyscall {
88 Erase = 0,
99 Program = 1,
1010 EraseAndProgram = 2,
1111 InvalidateCache = 3,
1212-}
1313-1414-impl TryFrom<usize> for FlashSyscall {
1515- type Error = ();
1616-1717- fn try_from(value: usize) -> Result<Self, Self::Error> {
1818- match value {
1919- x if x == FlashSyscall::Erase as usize => Ok(FlashSyscall::Erase),
2020- x if x == FlashSyscall::Program as usize => Ok(FlashSyscall::Program),
2121- x if x == FlashSyscall::EraseAndProgram as usize => Ok(FlashSyscall::EraseAndProgram),
2222- x if x == FlashSyscall::InvalidateCache as usize => Ok(FlashSyscall::InvalidateCache),
2323- _ => Err(()),
2424- }
2525- }
2612}
27132814pub unsafe fn erase(start_addr: u32, len: u32) {
+5-30
eepy-sys/src/image.rs
···33use crate::syscall::SyscallNumber;
4455#[repr(usize)]
66-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
66+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
77#[cfg_attr(feature = "defmt", derive(defmt::Format))]
88pub enum ImageSyscall {
99 WriteImage = 0,
1010 Refresh = 1,
1111}
12121313-impl TryFrom<usize> for ImageSyscall {
1414- type Error = ();
1515-1616- fn try_from(value: usize) -> Result<Self, Self::Error> {
1717- match value {
1818- x if x == ImageSyscall::WriteImage as usize => Ok(ImageSyscall::WriteImage),
1919- x if x == ImageSyscall::Refresh as usize => Ok(ImageSyscall::Refresh),
2020- _ => Err(()),
2121- }
2222- }
2323-}
2424-2513#[repr(usize)]
2626-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
1414+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
2715#[cfg_attr(feature = "defmt", derive(defmt::Format))]
2816pub enum RefreshBlockMode {
2929- NonBlocking,
3030- BlockAcknowledge,
3131- BlockFinish,
3232-}
3333-3434-impl TryFrom<usize> for RefreshBlockMode {
3535- type Error = ();
3636-3737- fn try_from(value: usize) -> Result<Self, Self::Error> {
3838- match value {
3939- x if x == RefreshBlockMode::NonBlocking as usize => Ok(RefreshBlockMode::NonBlocking),
4040- x if x == RefreshBlockMode::BlockAcknowledge as usize => Ok(RefreshBlockMode::BlockAcknowledge),
4141- x if x == RefreshBlockMode::BlockFinish as usize => Ok(RefreshBlockMode::BlockFinish),
4242- _ => Err(()),
4343- }
4444- }
1717+ NonBlocking = 0,
1818+ BlockAcknowledge = 1,
1919+ BlockFinish = 2,
4520}
46214722pub fn write_image(image: &[u8; IMAGE_BYTES]) {
+1-14
eepy-sys/src/input.rs
···44use crate::syscall::SyscallNumber;
5566#[repr(usize)]
77-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
77+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
88#[cfg_attr(feature = "defmt", derive(defmt::Format))]
99pub enum InputSyscall {
1010 NextEvent = 0,
1111 SetTouchEnabled = 1,
1212 HasEvent = 2,
1313-}
1414-1515-impl TryFrom<usize> for InputSyscall {
1616- type Error = ();
1717-1818- fn try_from(value: usize) -> Result<Self, Self::Error> {
1919- match value {
2020- x if x == InputSyscall::NextEvent as usize => Ok(InputSyscall::NextEvent),
2121- x if x == InputSyscall::SetTouchEnabled as usize => Ok(InputSyscall::SetTouchEnabled),
2222- x if x == InputSyscall::HasEvent as usize => Ok(InputSyscall::HasEvent),
2323- _ => Err(()),
2424- }
2525- }
2613}
27142815pub fn next_event() -> Option<Event> {
+2-29
eepy-sys/src/misc.rs
···66use once_cell::sync::OnceCell;
7788#[repr(usize)]
99-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
99+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
1010#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1111pub enum MiscSyscall {
1212 GetSerial = 0,
1313 LogMessage = 1,
1414}
15151616-impl TryFrom<usize> for MiscSyscall {
1717- type Error = ();
1818-1919- fn try_from(value: usize) -> Result<Self, Self::Error> {
2020- match value {
2121- x if x == MiscSyscall::GetSerial as usize => Ok(MiscSyscall::GetSerial),
2222- x if x == MiscSyscall::LogMessage as usize => Ok(MiscSyscall::LogMessage),
2323- _ => Err(()),
2424- }
2525- }
2626-}
2727-2816#[repr(usize)]
2929-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
1717+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
3018#[cfg_attr(feature = "defmt", derive(defmt::Format))]
3119pub enum LogLevel {
3220 Trace = 0,
···3422 Info = 2,
3523 Warn = 3,
3624 Error = 4,
3737-}
3838-3939-impl TryFrom<usize> for LogLevel {
4040- type Error = ();
4141-4242- fn try_from(value: usize) -> Result<Self, ()> {
4343- match value {
4444- x if x == LogLevel::Trace as usize => Ok(LogLevel::Trace),
4545- x if x == LogLevel::Info as usize => Ok(LogLevel::Info),
4646- x if x == LogLevel::Debug as usize => Ok(LogLevel::Debug),
4747- x if x == LogLevel::Warn as usize => Ok(LogLevel::Warn),
4848- x if x == LogLevel::Error as usize => Ok(LogLevel::Error),
4949- _ => Err(()),
5050- }
5151- }
5225}
53265427pub fn get_serial_raw() -> [u8; 16] {
+2-19
eepy-sys/src/syscall.rs
···11#[repr(u8)]
22-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
22+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
33#[cfg_attr(feature = "defmt", derive(defmt::Format))]
44pub enum SyscallNumber {
55 Misc = 0,
···99 Exec = 4,
1010 CriticalSection = 5,
1111 Flash = 6,
1212-}
1313-1414-impl TryFrom<u8> for SyscallNumber {
1515- type Error = ();
1616-1717- fn try_from(value: u8) -> Result<Self, Self::Error> {
1818- match value {
1919- x if x == SyscallNumber::Misc as u8 => Ok(SyscallNumber::Misc),
2020- x if x == SyscallNumber::Image as u8 => Ok(SyscallNumber::Image),
2121- x if x == SyscallNumber::Input as u8 => Ok(SyscallNumber::Input),
2222- x if x == SyscallNumber::Usb as u8 => Ok(SyscallNumber::Usb),
2323- x if x == SyscallNumber::Exec as u8 => Ok(SyscallNumber::Exec),
2424- x if x == SyscallNumber::CriticalSection as u8 => Ok(SyscallNumber::CriticalSection),
2525- x if x == SyscallNumber::Flash as u8 => Ok(SyscallNumber::Flash),
2626- _ => Err(()),
2727- }
2828- }
2912}
30133114/// Perform a raw system call.
···6649#[macro_export]
6750#[cfg(not(all(target_os = "none", target_arch = "arm")))]
6851macro_rules! syscall {
6969- ( $( $_foo:tt )* ) => { panic!("Cannot use eepyOS syscalls on non-eepyOS platforms") };
5252+ ( $( $_foo:tt )* ) => { compile_error!("Cannot use eepyOS syscalls on non-eepyOS platforms") };
7053}
+1-26
eepy-sys/src/usb.rs
···77use crate::syscall::SyscallNumber;
8899#[repr(usize)]
1010-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
1010+#[derive(Copy, Clone, Debug, Eq, PartialEq, strum::FromRepr)]
1111#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1212pub enum UsbSyscall {
1313 UsbRet = 0,
···2424 SetStalled = 11,
2525 IsStalled = 12,
2626 Poll = 13,
2727-}
2828-2929-impl TryFrom<usize> for UsbSyscall {
3030- type Error = ();
3131-3232- fn try_from(value: usize) -> Result<Self, Self::Error> {
3333- match value {
3434- x if x == UsbSyscall::UsbRet as usize => Ok(UsbSyscall::UsbRet),
3535- x if x == UsbSyscall::SetHandler as usize => Ok(UsbSyscall::SetHandler),
3636- x if x == UsbSyscall::ClearHandler as usize => Ok(UsbSyscall::ClearHandler),
3737- x if x == UsbSyscall::Init as usize => Ok(UsbSyscall::Init),
3838- x if x == UsbSyscall::Uninit as usize => Ok(UsbSyscall::Uninit),
3939- x if x == UsbSyscall::AllocEp as usize => Ok(UsbSyscall::AllocEp),
4040- x if x == UsbSyscall::Enable as usize => Ok(UsbSyscall::Enable),
4141- x if x == UsbSyscall::Reset as usize => Ok(UsbSyscall::Reset),
4242- x if x == UsbSyscall::SetDeviceAddr as usize => Ok(UsbSyscall::SetDeviceAddr),
4343- x if x == UsbSyscall::Write as usize => Ok(UsbSyscall::Write),
4444- x if x == UsbSyscall::Read as usize => Ok(UsbSyscall::Read),
4545- x if x == UsbSyscall::SetStalled as usize => Ok(UsbSyscall::SetStalled),
4646- x if x == UsbSyscall::IsStalled as usize => Ok(UsbSyscall::IsStalled),
4747- x if x == UsbSyscall::Poll as usize => Ok(UsbSyscall::Poll),
4848-4949- _ => Err(()),
5050- }
5151- }
5227}
53285429pub fn set_handler(f: extern "C" fn()) {