O-CU-UP
[scp/ocu/5gnr.git] / Include / vos_que.h
diff --git a/Include/vos_que.h b/Include/vos_que.h
new file mode 100644 (file)
index 0000000..28f622e
--- /dev/null
@@ -0,0 +1,109 @@
+/******************************************************************************
+###############################################################################
+#   Copyright (c) [2017-2020] [ICT/CAS]                                        #
+#   Licensed under the ORAN Software License v1.0 (License)             #
+###############################################################################
+******************************************************************************/
+
+
+#ifndef __VOS_QUE_H__
+#define __VOS_QUE_H__
+
+#ifdef    __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/** 队列中无消息 */
+#define VOS_NO_MSG          0
+
+
+#define VOS_QUEUE_MSG_SIZE   4
+
+/** 队列中有消息 */
+#define VOS_HAVE_MSG        (VOS_QUEUE_MSG_SIZE * sizeof(ULONG))
+
+/** 队列类型,linux中只支持 VOS_MSG_Q_FIFO 和 VOS_MSG_Q_PRIORITY 类型 */
+typedef enum {
+    VOS_MSG_Q_FIFO           = 0, ///< first in first out queue
+    VOS_MSG_Q_PRIORITY       = 1, ///< priority sorted queue
+    VOS_MSG_Q_PIPE           = 2, ///< pipe queue
+    VOS_MSG_Q_ISOCK                     = 3, ///< ISOCK queue
+}VOS_msgq_type_t;
+
+/** 消息优先级 */
+typedef enum {
+    MSG_PRI_NORMAL      = 0,  ///< 普通优先级
+    MSG_PRI_URGENT      = 1,  ///< 高优先级
+}VOS_msgq_pri_t;
+
+
+/** 
+ * 创建消息队列
+ * @param[in]   lMaxMsgs     消息队列中最大消息数目
+ * @param[in]   lOptions     选项,VOS_msgq_type_t 类型,linux中支持MSG_Q_FIFO和MSG_Q_PRIORITY
+ * @return      成功返回队列ID,失败则返回 0
+ */ 
+ULONG VOS_QueCreate(LONG lMaxMsgs, LONG lOptions);
+
+
+/** 
+ * 删除队列
+ * @param[in]   msgQId     消息队列ID
+ * @return      成功返回队列ID,失败则返回 0
+ */ 
+LONG VOS_QueDelete(ULONG msgQId);
+
+
+/** 
+ * 向消息队列发消息
+ * @param[in]   msgQId     消息队列ID
+ * @param[in]   aulMsg     发送的消息,含有VOS_QUEUE_MSG_SIZE个ULONG的数组
+ * @param[in]   lMsec      当队列满时,发送任务等待的时间,单位是毫秒。
+ *                         VOS_WAIT_FOREVER 表示永久等待。VOS_WAIT_NO_WAIT 表示不等待。
+ * @param[in]   lPriority  消息的优先级。分为MSG_PRI_NORMAL和MSG_PRI_URGENT两种。
+ * @return      VOS_OK - 成功,其他 - 失败
+ * @note WINDOWS中存在Bug,队列满了后,不能等待,只能返回失败
+ */ 
+LONG VOS_QueSend(ULONG msgQId, ULONG aulMsg[VOS_QUEUE_MSG_SIZE], LONG lMsec, LONG lPriority);
+
+
+/** 
+ * 从消息队列接受
+ * @param[in]   msgQId     消息队列ID
+ * @param[in]   aulMsg     接收的消息,含有VOS_QUEUE_MSG_SIZE个ULONG的数组
+ * @param[in]   lMsec      当队列满时,发送任务等待的时间,单位是毫秒。
+ *                         VOS_WAIT_FOREVER 表示永久等待。VOS_WAIT_NO_WAIT 表示不等待。
+ * @return      失败为VOS_ERROR;成功时如果消息队列中消息数为0 则返回VOS_NO_MSG,
+ *              如果消息队列中消息数不为0 ,则返回VOS_HAVE_MSG。
+ * @note 一般任务的入口函数就阻塞在VOS_QueReceive。
+ */ 
+LONG VOS_QueReceive(ULONG msgQId, ULONG aulMsg[VOS_QUEUE_MSG_SIZE], LONG lMsec);
+
+
+/** 
+ * 将队列和任务绑定,用于队列管理,一般创建完队列和任务后调用
+ * @param[in]   hTask     任务句柄
+ * @param[in]   ulQId     消息队列ID
+ */
+VOID VOS_QueBindTask(VOS_HANDLE hTask, ULONG ulQId);
+
+
+/** 
+ * 获得队列中消息的数目
+ * @param[in]   msgQId    消息队列ID
+ * @return      成功则返回消息队列中消息的数目,失败则VOS_ERROR。
+ */
+LONG VOS_QueNum(ULONG msgQId);
+
+/** 
+ * 删除所有创建的消息队列
+ * @return 成功VOS_OK
+ */
+LONG VOS_QueClean();
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __VOS_QUE_H__ */