use core::ffi::*;
use crate::*;
pub type queue_t = *mut c_void;
pub type sem_t = *mut c_void;
pub type v5_device_e_t = u32;
pub const E_DEVICE_NONE: v5_device_e_t = 0;
pub const E_DEVICE_MOTOR: v5_device_e_t = 2;
pub const E_DEVICE_ROTATION: v5_device_e_t = 4;
pub const E_DEVICE_IMU: v5_device_e_t = 6;
pub const E_DEVICE_DISTANCE: v5_device_e_t = 7;
pub const E_DEVICE_RADIO: v5_device_e_t = 8;
pub const E_DEVICE_VISION: v5_device_e_t = 11;
pub const E_DEVICE_ADI: v5_device_e_t = 12;
pub const E_DEVICE_OPTICAL: v5_device_e_t = 16;
pub const E_DEVICE_GPS: v5_device_e_t = 20;
pub const E_DEVICE_SERIAL: v5_device_e_t = 129;
#[deprecated(note = "use E_DEVICE_SERIAL instead")]
pub const E_DEVICE_GENERIC: v5_device_e_t = E_DEVICE_SERIAL;
pub const E_DEVICE_UNDEFINED: v5_device_e_t = 255;
pub const SERCTL_ACTIVATE: u32 = 10;
pub const SERCTL_DEACTIVATE: u32 = 11;
pub const SERCTL_BLKWRITE: u32 = 12;
pub const SERCTL_NOBLKWRITE: u32 = 13;
pub const SERCTL_ENABLE_COBS: u32 = 14;
pub const SERCTL_DISABLE_COBS: u32 = 15;
pub const DEVCTL_FIONREAD: u32 = 16;
pub const DEVCTL_FIONWRITE: u32 = 18;
pub const DECTRL_SET_BAUDRATE: u32 = 17;
extern "C" {
pub fn task_abort_delay(task: task_t) -> bool;
pub fn task_notify_when_deleting(
target_task: task_t,
task_to_notify: task_t,
value: u32,
notify_action: notify_action_e_t,
);
pub fn mutex_recursive_create() -> mutex_t;
pub fn mutex_recursive_take(mutex: mutex_t, timeout: u32) -> bool;
pub fn mutex_recursive_give(mutex: mutex_t) -> bool;
pub fn mutex_get_owner(mutex: mutex_t) -> task_t;
pub fn sem_create(max_count: u32, init_count: u32) -> sem_t;
pub fn sem_delete(sem: sem_t);
pub fn sem_binary_create() -> sem_t;
pub fn sem_wait(sem: sem_t, timeout: u32) -> bool;
pub fn sem_post(sem: sem_t) -> bool;
pub fn sem_get_count(sem: sem_t) -> u32;
pub fn queue_create(length: u32, item_size: u32) -> queue_t;
pub fn queue_prepend(queue: queue_t, item: *const c_void, timeout: u32) -> bool;
pub fn queue_append(queue: queue_t, item: *const c_void, timeout: u32) -> bool;
pub fn queue_peek(queue: queue_t, buffer: *mut c_void, timeout: u32) -> bool;
pub fn queue_recv(queue: queue_t, buffer: *mut c_void, timeout: u32) -> bool;
pub fn queue_get_waiting(queue: queue_t) -> u32;
pub fn queue_get_available(queue: queue_t) -> u32;
pub fn queue_delete(queue: queue_t);
pub fn queue_reset(queue: queue_t);
pub fn registry_bind_port(port: u8, device_type: v5_device_e_t) -> c_int;
pub fn registry_unbind_port(port: u8) -> c_int;
pub fn registry_get_bound_type(port: u8) -> v5_device_e_t;
pub fn registry_get_plugged_type(port: u8) -> v5_device_e_t;
pub fn serctl(action: u32, extra_arg: *mut c_void) -> i32;
pub fn fdctl(file: c_int, action: u32, extra_arg: *mut c_void) -> i32;
}