mirror of
https://github.com/oopuuu/zTC1.git
synced 2025-12-15 22:48:14 +08:00
251 lines
7.3 KiB
C
251 lines
7.3 KiB
C
/**
|
|
******************************************************************************
|
|
* @file mico_rtos.c
|
|
* @author William Xu
|
|
* @version V1.0.0
|
|
* @date 05-Aug-2018
|
|
* @brief This file provide the MiCO RTOS abstract layer functions.
|
|
******************************************************************************
|
|
*
|
|
* UNPUBLISHED PROPRIETARY SOURCE CODE
|
|
* Copyright (c) 2016 MXCHIP Inc.
|
|
*
|
|
* The contents of this file may not be disclosed to third parties, copied or
|
|
* duplicated in any form, in whole or in part, without the prior written
|
|
* permission of MXCHIP Corporation.
|
|
******************************************************************************
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "common.h"
|
|
#include "moc_api.h"
|
|
|
|
/******************************************************
|
|
* Macros
|
|
******************************************************/
|
|
|
|
/******************************************************
|
|
* Constants
|
|
******************************************************/
|
|
|
|
/******************************************************
|
|
* Enumerations
|
|
******************************************************/
|
|
|
|
/******************************************************
|
|
* Type Definitions
|
|
******************************************************/
|
|
|
|
/******************************************************
|
|
* Structures
|
|
******************************************************/
|
|
|
|
|
|
/******************************************************
|
|
* Function Declarations
|
|
******************************************************/
|
|
|
|
/******************************************************
|
|
* Variables Definitions
|
|
******************************************************/
|
|
|
|
extern const mico_api_t *lib_api_p;
|
|
|
|
static mico_time_t mico_time_offset = 0;
|
|
|
|
/******************************************************
|
|
* Function Definitions
|
|
******************************************************/
|
|
|
|
/* OS Layer*/
|
|
OSStatus mico_rtos_create_thread( mico_thread_t* thread, uint8_t priority, const char* name, mico_thread_function_t function, uint32_t stack_size, mico_thread_arg_t arg )
|
|
{
|
|
return lib_api_p->mico_rtos_create_thread( thread, priority, name, function, stack_size, (void *)arg );
|
|
}
|
|
|
|
OSStatus mico_rtos_delete_thread( mico_thread_t* thread )
|
|
{
|
|
return lib_api_p->mico_rtos_delete_thread( thread );
|
|
}
|
|
|
|
void mico_rtos_suspend_thread(mico_thread_t* thread)
|
|
{
|
|
lib_api_p->mico_rtos_suspend_thread(thread);
|
|
}
|
|
|
|
void mico_rtos_suspend_all_thread(void)
|
|
{
|
|
lib_api_p->mico_rtos_suspend_all_thread();
|
|
}
|
|
|
|
long mico_rtos_resume_all_thread(void)
|
|
{
|
|
return lib_api_p->mico_rtos_resume_all_thread();
|
|
}
|
|
|
|
OSStatus mico_rtos_thread_join( mico_thread_t* thread )
|
|
{
|
|
return lib_api_p->mico_rtos_thread_join(thread);
|
|
}
|
|
|
|
OSStatus mico_rtos_thread_force_awake( mico_thread_t* thread )
|
|
{
|
|
return lib_api_p->mico_rtos_thread_force_awake(thread);
|
|
}
|
|
|
|
bool mico_rtos_is_current_thread( mico_thread_t* thread )
|
|
{
|
|
return lib_api_p->mico_rtos_is_current_thread(thread);
|
|
}
|
|
|
|
OSStatus mico_rtos_init_semaphore( mico_semaphore_t* semaphore, int count )
|
|
{
|
|
return lib_api_p->mico_rtos_init_semaphore(semaphore, count);
|
|
}
|
|
OSStatus mico_rtos_set_semaphore( mico_semaphore_t* semaphore )
|
|
{
|
|
return lib_api_p->mico_rtos_set_semaphore(semaphore);
|
|
}
|
|
OSStatus mico_rtos_get_semaphore( mico_semaphore_t* semaphore, uint32_t timeout_ms )
|
|
{
|
|
return lib_api_p->mico_rtos_get_semaphore(semaphore, timeout_ms);
|
|
}
|
|
OSStatus mico_rtos_deinit_semaphore( mico_semaphore_t* semaphore )
|
|
{
|
|
return lib_api_p->mico_rtos_deinit_semaphore(semaphore);
|
|
}
|
|
OSStatus mico_rtos_init_mutex( mico_mutex_t* mutex )
|
|
{
|
|
return lib_api_p->mico_rtos_init_mutex( mutex );
|
|
}
|
|
OSStatus mico_rtos_lock_mutex( mico_mutex_t* mutex )
|
|
{
|
|
return lib_api_p->mico_rtos_lock_mutex( mutex );
|
|
}
|
|
OSStatus mico_rtos_unlock_mutex( mico_mutex_t* mutex )
|
|
{
|
|
return lib_api_p->mico_rtos_unlock_mutex( mutex );
|
|
}
|
|
OSStatus mico_rtos_deinit_mutex( mico_mutex_t* mutex )
|
|
{
|
|
return lib_api_p->mico_rtos_deinit_mutex( mutex );
|
|
}
|
|
OSStatus mico_rtos_init_queue( mico_queue_t* queue, const char* name, uint32_t message_size, uint32_t number_of_messages )
|
|
{
|
|
return lib_api_p->mico_rtos_init_queue( queue, name, message_size, number_of_messages );
|
|
}
|
|
OSStatus mico_rtos_push_to_queue( mico_queue_t* queue, void* message, uint32_t timeout_ms )
|
|
{
|
|
return lib_api_p->mico_rtos_push_to_queue( queue, message, timeout_ms );
|
|
}
|
|
OSStatus mico_rtos_pop_from_queue( mico_queue_t* queue, void* message, uint32_t timeout_ms )
|
|
{
|
|
return lib_api_p->mico_rtos_pop_from_queue( queue, message, timeout_ms );
|
|
}
|
|
OSStatus mico_rtos_deinit_queue( mico_queue_t* queue )
|
|
{
|
|
return lib_api_p->mico_rtos_deinit_queue( queue );
|
|
}
|
|
bool mico_rtos_is_queue_empty( mico_queue_t* queue )
|
|
{
|
|
return lib_api_p->mico_rtos_is_queue_empty( queue );
|
|
}
|
|
bool mico_rtos_is_queue_full( mico_queue_t* queue )
|
|
{
|
|
return lib_api_p->mico_rtos_is_queue_full( queue );
|
|
}
|
|
|
|
OSStatus mico_init_timer( mico_timer_t* timer, uint32_t time_ms, timer_handler_t function, void* arg )
|
|
{
|
|
return lib_api_p->mico_init_timer( timer, time_ms, function, arg );
|
|
}
|
|
OSStatus mico_start_timer( mico_timer_t* timer )
|
|
{
|
|
return lib_api_p->mico_start_timer( timer );
|
|
}
|
|
OSStatus mico_stop_timer( mico_timer_t* timer )
|
|
{
|
|
return lib_api_p->mico_stop_timer( timer );
|
|
}
|
|
OSStatus mico_reload_timer( mico_timer_t* timer )
|
|
{
|
|
return lib_api_p->mico_reload_timer( timer );
|
|
}
|
|
OSStatus mico_deinit_timer( mico_timer_t* timer )
|
|
{
|
|
return lib_api_p->mico_deinit_timer( timer );
|
|
}
|
|
bool mico_is_timer_running( mico_timer_t* timer )
|
|
{
|
|
return lib_api_p->mico_is_timer_running( timer );
|
|
}
|
|
int mico_create_event_fd(mico_event_t handle)
|
|
{
|
|
return lib_api_p->mico_create_event_fd(handle);
|
|
}
|
|
int mico_delete_event_fd(int fd)
|
|
{
|
|
return lib_api_p->mico_delete_event_fd(fd);
|
|
}
|
|
|
|
/**
|
|
* Gets time in milliseconds since RTOS start
|
|
*
|
|
* @Note: since this is only 32 bits, it will roll over every 49 days, 17 hours.
|
|
*
|
|
* @returns Time in milliseconds since RTOS started.
|
|
*/
|
|
mico_time_t mico_rtos_get_time( void )
|
|
{
|
|
return lib_api_p->mico_get_time();
|
|
}
|
|
|
|
OSStatus mico_time_get_time( mico_time_t* time_ptr )
|
|
{
|
|
*time_ptr = lib_api_p->mico_get_time( ) + mico_time_offset;
|
|
return kNoErr;
|
|
}
|
|
|
|
OSStatus mico_time_set_time( const mico_time_t* time_ptr )
|
|
{
|
|
mico_time_offset = *time_ptr - lib_api_p->mico_get_time( );
|
|
return kNoErr;
|
|
}
|
|
|
|
|
|
/**
|
|
* Delay for a number of milliseconds
|
|
*
|
|
* Processing of this function depends on the minimum sleep
|
|
* time resolution of the RTOS.
|
|
* The current thread sleeps for the longest period possible which
|
|
* is less than the delay required, then makes up the difference
|
|
* with a tight loop
|
|
*
|
|
* @return OSStatus : kNoErr if delay was successful
|
|
*
|
|
*/
|
|
OSStatus mico_rtos_delay_milliseconds( uint32_t num_ms )
|
|
{
|
|
lib_api_p->mico_thread_msleep(num_ms);
|
|
return kNoErr;
|
|
}
|
|
|
|
void *mico_malloc( size_t xWantedSize )
|
|
{
|
|
return lib_api_p->malloc(xWantedSize);
|
|
}
|
|
|
|
void mico_free( void *pv )
|
|
{
|
|
lib_api_p->free(pv);
|
|
}
|
|
|
|
void *mico_realloc( void *pv, size_t xWantedSize )
|
|
{
|
|
return lib_api_p->realloc(pv, xWantedSize);
|
|
}
|
|
|