X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=Include%2Fvos_que.h;fp=Include%2Fvos_que.h;h=28f622e08af42848d7dd1d85d9b9751b5973d337;hb=1f71b9a76eacf92b39c1ce6f782f8404a34f60a9;hp=0000000000000000000000000000000000000000;hpb=254694245736881ecfff4eb0d1503bf3f49a21be;p=scp%2Focu%2F5gnr.git diff --git a/Include/vos_que.h b/Include/vos_que.h new file mode 100644 index 0000000..28f622e --- /dev/null +++ b/Include/vos_que.h @@ -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__ */