/*
 * Copyright (c) 2018 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef __WRAPPER_H__
#define __WRAPPER_H__

#include <zephyr/kernel.h>
#include <cmsis_os2.h>

#define TRUE    1
#define FALSE   0

struct cv2_thread {
	sys_dnode_t node;
	struct k_thread z_thread;
	struct k_poll_signal poll_signal;
	struct k_poll_event poll_event;
	uint32_t signal_results;
	char name[16];
	uint32_t attr_bits;
	struct k_sem join_guard;
	char has_joined;
};

struct cv2_timer {
	struct k_timer z_timer;
	osTimerType_t type;
	uint32_t status;
	char name[16];
	void (*callback_function)(void *argument);
	void *arg;
};

struct cv2_mutex {
	struct k_mutex z_mutex;
	char name[16];
	uint32_t state;
};

struct cv2_sem {
	struct k_sem z_semaphore;
	char name[16];
};

struct cv2_mslab {
	struct k_mem_slab z_mslab;
	void *pool;
	char is_dynamic_allocation;
	char name[16];
};

struct cv2_msgq {
	struct k_msgq z_msgq;
	void *pool;
	char is_dynamic_allocation;
	char name[16];
};

struct cv2_event_flags {
	struct k_poll_signal poll_signal;
	struct k_poll_event poll_event;
	uint32_t signal_results;
	char name[16];
};

extern osThreadId_t get_cmsis_thread_id(k_tid_t tid);
extern void *is_cmsis_rtos_v2_thread(void *thread_id);

#endif
