//! ABI for μITRON derivatives pub type int_t = crate::os::raw::c_int; pub type uint_t = crate::os::raw::c_uint; pub type bool_t = int_t; /// Kernel object ID pub type ID = int_t; /// The current task. pub const TSK_SELF: ID = 0; /// Relative time pub type RELTIM = u32; /// Timeout (a valid `RELTIM` value or `TMO_FEVR`) pub type TMO = u32; /// The infinite timeout value pub const TMO_FEVR: TMO = TMO::MAX; /// The maximum valid value of `RELTIM` pub const TMAX_RELTIM: RELTIM = 4_000_000_000; /// System time pub type SYSTIM = u64; /// Error code type pub type ER = int_t; /// Error code type, `ID` on success pub type ER_ID = int_t; /// Service call operational mode pub type MODE = uint_t; /// OR waiting condition for an eventflag pub const TWF_ORW: MODE = 0x01; /// Object attributes pub type ATR = uint_t; /// FIFO wait order pub const TA_FIFO: ATR = 0; /// Only one task is allowed to be in the waiting state for the eventflag pub const TA_WSGL: ATR = 0; /// The eventflag’s bit pattern is cleared when a task is released from the /// waiting state for that eventflag. pub const TA_CLR: ATR = 0x04; /// Bit pattern of an eventflag pub type FLGPTN = uint_t; /// Task or interrupt priority pub type PRI = int_t; /// The special value of `PRI` representing the current task's priority. pub const TPRI_SELF: PRI = 0; /// Use the priority inheritance protocol #[cfg(target_os = "solid_asp3")] pub const TA_INHERIT: ATR = 0x02; /// Activate the task on creation pub const TA_ACT: ATR = 0x01; /// The maximum count of a semaphore pub const TMAX_MAXSEM: uint_t = uint_t::MAX; /// Callback parameter pub type EXINF = isize; /// Task entrypoint pub type TASK = Option; // Error codes pub const E_OK: ER = 0; pub const E_SYS: ER = -5; pub const E_NOSPT: ER = -9; pub const E_RSFN: ER = -10; pub const E_RSATR: ER = -11; pub const E_PAR: ER = -17; pub const E_ID: ER = -18; pub const E_CTX: ER = -25; pub const E_MACV: ER = -26; pub const E_OACV: ER = -27; pub const E_ILUSE: ER = -28; pub const E_NOMEM: ER = -33; pub const E_NOID: ER = -34; pub const E_NORES: ER = -35; pub const E_OBJ: ER = -41; pub const E_NOEXS: ER = -42; pub const E_QOVR: ER = -43; pub const E_RLWAI: ER = -49; pub const E_TMOUT: ER = -50; pub const E_DLT: ER = -51; pub const E_CLS: ER = -52; pub const E_RASTER: ER = -53; pub const E_WBLK: ER = -57; pub const E_BOVR: ER = -58; pub const E_COMM: ER = -65; #[derive(Clone, Copy)] #[repr(C)] pub struct T_CSEM { pub sematr: ATR, pub isemcnt: uint_t, pub maxsem: uint_t, } #[derive(Clone, Copy)] #[repr(C)] pub struct T_CFLG { pub flgatr: ATR, pub iflgptn: FLGPTN, } #[derive(Clone, Copy)] #[repr(C)] pub struct T_CMTX { pub mtxatr: ATR, pub ceilpri: PRI, } #[derive(Clone, Copy)] #[repr(C)] pub struct T_CTSK { pub tskatr: ATR, pub exinf: EXINF, pub task: TASK, pub itskpri: PRI, pub stksz: usize, pub stk: *mut u8, } extern "C" { #[link_name = "__asp3_acre_tsk"] pub fn acre_tsk(pk_ctsk: *const T_CTSK) -> ER_ID; #[link_name = "__asp3_get_tid"] pub fn get_tid(p_tskid: *mut ID) -> ER; #[link_name = "__asp3_dly_tsk"] pub fn dly_tsk(dlytim: RELTIM) -> ER; #[link_name = "__asp3_ter_tsk"] pub fn ter_tsk(tskid: ID) -> ER; #[link_name = "__asp3_del_tsk"] pub fn del_tsk(tskid: ID) -> ER; #[link_name = "__asp3_get_pri"] pub fn get_pri(tskid: ID, p_tskpri: *mut PRI) -> ER; #[link_name = "__asp3_rot_rdq"] pub fn rot_rdq(tskpri: PRI) -> ER; #[link_name = "__asp3_slp_tsk"] pub fn slp_tsk() -> ER; #[link_name = "__asp3_tslp_tsk"] pub fn tslp_tsk(tmout: TMO) -> ER; #[link_name = "__asp3_wup_tsk"] pub fn wup_tsk(tskid: ID) -> ER; #[link_name = "__asp3_unl_cpu"] pub fn unl_cpu() -> ER; #[link_name = "__asp3_dis_dsp"] pub fn dis_dsp() -> ER; #[link_name = "__asp3_ena_dsp"] pub fn ena_dsp() -> ER; #[link_name = "__asp3_sns_dsp"] pub fn sns_dsp() -> bool_t; #[link_name = "__asp3_get_tim"] pub fn get_tim(p_systim: *mut SYSTIM) -> ER; #[link_name = "__asp3_acre_flg"] pub fn acre_flg(pk_cflg: *const T_CFLG) -> ER_ID; #[link_name = "__asp3_del_flg"] pub fn del_flg(flgid: ID) -> ER; #[link_name = "__asp3_set_flg"] pub fn set_flg(flgid: ID, setptn: FLGPTN) -> ER; #[link_name = "__asp3_clr_flg"] pub fn clr_flg(flgid: ID, clrptn: FLGPTN) -> ER; #[link_name = "__asp3_wai_flg"] pub fn wai_flg(flgid: ID, waiptn: FLGPTN, wfmode: MODE, p_flgptn: *mut FLGPTN) -> ER; #[link_name = "__asp3_twai_flg"] pub fn twai_flg( flgid: ID, waiptn: FLGPTN, wfmode: MODE, p_flgptn: *mut FLGPTN, tmout: TMO, ) -> ER; #[link_name = "__asp3_acre_mtx"] pub fn acre_mtx(pk_cmtx: *const T_CMTX) -> ER_ID; #[link_name = "__asp3_del_mtx"] pub fn del_mtx(tskid: ID) -> ER; #[link_name = "__asp3_loc_mtx"] pub fn loc_mtx(mtxid: ID) -> ER; #[link_name = "__asp3_ploc_mtx"] pub fn ploc_mtx(mtxid: ID) -> ER; #[link_name = "__asp3_tloc_mtx"] pub fn tloc_mtx(mtxid: ID, tmout: TMO) -> ER; #[link_name = "__asp3_unl_mtx"] pub fn unl_mtx(mtxid: ID) -> ER; pub fn exd_tsk() -> ER; }