//! 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<unsafe extern "C" fn(EXINF)>;

// 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;
}
