253 lines
5.3 KiB
C
253 lines
5.3 KiB
C
#include "os_wrapper.h"
|
|
#include "os/os_api.h"
|
|
#include "system/timer.h"
|
|
|
|
|
|
#define USE_MALLOC_SETTING 1 //1:信号量,互斥锁用动态分配创建 0:静态创建,SDK断网后需处理释放(未完善)
|
|
|
|
long os_wrapper_get_forever_time()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/***************************信号量*********************************/
|
|
#if USE_MALLOC_SETTING
|
|
|
|
void *os_wrapper_create_signal_mutex(int init_count)
|
|
{
|
|
OS_SEM *sem = zalloc(sizeof(OS_SEM));
|
|
if (sem) {
|
|
os_sem_create(sem, init_count);
|
|
}
|
|
return (void *)sem;
|
|
}
|
|
|
|
|
|
void os_wrapper_delete_signal_mutex(void **mutex) //信号量释放函数
|
|
{
|
|
|
|
if (!*mutex) {
|
|
return;
|
|
}
|
|
if (os_sem_valid((OS_SEM *)*mutex)) {
|
|
|
|
os_wrapper_post_signal((OS_SEM *)*mutex); //删除前先post
|
|
|
|
os_sem_del((OS_SEM *)*mutex, 1);
|
|
free(*mutex);
|
|
*mutex = NULL;
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
static int sem_create_cnt = 0, mutex_create_cnt = 0;
|
|
static OS_SEM wrapper_sem[30] = {0};
|
|
|
|
void *os_wrapper_create_signal_mutex(int init_count)
|
|
{
|
|
os_sem_create(&wrapper_sem[sem_create_cnt], init_count);
|
|
if (!os_sem_valid(&wrapper_sem[sem_create_cnt])) {
|
|
printf("-------%s------------%d----------sem create failed!!", __func__, __LINE__);
|
|
return NULL;
|
|
}
|
|
printf("---------%s------------%d-----------cnt = %d", __func__, __LINE__, sem_create_cnt);
|
|
sem_create_cnt++;
|
|
return (void *)&wrapper_sem[sem_create_cnt - 1];
|
|
}
|
|
|
|
void os_wrapper_delete_signal_mutex(void **mutex) //信号量释放函数
|
|
{
|
|
if (!*mutex) {
|
|
return;
|
|
}
|
|
if (os_sem_valid((OS_SEM *)*mutex)) {
|
|
|
|
os_wrapper_post_signal((OS_SEM *)*mutex); //删除前先post
|
|
|
|
os_sem_del((OS_SEM *)*mutex, 1);
|
|
*mutex = NULL;
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
bool os_wrapper_wait_signal(void *mutex, long time_ms)
|
|
{
|
|
if (!mutex) {
|
|
return false;
|
|
}
|
|
if (!os_sem_valid((OS_SEM *)mutex)) {
|
|
return false;
|
|
}
|
|
return (os_sem_pend((OS_SEM *)mutex, time_ms) == 0);
|
|
}
|
|
|
|
void os_wrapper_post_signal(void *mutex)
|
|
{
|
|
if (!mutex) {
|
|
return;
|
|
}
|
|
if (!os_sem_valid((OS_SEM *)mutex)) {
|
|
return;
|
|
}
|
|
os_sem_post((OS_SEM *)mutex);
|
|
}
|
|
|
|
|
|
|
|
/***************************互斥锁*********************************/
|
|
|
|
#if USE_MALLOC_SETTING
|
|
|
|
void *os_wrapper_create_locker_mutex()
|
|
{
|
|
OS_MUTEX *mutex = zalloc(sizeof(OS_MUTEX));
|
|
if (mutex) {
|
|
os_mutex_create(mutex);
|
|
}
|
|
return (void *)mutex;
|
|
}
|
|
|
|
void os_wrapper_del_locker_mutex(void **mutex)
|
|
{
|
|
if (!*mutex) {
|
|
return;
|
|
}
|
|
if (os_mutex_valid((OS_MUTEX *)*mutex)) {
|
|
|
|
os_wrapper_unlock_mutex((OS_MUTEX *)*mutex); //删除前先post
|
|
|
|
os_mutex_del((OS_MUTEX *)*mutex, 0);
|
|
free(*mutex);
|
|
*mutex = NULL;
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
static OS_MUTEX wrapper_mutex[30] = {0};
|
|
|
|
void *os_wrapper_create_locker_mutex()
|
|
{
|
|
os_mutex_create(&wrapper_mutex[mutex_create_cnt]);
|
|
|
|
if (!os_mutex_valid(&wrapper_mutex[mutex_create_cnt])) {
|
|
printf("-------%s------------%d----------mutex create failed!!", __func__, __LINE__);
|
|
return NULL;
|
|
}
|
|
printf("---------%s------------%d-----------cnt = %d", __func__, __LINE__, mutex_create_cnt);
|
|
mutex_create_cnt++;
|
|
return (void *)&wrapper_mutex[mutex_create_cnt - 1];
|
|
}
|
|
|
|
void os_wrapper_del_locker_mutex(void **mutex)
|
|
{
|
|
if (!*mutex) {
|
|
return;
|
|
}
|
|
if (os_mutex_valid((OS_MUTEX *)*mutex)) {
|
|
|
|
os_wrapper_unlock_mutex((OS_MUTEX *)*mutex); //删除前先post
|
|
|
|
os_mutex_del((OS_MUTEX *)*mutex, 0);
|
|
*mutex = NULL;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
bool os_wrapper_lock_mutex(void *mutex, long time_ms)
|
|
{
|
|
if (!mutex) {
|
|
return false;
|
|
}
|
|
if (!os_mutex_valid((OS_MUTEX *)mutex)) {
|
|
return false;
|
|
}
|
|
return (os_mutex_pend((OS_MUTEX *)mutex, time_ms) == 0);
|
|
}
|
|
|
|
void os_wrapper_unlock_mutex(void *mutex)
|
|
{
|
|
if (!mutex) {
|
|
return;
|
|
}
|
|
if (!os_mutex_valid((OS_MUTEX *)mutex)) {
|
|
return;
|
|
}
|
|
os_mutex_post((OS_MUTEX *)mutex);
|
|
}
|
|
|
|
|
|
|
|
/**************************延时函数*********************************/
|
|
|
|
void os_wrapper_sleep(long time_ms)
|
|
{
|
|
msleep(time_ms);
|
|
}
|
|
|
|
extern u32 timer_get_ms(void);
|
|
long os_wrapper_get_time_ms()
|
|
{
|
|
return timer_get_ms();
|
|
}
|
|
|
|
|
|
/**************************线程函数*********************************/
|
|
|
|
void *os_wrapper_start_thread(void *thread_func, void *param, const char *name, int prior, int stack_depth)
|
|
{
|
|
|
|
int *thread_handle = (int *)malloc(sizeof(int));
|
|
memset(thread_handle, 0, sizeof(int));
|
|
if (0 != thread_fork(name, prior + 20, stack_depth, 0, thread_handle, thread_func, param)) {
|
|
free(thread_handle);
|
|
return NULL;
|
|
}
|
|
return (void *)thread_handle;
|
|
|
|
}
|
|
|
|
void os_wrapper_thread_delete(void **thread_handle)
|
|
{
|
|
if (*thread_handle) {
|
|
thread_kill(*thread_handle, KILL_WAIT);
|
|
free(*thread_handle);
|
|
*thread_handle = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**************************定时器函数*********************************/
|
|
|
|
|
|
|
|
|
|
void os_wrapper_start_timer(void **handle, void *func, int time_ms, bool repeat)
|
|
{
|
|
if (handle == NULL) {
|
|
return;
|
|
}
|
|
|
|
if (repeat) {
|
|
*handle = (void *)sys_timer_add_to_task("tc_tvs_task", NULL, func, time_ms);
|
|
} else {
|
|
*handle = (void *)sys_timeout_add_to_task("tc_tvs_task", NULL, func, time_ms);
|
|
}
|
|
}
|
|
|
|
void os_wrapper_stop_timer(void *handle)
|
|
{
|
|
if (handle == NULL) {
|
|
return;
|
|
}
|
|
sys_timer_del((int)handle);
|
|
}
|
|
|
|
|
|
|