abi_definitions/task/
thread.rs1use core::ffi::c_int;
2use core::ptr::null_mut;
3use core::{ffi::c_void, time::Duration};
4
5use abi_context as context;
6
7pub type XilaThreadIdentifier = usize;
8
9#[unsafe(no_mangle)]
10pub extern "C" fn xila_get_current_thread_identifier() -> usize {
11 context::get_instance()
12 .get_current_task_identifier()
13 .into_inner() as usize
14}
15
16#[unsafe(no_mangle)]
17pub extern "C" fn xila_thread_sleep(duration: u64) {
18 if let Some(task) = context::get_instance().try_get_current_task_identifier() {
19 context::get_instance().request_sleep(task, Duration::from_millis(duration));
20 }
21}
22
23#[unsafe(no_mangle)]
24pub extern "C" fn xila_thread_sleep_exact(duration: u32) {
25 xila_thread_sleep(duration as u64);
26}
27
28#[unsafe(no_mangle)]
29pub extern "C" fn xila_thread_join(_thread: usize) -> u32 {
30 todo!()
31}
32
33#[unsafe(no_mangle)]
34pub extern "C" fn xila_thread_detach(_thread: usize) -> u32 {
35 todo!()
36}
37
38#[unsafe(no_mangle)]
39pub extern "C" fn xila_thread_exit() {
40 unreachable!("Thread exit is not supported in this environment");
41}
42
43#[unsafe(no_mangle)]
44pub extern "C" fn xila_thread_get_stack_boundary() -> *mut u8 {
45 null_mut()
46}
47
48#[unsafe(no_mangle)]
49pub extern "C" fn xila_thread_create(
50 _function: extern "C" fn(*mut c_void) -> *mut c_void,
51 _argument: *mut u8,
52 _stack_size: usize,
53 _thread_identifier: *mut XilaThreadIdentifier,
54) -> u32 {
55 todo!()
56}
57
58#[unsafe(no_mangle)]
59pub extern "C" fn xila_thread_begin_blocking_operation() {}
60
61#[unsafe(no_mangle)]
62pub extern "C" fn xila_thread_end_blocking_operation() {}
63
64#[unsafe(no_mangle)]
65pub extern "C" fn xila_thread_wake_up(_thread: XilaThreadIdentifier) -> u32 {
66 todo!()
67}
68
69#[unsafe(no_mangle)]
70pub extern "C" fn xila_thread_yield() -> c_int {
71 xila_thread_sleep(0);
72 0
73}