O-CU-UP
[scp/ocu/5gnr.git] / Include / vos_que.h
1 /******************************************************************************
2 ###############################################################################
3 #   Copyright (c) [2017-2020] [ICT/CAS]                                        #
4 #   Licensed under the ORAN Software License v1.0 (License)             #
5 ###############################################################################
6 ******************************************************************************/
7
8
9 #ifndef __VOS_QUE_H__
10 #define __VOS_QUE_H__
11
12 #ifdef    __cplusplus
13 extern "C"
14 {
15 #endif /* __cplusplus */
16
17 /** 队列中无消息 */
18 #define VOS_NO_MSG          0
19
20
21 #define VOS_QUEUE_MSG_SIZE   4
22
23 /** 队列中有消息 */
24 #define VOS_HAVE_MSG        (VOS_QUEUE_MSG_SIZE * sizeof(ULONG))
25
26 /** 队列类型,linux中只支持 VOS_MSG_Q_FIFO 和 VOS_MSG_Q_PRIORITY 类型 */
27 typedef enum {
28     VOS_MSG_Q_FIFO           = 0, ///< first in first out queue
29     VOS_MSG_Q_PRIORITY       = 1, ///< priority sorted queue
30     VOS_MSG_Q_PIPE           = 2, ///< pipe queue
31     VOS_MSG_Q_ISOCK                      = 3, ///< ISOCK queue
32 }VOS_msgq_type_t;
33
34 /** 消息优先级 */
35 typedef enum {
36     MSG_PRI_NORMAL      = 0,  ///< 普通优先级
37     MSG_PRI_URGENT      = 1,  ///< 高优先级
38 }VOS_msgq_pri_t;
39
40
41 /** 
42  * 创建消息队列
43  * @param[in]   lMaxMsgs     消息队列中最大消息数目
44  * @param[in]   lOptions     选项,VOS_msgq_type_t 类型,linux中支持MSG_Q_FIFO和MSG_Q_PRIORITY
45  * @return      成功返回队列ID,失败则返回 0
46  */ 
47 ULONG VOS_QueCreate(LONG lMaxMsgs, LONG lOptions);
48
49
50 /** 
51  * 删除队列
52  * @param[in]   msgQId     消息队列ID
53  * @return      成功返回队列ID,失败则返回 0
54  */ 
55 LONG VOS_QueDelete(ULONG msgQId);
56
57
58 /** 
59  * 向消息队列发消息
60  * @param[in]   msgQId     消息队列ID
61  * @param[in]   aulMsg     发送的消息,含有VOS_QUEUE_MSG_SIZE个ULONG的数组
62  * @param[in]   lMsec      当队列满时,发送任务等待的时间,单位是毫秒。
63  *                         VOS_WAIT_FOREVER 表示永久等待。VOS_WAIT_NO_WAIT 表示不等待。
64  * @param[in]   lPriority  消息的优先级。分为MSG_PRI_NORMAL和MSG_PRI_URGENT两种。
65  * @return      VOS_OK - 成功,其他 - 失败
66  * @note WINDOWS中存在Bug,队列满了后,不能等待,只能返回失败
67  */ 
68 LONG VOS_QueSend(ULONG msgQId, ULONG aulMsg[VOS_QUEUE_MSG_SIZE], LONG lMsec, LONG lPriority);
69
70
71 /** 
72  * 从消息队列接受
73  * @param[in]   msgQId     消息队列ID
74  * @param[in]   aulMsg     接收的消息,含有VOS_QUEUE_MSG_SIZE个ULONG的数组
75  * @param[in]   lMsec      当队列满时,发送任务等待的时间,单位是毫秒。
76  *                         VOS_WAIT_FOREVER 表示永久等待。VOS_WAIT_NO_WAIT 表示不等待。
77  * @return      失败为VOS_ERROR;成功时如果消息队列中消息数为0 则返回VOS_NO_MSG,
78  *              如果消息队列中消息数不为0 ,则返回VOS_HAVE_MSG。
79  * @note 一般任务的入口函数就阻塞在VOS_QueReceive。
80  */ 
81 LONG VOS_QueReceive(ULONG msgQId, ULONG aulMsg[VOS_QUEUE_MSG_SIZE], LONG lMsec);
82
83
84 /** 
85  * 将队列和任务绑定,用于队列管理,一般创建完队列和任务后调用
86  * @param[in]   hTask     任务句柄
87  * @param[in]   ulQId     消息队列ID
88  */
89 VOID VOS_QueBindTask(VOS_HANDLE hTask, ULONG ulQId);
90
91
92 /** 
93  * 获得队列中消息的数目
94  * @param[in]   msgQId    消息队列ID
95  * @return      成功则返回消息队列中消息的数目,失败则VOS_ERROR。
96  */
97 LONG VOS_QueNum(ULONG msgQId);
98
99 /** 
100  * 删除所有创建的消息队列
101  * @return 成功VOS_OK
102  */
103 LONG VOS_QueClean();
104
105 #ifdef __cplusplus
106 }
107 #endif /* __cplusplus */
108
109 #endif /* __VOS_QUE_H__ */