From 8bba968d021a31f26d266dfb2e51453d19284532 Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Mon, 17 Nov 2025 22:41:04 +0100 Subject: [PATCH] panic-stubbing FreeRTOS calls for tests --- mission_rust/src/fsrc/osal/ffi.rs | 141 ++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/mission_rust/src/fsrc/osal/ffi.rs b/mission_rust/src/fsrc/osal/ffi.rs index 3c54ef4..1182aa1 100644 --- a/mission_rust/src/fsrc/osal/ffi.rs +++ b/mission_rust/src/fsrc/osal/ffi.rs @@ -23,6 +23,9 @@ impl Sizes { pub const TASK_MINIMAL_STACK_SIZE: usize = 10240; } + + +#[cfg(not(test))] extern "C" { //////////////////////// /// FreeRTOS API @@ -101,6 +104,144 @@ extern "C" { //int hw_device_open(const char * path, size_t path_len); pub fn hw_device_open(path: *const core::ffi::c_char, path_len: core::ffi::c_size_t) -> core::ffi::c_int; } + +#[cfg(test)] +pub use test_api::*; + +#[cfg(test)] +mod test_api{ + use core::ptr; + + use super::*; + + //////////////////////// + /// FreeRTOS API + /// shimmed in mission/freeRTOS_rust_helper.c + //void *create_task_static(TaskFunction_t taskFunction, void *parameter, + // char *task_data, uint32_t task_data_len, char *stack, uint32_t stack_size) + pub fn freertos_create_task_static( + taskFunction: TaskFunction, + parameter: *const core::ffi::c_void, + priority: u32, + task_data: *mut core::ffi::c_char, + task_data_len: u32, + stack: *mut core::ffi::c_char, + stack_size: u32, + ) -> *const core::ffi::c_void{ + panic!("freeRTOS APIs are not implemented for tests"); + ptr::null() + } + + // pub fn stop_it(); + + pub fn freertos_task_suspend(handle: *const core::ffi::c_void){ + panic!("freeRTOS APIs are not implemented for tests"); + } + + pub fn freertos_task_delete(handle: *const core::ffi::c_void) -> !{ + panic!("freeRTOS APIs are not implemented for tests"); + loop{} + } + + pub fn freertos_task_storage_set( + handle: *const core::ffi::c_void, + data: *const core::ffi::c_void, + ){ + panic!("freeRTOS APIs are not implemented for tests"); + } + + pub fn freertos_task_storage_get(handle: *const core::ffi::c_void) -> *const core::ffi::c_void{ + panic!("freeRTOS APIs are not implemented for tests"); + ptr::null() + } + + pub fn freertos_task_delay(milliseconds: u32){ + panic!("freeRTOS APIs are not implemented for tests"); + } + + pub fn freertos_task_stack_watermark() -> u32{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + + pub fn freertos_task_current() -> *const core::ffi::c_void{ + panic!("freeRTOS APIs are not implemented for tests"); + ptr::null() + } + + // TODO this should be passed by compile time value + pub fn freertos_task_priority_max() -> u32{ + panic!("freeRTOS APIs are not implemented for tests"); + u32::MAX + } + + //void *freertos_queue_create_static(uint32_t depth, uint32_t element_size, + // char *queue_data, uint32_t queue_data_len, + // uint8_t *queue, uint32_t queue_len) { + pub fn freertos_queue_create_static( + depth: u32, + element_size: u32, + queue_data: *mut core::ffi::c_char, + queue_data_len: u32, + queue: *mut u8, + ) -> *const core::ffi::c_void{ + panic!("freeRTOS APIs are not implemented for tests"); + ptr::null() + } + + pub fn freertos_queue_receive( + queue: *const core::ffi::c_void, + message: *const core::ffi::c_void, + ) -> u8{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + pub fn freertos_queue_send( + queue: *const core::ffi::c_void, + message: *const core::ffi::c_void, + ) -> u8{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + + pub fn freertos_mutex_create_static( + mutex_data: *const core::ffi::c_char, + mutex_data_len: u32, + ) -> *const core::ffi::c_void{ + panic!("freeRTOS APIs are not implemented for tests"); + ptr::null() + } + + pub fn freertos_mutex_take(mutex: *const core::ffi::c_void) -> u8{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + pub fn freertos_mutex_give(mutex: *const core::ffi::c_void) -> u8{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + + //uint8_t freertos_simple_once(uint8_t *once_data) + pub fn freertos_simple_once(once_data: *const u8) -> u8{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + + //int freertos_get_sys_error() + pub fn freertos_get_sys_error() -> core::ffi::c_int{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } + + //////////////////////// + /// Harware Abstraction API in common/include/interfaces.h + /// Used for access to peripherals to make switching between linux and embedded easier + //int hw_device_open(const char * path, size_t path_len); + pub fn hw_device_open(path: *const core::ffi::c_char, path_len: core::ffi::c_size_t) -> core::ffi::c_int{ + panic!("freeRTOS APIs are not implemented for tests"); + 1 + } +} //////////////////////// /// libc API (read/write/etc) #[cfg(target_env = "gnu")]