546 lines
17 KiB
C
546 lines
17 KiB
C
/**
|
|
******************************************************************************
|
|
* @file quec_rtos.h
|
|
* @author Chavis.Chen
|
|
* @version V1.0.0
|
|
* @date 26-Sep-2018
|
|
* @brief This file contains the common definitions, macros and functions to
|
|
* be shared throughout the project.
|
|
******************************************************************************
|
|
*
|
|
* The MIT License
|
|
* Copyright (c) 2018 QUECTEL Inc.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
* to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
******************************************************************************
|
|
*/
|
|
|
|
|
|
#ifndef _QUEC_RTOS_H
|
|
#define _QUEC_RTOS_H
|
|
|
|
#include "osa.h"
|
|
#include "osa_old_api.h"
|
|
#include "linklist.h"
|
|
#include "quec_rtos_config.h"
|
|
#include "quec_cust_feature.h"
|
|
#define QUEC_OS_TASK_PRIORITY 95
|
|
#define QUEC_APP_TASK_PRIORITY 100
|
|
|
|
|
|
typedef uint32 quec_tcb_id_t;
|
|
|
|
typedef linklist_handler_t QuecTCBLinklist_t;
|
|
|
|
typedef OSTaskRef quec_task_t;
|
|
typedef OSSemaRef quec_sem_t;
|
|
typedef OSMutexRef quec_mutex_t;
|
|
typedef OSMsgQRef quec_queue_t;
|
|
typedef OSMailboxQRef quec_mailbox_t;
|
|
typedef OSFlagRef quec_flag_t;
|
|
typedef OSTimerRef quec_timer_t;
|
|
typedef OSATimerStatus quec_timer_status_t;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
quec_tcb_id_t id;
|
|
quec_task_t taskRef;
|
|
void* stackPtr;
|
|
uint32 stackSize;
|
|
uint8 priority;
|
|
char * taskName;
|
|
void ( * taskStart )( void * );
|
|
void * argv;
|
|
} quec_tcb_t;
|
|
|
|
typedef struct
|
|
{
|
|
quec_task_t taskRef;
|
|
quec_queue_t queueRef;
|
|
} task_delete_worker_t;
|
|
|
|
typedef struct
|
|
{
|
|
bool is_delete_itself;
|
|
quec_task_t taskRef;
|
|
} task_delete_obj_t;
|
|
|
|
typedef struct
|
|
{
|
|
quec_task_t taskRef;
|
|
QuecOSStatus result;
|
|
} task_delete_result_t;
|
|
|
|
|
|
typedef void (* task_delete_work_cb_t)(task_delete_result_t * task_delete_result);
|
|
|
|
#define QUEC_WAIT_FOREVER OS_SUSPEND
|
|
#define QUEC_NO_WAIT OS_NO_SUSPEND
|
|
|
|
|
|
typedef enum
|
|
{
|
|
QUEC_FLAG_AND = OSA_FLAG_AND,
|
|
QUEC_FLAG_AND_CLEAR = OSA_FLAG_AND_CLEAR,
|
|
QUEC_FLAG_OR = OSA_FLAG_OR,
|
|
QUEC_FLAG_OR_CLEAR = OSA_FLAG_OR_CLEAR
|
|
} quec_flag_op_e;
|
|
|
|
typedef enum
|
|
{
|
|
QUEC_TMR_STA_ENABLED = OSA_ENABLED,
|
|
QUEC_TMR_STA_DISABLED = OSA_DISABLED,
|
|
} quec_tmr_sta_e;
|
|
|
|
typedef enum
|
|
{
|
|
QUEC_TASK_NAME_APP_START,
|
|
QUEC_TASK_NAME_HTTP_SEND,
|
|
QUEC_TASK_NAME_HTTP_RECV_PRE,
|
|
QUEC_TASK_NAME_HTTP_RECV,
|
|
QUEC_TASK_NAME_HTTP_DESTROY,
|
|
QUEC_TASK_NAME_HTTP_TIMER_EVENT,
|
|
QUEC_TASK_NAME_HTTP_SERVICE,
|
|
QUEC_TASK_NAME_FILE,
|
|
QUEC_TASK_NAME_FTP_FOTA,
|
|
QUEC_TASK_NAME_FOTA_FEED,
|
|
QUEC_TASK_NAME_FOTA_RECV,
|
|
QUEC_TASK_NAME_FOTA_WRITE,
|
|
QUEC_TASK_NAME_FOTA_UPDATE,
|
|
QUEC_TASK_NAME_NETCARD,
|
|
QUEC_TASK_NAME_NET_IF_BIND,
|
|
QUEC_TASK_NAME_PDP_ACT,
|
|
QUEC_TASK_NAME_SLEEP,
|
|
QUEC_TASK_NAME_RECOVERY,
|
|
QUEC_TASK_NAME_TASK_DELETE,
|
|
QUEC_TASK_NAME_SIO_DDS,
|
|
QUEC_TASK_NAME_URC_PRE,
|
|
QUEC_TASK_NAME_URC,
|
|
QUEC_TASK_NAME_RI,
|
|
QUEC_TASK_NAME_TCP_WORK,
|
|
QUEC_TASK_NAME_TCP_AT,
|
|
QUEC_TASK_NAME_SOCKET_WORK,
|
|
QUEC_TASK_NAME_FTP_WORK,
|
|
QUEC_TASK_NAME_IOT_WORK,
|
|
QUEC_TASK_NAME_AUDIO,
|
|
QUEC_TASK_NAME_QIACT,
|
|
QUEC_TASK_NAME_RX_CMUX,
|
|
QUEC_TASK_NAME_TX_CMUX,
|
|
QUEC_TASK_NAME_MQTTCNF,
|
|
QUEC_TASK_NAME_MQTTAT,
|
|
QUEC_TASK_NAME_MQTIME,
|
|
QUEC_TASK_NAME_SLEEP_DEBUG,
|
|
QUEC_TASK_NAME_POWERCTL,
|
|
QUEC_TASK_NAME_NC_KALIVE,
|
|
QUEC_TASK_NAME_KALIVE_SEND,
|
|
QUEC_TASK_NAME_FTP_CNF_WORK,
|
|
QUEC_TASK_NAME_LWM2MCNF,
|
|
QUEC_TASK_NAME_LWM2MAT,
|
|
QUEC_TASK_NAME_LWM2IME,
|
|
QUEC_TASK_NAME_TEMP,
|
|
QUEC_TASK_NAME_LOCATOR_WORK,
|
|
QUEC_TASK_NAME_USIM_DETECT,
|
|
QUEC_TASK_NAME_MSG_HANDLE,
|
|
QUEC_TASK_NAME_LED,
|
|
QUEC_TASK_NAME_MMSEND,
|
|
QUEC_TASK_NAME_TCPUDPAPP,
|
|
QUEC_TASK_NAME_ALBS,
|
|
QUEC_TASK_NAME_ALDYNREG,
|
|
QUEC_TASK_NAME_QUECTHING,
|
|
QUEC_TASK_NAME_SMTP_WORK,
|
|
QUEC_TASK_NAME_TC_IOT,
|
|
QUEC_TASK_NAME_TC_IOT_HTTP,
|
|
QUEC_TASK_NAME_TC_IOT_RECONNECT,
|
|
QUEC_TASK_NAME_TC_IOT_RE_SUB,
|
|
QUEC_TASK_NAME_AT_SOCKET,
|
|
QUEC_TASK_NAME_QUECFOTA,
|
|
QUEC_TASK_NAME_QLWIP,
|
|
QUEC_TASK_NAME_IPCAPPCNF,
|
|
QUEC_TASK_NAME_AT_IPCAPP,
|
|
QUEC_TASK_NAME_NETMODE,
|
|
QUEC_TASK_NAME_PG_KEEPALIVE,
|
|
QUEC_TASK_NAME_ALLIED_NETMODE,
|
|
QUEC_TASK_NAME_QHB,
|
|
QUEC_TASK_NAME_QHBRECV,
|
|
QUEC_TASK_NAME_QGPIOCTRL,
|
|
QUEC_TASK_NAME_MECMGL,
|
|
QUEC_OPEN_MAIN,
|
|
#ifdef QUEC_IMS_XML_SUPPORT
|
|
QUEC_TASK_IMS_CONFIG_INIT,
|
|
#endif
|
|
QUEC_TASK_NAME_MAX,
|
|
}quec_task_name_e;
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Task Management
|
|
*========================================================================*/
|
|
extern char * quec_task_name[QUEC_TASK_NAME_MAX];
|
|
|
|
extern QuecOSStatus quec_rtos_init( void );
|
|
|
|
QuecOSStatus quec_rtos_task_create
|
|
(
|
|
quec_task_t * taskRef, /* OS task reference */
|
|
uint32 stackSize, /* number of bytes in task stack area */
|
|
uint8 priority, /* task priority 0 - 31 */
|
|
char * taskName, /* task name */
|
|
void ( * taskStart)(void*), /* pointer to task entry point */
|
|
void* argv, /* task entry argument pointer */
|
|
...
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_delete
|
|
(
|
|
quec_task_t taskRef /* OS task reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_delete_worker_start(void);
|
|
|
|
extern QuecOSStatus quec_rtos_task_delete_ex
|
|
(
|
|
quec_task_t taskRef /* OS task reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_suspend
|
|
(
|
|
quec_task_t taskRef /* OS task reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_resume
|
|
(
|
|
quec_task_t taskRef /* OS task reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_change_priority
|
|
(
|
|
quec_task_t taskRef, /* OS task reference */
|
|
uint8 new_priority, /* OS task new priority for in */
|
|
uint8 *old_priority /* OS task old priority for out */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_get_priority
|
|
(
|
|
quec_task_t taskRef, /* OS task reference */
|
|
uint8 * priority_ptr /* OS task priority for out */
|
|
);
|
|
|
|
extern void quec_rtos_task_yield(void);
|
|
|
|
extern QuecOSStatus quec_rtos_task_get_current_ref
|
|
(
|
|
quec_task_t * taskRef /* OS task reference */
|
|
);
|
|
|
|
extern void quec_rtos_task_sleep_ms
|
|
(
|
|
uint32 ms /* OS task sleep time for ms */
|
|
);
|
|
|
|
extern void quec_rtos_task_sleep_s
|
|
(
|
|
uint32 s /* OS task sleep time for s */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_task_sched_lock(void);
|
|
|
|
extern QuecOSStatus quec_rtos_task_sched_unlock(void);
|
|
|
|
extern QuecOSStatus quec_rtos_hisr_get_priority
|
|
(
|
|
quec_task_t taskRef, /* OS task reference */
|
|
uint8 *priority_ptr /* OS task priority for out */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_hisr_get_current_ref
|
|
(
|
|
quec_task_t* taskRef /* OS task reference */
|
|
);
|
|
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Semaphore Management
|
|
*========================================================================*/
|
|
|
|
extern QuecOSStatus quec_rtos_semaphore_create
|
|
(
|
|
quec_sem_t *semaRef, /* OS semaphore reference */
|
|
uint32 initialCount /* initial count of the semaphore */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_semaphore_wait
|
|
(
|
|
quec_sem_t semaRef, /* OS semaphore reference */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_semaphore_release
|
|
(
|
|
quec_sem_t semaRef /* OS semaphore reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_semaphore_get_cnt
|
|
(
|
|
quec_sem_t semaRef, /* OS semaphore reference */
|
|
uint32 * cnt_ptr /* out-parm to save the cnt of semaphore */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_semaphore_delete
|
|
(
|
|
quec_sem_t semaRef /* OS semaphore reference */
|
|
);
|
|
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Mutex Management
|
|
*========================================================================*/
|
|
|
|
extern QuecOSStatus quec_rtos_mutex_create
|
|
(
|
|
quec_mutex_t *mutexRef /* OS mutex reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mutex_lock
|
|
(
|
|
quec_mutex_t mutexRef, /* OS mutex reference */
|
|
uint32 timeout /* mutex wait timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mutex_try_lock
|
|
(
|
|
quec_mutex_t mutexRef /* OS mutex reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mutex_unlock
|
|
(
|
|
quec_mutex_t mutexRef /* OS mutex reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mutex_delete
|
|
(
|
|
quec_mutex_t mutexRef /* OS mutex reference */
|
|
);
|
|
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Queue Management
|
|
*========================================================================*/
|
|
|
|
extern QuecOSStatus quec_rtos_queue_create
|
|
(
|
|
quec_queue_t *msgQRef, /* OS message queue reference */
|
|
uint32 maxSize, /* max message size the queue supports */
|
|
uint32 maxNumber /* max # of messages in the queue */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_queue_wait
|
|
(
|
|
quec_queue_t msgQRef, /* message queue reference */
|
|
uint8 *recvMsg, /* pointer to the message received */
|
|
uint32 size, /* size of the message */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_queue_release
|
|
(
|
|
quec_queue_t msgQRef, /* message queue reference */
|
|
uint32 size, /* size of the message */
|
|
uint8 *msgPtr, /* start address of the data to be sent */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
extern QuecOSStatus quec_rtos_queue_front_release
|
|
(
|
|
quec_queue_t msgQRef, /* message queue reference */
|
|
uint32 size, /* size of the message */
|
|
uint8 *msgPtr, /* start address of the data to be sent */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_queue_get_cnt
|
|
(
|
|
quec_queue_t msgQRef, /* message queue reference */
|
|
uint32 *cnt_ptr /* out-parm to save the cnt of message queue */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_queue_delete
|
|
(
|
|
quec_queue_t msgQRef /* message queue reference */
|
|
);
|
|
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Mailbox Management
|
|
*========================================================================*/
|
|
|
|
extern QuecOSStatus quec_rtos_mailbox_create
|
|
(
|
|
quec_mailbox_t *mboxQRef, /* OS mailbox queue reference */
|
|
uint32 maxNumber /* max # of messages in the queue */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mailbox_wait
|
|
(
|
|
quec_mailbox_t mboxQRef, /* OS mailbox queue reference */
|
|
void **recvMsg, /* pointer to the message received */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mailbox_release
|
|
(
|
|
quec_mailbox_t mboxQRef, /* OS mailbox queue reference */
|
|
uint8 *msgPtr, /* start address of the data to be sent */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mailbox_get_cnt
|
|
(
|
|
quec_mailbox_t mboxQRef, /* OS mailbox queue reference */
|
|
uint32 *cnt_ptr /* out-parm to save the cnt of mailbox */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_mailbox_delete
|
|
(
|
|
quec_mailbox_t mboxQRef /* OS mailbox queue reference */
|
|
);
|
|
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Flag Management
|
|
*========================================================================*/
|
|
|
|
extern QuecOSStatus quec_rtos_flag_create
|
|
(
|
|
quec_flag_t *flagRef /* OS flag reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_flag_wait
|
|
(
|
|
quec_flag_t flagRef, /* OS flag reference */
|
|
uint32 mask, /* flag mask to wait for */
|
|
quec_flag_op_e operation, /* QUEC_FLAG_AND, QUEC_FLAG_AND_CLEAR, */
|
|
/* QUEC_FLAG_OR, QUEC_FLAG_OR_CLEAR */
|
|
uint32 *flags, /* Current value of all flags */
|
|
uint32 timeout /* QUEC_WAIT_FOREVER, QUEC_NO_WAIT, or timeout */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_flag_release
|
|
(
|
|
quec_flag_t flagRef, /* OS flag reference */
|
|
uint32 mask, /* flag mask to wait for */
|
|
uint32 operation /* QUEC_FLAG_AND, QUEC_FLAG_AND_CLEAR, */
|
|
/* QUEC_FLAG_OR, QUEC_FLAG_OR_CLEAR */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_flag_delete
|
|
(
|
|
quec_flag_t flagRef /* OS flag reference */
|
|
);
|
|
|
|
|
|
|
|
/*========================================================================
|
|
* Quectel Timer Management
|
|
*========================================================================*/
|
|
|
|
extern QuecOSStatus quec_rtos_timer_create
|
|
(
|
|
quec_timer_t * timerRef /* OS supplied timer reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_timer_start
|
|
(
|
|
quec_timer_t timerRef, /* OS supplied timer reference */
|
|
uint32 initialTime, /* initial expiration time in ms */
|
|
bool cyclicalEn, /* wether to enable the cyclical mode or not */
|
|
void (*callBackRoutine)(UINT32), /* timer call-back routine */
|
|
uint32 timerArgc /* argument to be passed to call-back on expiration */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_timer_stop
|
|
(
|
|
quec_timer_t timerRef /* OS supplied timer reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_task_timer_create
|
|
(
|
|
quec_timer_t * timerRef /* OS supplied timer reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_task_timer_start
|
|
(
|
|
quec_timer_t timerRef, /* OS supplied timer reference */
|
|
uint32 initialTime, /* initial expiration time in ms */
|
|
bool cyclicalEn, /* wether to enable the cyclical mode or not */
|
|
void (*callBackRoutine)(UINT32), /* timer call-back routine */
|
|
uint32 timerArgc /* argument to be passed to call-back on expiration */
|
|
);
|
|
|
|
extern QuecOSStatus quec_task_timer_stop
|
|
(
|
|
quec_timer_t timerRef /* OS supplied timer reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_timer_get_status
|
|
(
|
|
quec_timer_t timerRef, /* OS supplied timer reference */
|
|
quec_timer_status_t *timerStatus /* OS timer status: QUEC_TMR_STA_ENABLED, QUEC_TMR_STA_DISABLED */
|
|
);
|
|
|
|
extern QuecOSStatus quec_rtos_timer_delete
|
|
(
|
|
quec_timer_t timerRef /* OS supplied timer reference */
|
|
);
|
|
|
|
extern QuecOSStatus quec_task_timer_delete
|
|
(
|
|
quec_timer_t timerRef /* OS supplied timer reference */
|
|
);
|
|
extern int quec_get_task_stack_info
|
|
(
|
|
OSTaskRef task_handle,
|
|
char** taskName,
|
|
unsigned long* stackSize,
|
|
unsigned long* stackInuse,
|
|
unsigned long* stackPeak
|
|
);
|
|
|
|
extern uint64 quec_rtos_get_systime(void);
|
|
extern char *quec_get_current_task_name(void);
|
|
void quec_rtos_task_switch_in_cb_reg(void *cb);
|
|
void quec_icu_switch_in_cb_reg(void *cb);
|
|
void quec_ostimer_switch_in_cb_reg(void *cb);
|
|
void * quec_get_current_task_ptr(void);
|
|
|
|
|
|
|
|
#define quec_rtos_running_time_measure_prepare() uint64 quec_systime_start = 0
|
|
|
|
#define quec_rtos_running_time_measure_start() do{quec_systime_start = quec_rtos_get_systime();}while(0)
|
|
|
|
#define quec_rtos_running_time_measure_stop(during) do{during = (quec_rtos_get_systime() - quec_systime_start);}while(0)
|
|
|
|
#endif
|
|
|
|
|