Files
banban/ql-kernel/threadx/common/include/ql_rtos.h
T

359 lines
10 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*================================================================
Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
Quectel Wireless Solutions Proprietary and Confidential.
=================================================================*/
#ifndef _QL_RTOS_H
#define _QL_RTOS_H
#include "ql_type.h"
//typedef unsigned char bool;
#define QUEC_MAX_TASK_PRIORITY 252
typedef int QlOSStatus;
typedef void * ql_task_t;
typedef void * ql_sem_t;
typedef void * ql_mutex_t;
typedef void * ql_queue_t;
typedef void * ql_timer_t;
typedef void * ql_flag_t;
typedef enum
{
QL_WAIT_FOREVER = (int)0xFFFFFFFF,
QL_NO_WAIT = 0
} ql_wait_e;
typedef enum
{
QL_FLAG_AND = 5,
QL_FLAG_AND_CLEAR = 6,
QL_FLAG_OR = 7,
QL_FLAG_OR_CLEAR = 8
} ql_flag_op_e;
extern QlOSStatus ql_rtos_task_create
(
ql_task_t * taskRef, /* OS task reference */
u32 stackSize, /* number of bytes in task stack area */
u8 priority, /* task priority */
char * taskName, /* task name */
void ( * taskStart)(void*), /* pointer to task entry point */
void* argv, /* task entry argument pointer */
...
);
extern QlOSStatus ql_rtos_task_delete
(
ql_task_t taskRef /* OS task reference */
);
extern void ql_rtos_task_yield(void);
extern QlOSStatus ql_rtos_task_get_current_ref
(
ql_task_t * taskRef /* OS task reference */
);
extern QlOSStatus ql_rtos_task_change_priority
(
ql_task_t taskRef, /* OS task reference */
u8 new_priority, /* OS task new priority for in */
u8 *old_priority /* OS task old priority for out */
);
extern QlOSStatus ql_rtos_task_get_priority
(
ql_task_t taskRef, /* OS task reference */
u8 *priority_ptr /* OS task priority for out */
);
QlOSStatus ql_rtos_task_set_name
(
ql_task_t taskRef, /* OS task reference */
char * name /*OS task name*/
);
extern void ql_rtos_task_sleep_ms
(
u32 ms /* OS task sleep time for ms */
);
extern void ql_rtos_task_sleep_s
(
u32 s /* OS task sleep time for s */
);
extern QlOSStatus ql_rtos_task_suspend
(
ql_task_t taskRef /* OS task reference */
);
extern QlOSStatus ql_rtos_task_resume
(
ql_task_t taskRef /* OS task reference */
);
/**
* @brief This function will disable all interrupt.
*/
extern QlOSStatus ql_rtos_task_sched_lock(void);
/**
* @brief This function will enable all interrupt.
*/
extern QlOSStatus ql_rtos_task_sched_unlock(void);
extern QlOSStatus ql_rtos_semaphore_create
(
ql_sem_t *semaRef, /* OS semaphore reference */
u32 initialCount /* initial count of the semaphore */
);
extern QlOSStatus ql_rtos_semaphore_wait
(
ql_sem_t semaRef, /* OS semaphore reference */
u32 timeout /* QL_WAIT_FOREVER, QL_NO_WAIT, or timeout */
);
extern QlOSStatus ql_rtos_semaphore_release
(
ql_sem_t semaRef /* OS semaphore reference */
);
extern QlOSStatus ql_rtos_semaphore_get_cnt
(
ql_sem_t semaRef, /* OS semaphore reference */
u32 * cnt_ptr /* out-parm to save the cnt of semaphore */
);
extern QlOSStatus ql_rtos_semaphore_delete
(
ql_sem_t semaRef /* OS semaphore reference */
);
extern QlOSStatus ql_rtos_mutex_create
(
ql_mutex_t *mutexRef /* OS mutex reference */
);
extern QlOSStatus ql_rtos_mutex_lock
(
ql_mutex_t mutexRef, /* OS mutex reference */
u32 timeout /* mutex wait timeout */
);
extern QlOSStatus ql_rtos_mutex_try_lock
(
ql_mutex_t mutexRef /* OS mutex reference */
);
extern QlOSStatus ql_rtos_mutex_unlock
(
ql_mutex_t mutexRef /* OS mutex reference */
);
extern QlOSStatus ql_rtos_mutex_delete
(
ql_mutex_t mutexRef /* OS mutex reference */
);
extern QlOSStatus ql_rtos_queue_create
(
ql_queue_t *msgQRef, /* OS message queue reference */
u32 maxSize, /* max message size the queue supports */
u32 maxNumber /* max # of messages in the queue */
);
extern QlOSStatus ql_rtos_queue_wait
(
ql_queue_t msgQRef, /* message queue reference */
u8 *recvMsg, /* pointer to the message received */
u32 size, /* size of the message */
u32 timeout /* QL_WAIT_FOREVER, QL_NO_WAIT, or timeout */
);
extern QlOSStatus ql_rtos_queue_release
(
ql_queue_t msgQRef, /* message queue reference */
u32 size, /* size of the message */
u8 *msgPtr, /* start address of the data to be sent */
u32 timeout /* QL_WAIT_FOREVER, QL_NO_WAIT, or timeout */
);
extern QlOSStatus ql_rtos_queue_front_release
(
ql_queue_t msgQRef, /* message queue reference */
u32 size, /* size of the message */
u8 *msgPtr, /* start address of the data to be sent */
u32 timeout /* QL_WAIT_FOREVER, QL_NO_WAIT, or timeout */
);
extern QlOSStatus ql_rtos_queue_get_cnt
(
ql_queue_t msgQRef, /* message queue reference */
u32 *cnt_ptr /* out-parm to save the cnt of message queue */
);
extern QlOSStatus ql_rtos_queue_delete
(
ql_queue_t msgQRef /* message queue reference */
);
extern QlOSStatus ql_rtos_timer_create
(
ql_timer_t * timerRef /* OS supplied timer reference */
);
extern QlOSStatus ql_task_timer_create
(
ql_timer_t * timerRef /* OS supplied timer reference */
);
QlOSStatus ql_rtos_timer_start
(
ql_timer_t timerRef, /* OS supplied timer reference */
u32 initialTime, /* initial expiration time in ms */
unsigned char cyclicalEn, /* wether to enable the cyclical mode or not */
void (*callBackRoutine)(u32), /* timer call-back routine */
u32 timerArgc /* argument to be passed to call-back on expiration */
);
QlOSStatus ql_task_timer_start
(
ql_timer_t timerRef, /* OS supplied timer reference */
u32 initialTime, /* initial expiration time in ms */
unsigned char cyclicalEn, /* wether to enable the cyclical mode or not */
void (*callBackRoutine)(u32), /* timer call-back routine */
u32 timerArgc /* argument to be passed to call-back on expiration */
);
extern QlOSStatus ql_rtos_timer_stop
(
ql_timer_t timerRef /* OS supplied timer reference */
);
extern QlOSStatus ql_task_timer_stop
(
ql_timer_t timerRef /* OS supplied timer reference */
);
extern QlOSStatus ql_rtos_timer_delete
(
ql_timer_t timerRef /* OS supplied timer reference */
);
extern QlOSStatus ql_task_timer_delete
(
ql_timer_t timerRef /* OS supplied timer reference */
);
extern QlOSStatus ql_rtos_flag_create
(
ql_flag_t *flagRef /* OS flag reference */
);
extern QlOSStatus ql_rtos_flag_wait
(
ql_flag_t flagRef, /* OS flag reference */
u32 mask, /* flag mask to wait for */
ql_flag_op_e operation, /* QL_FLAG_AND, QL_FLAG_AND_CLEAR, */
/* QL_FLAG_OR, QL_FLAG_OR_CLEAR */
u32 *flags, /* Current value of all flags */
u32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
);
extern QlOSStatus ql_rtos_flag_release
(
ql_flag_t flagRef, /* OS flag reference */
u32 mask, /* flag mask to wait for */
ql_flag_op_e operation /* QL_FLAG_AND, QL_FLAG_AND_CLEAR, */
/* QL_FLAG_OR, QL_FLAG_OR_CLEAR */
);
extern QlOSStatus ql_rtos_flag_delete
(
ql_flag_t flagRef /* OS flag reference */
);
u32 ql_get_cpu_usage_rate(void);
u32 ql_rtos_get_free_heap_size(void);
u32 ql_rtos_get_systicks(void);
unsigned int ql_ext_memheap_init(unsigned int start,unsigned int end);
void* ql_ext_malloc(unsigned int size);
unsigned int ql_get_extheap_freesize(void);
unsigned int ql_get_extheap_totalSize(void);
/*****************************************************************
* Function: ql_get_mempool_total_size
*
* Description:
* 获取当前heap总大小。
*
* Parameters:
* 无
* Return:
* heap总大小。
*
*****************************************************************/
u32 ql_get_mempool_total_size(void);
/*****************************************************************
* Function: ql_get_mempool_max_freebuf_size
*
* Description:
* 获取当前可用连续内存总大小。
*
* Parameters:
* 无。
* Return:
* 连续内存总大小。
*
*****************************************************************/
u32 ql_get_mempool_max_freebuf_size(void);
/*****************************************************************
* Function: ql_rtos_get_current_task_name
*
* Description:
* 获取当前任务名。
*
* Parameters:
* 无。
* Return:
* 连续内存总大小。
*
*****************************************************************/
char *ql_rtos_get_current_task_name(void);
/*****************************************************************
* Function: ql_rtos_get_task_stack_info
*
* Description:
* 获取任务名、任务堆栈总大小、任务当前已使用堆栈大小、任务堆栈最大使用大小。
*
* Parameters:
* taskName:任务名传递参数
stackSize:任务堆栈总大小传递参数
stackInuse:任务当前已使用堆栈大小传递参数
stackPeak:任务堆栈最大使用大小传递参数
* Return:
* -1:error
*
*****************************************************************/
int ql_rtos_get_task_stack_info(ql_task_t task_handle, char** taskName, unsigned long* stackSize, unsigned long* stackInuse, unsigned long* stackPeak);
void ql_rtos_task_switch_in_reg(void *cb);
void ql_icu_switch_in_reg(void *cb);
void ql_ostimer_switch_in_reg(void *cb);
void * ql_rtos_get_current_task_ptr(void);
#endif