text: #ifndef __WILC_MSG_QUEUE_H__
  #define __WILC_MSG_QUEUE_H__
  
  /*!
   *  @file	wilc_msgqueue.h
   *  @brief	Message Queue OS wrapper functionality
   *  @author	syounan
   *  @sa		wilc_oswrapper.h top level OS wrapper file
   *  @date	30 Aug 2010
   *  @version	1.0
   */
  
  #include "wilc_platform.h"
  #include "wilc_errorsupport.h"
  #include "wilc_memory.h"
  #include "wilc_strutils.h"
  
  /*!
   *  @struct             tstrWILC_MsgQueueAttrs
   *  @brief		Message Queue API options
   *  @author		syounan
   *  @date		30 Aug 2010
   *  @version		1.0
   */
  typedef struct {
  	/* a dummy member to avoid compiler errors*/
  	u8 dummy;
  
  } tstrWILC_MsgQueueAttrs;
  
  /*!
   *  @brief		Creates a new Message queue
   *  @details		Creates a new Message queue, if the feature
   *                              CONFIG_WILC_MSG_QUEUE_IPC_NAME is enabled and pstrAttrs->pcName
   *                              is not Null, then this message queue can be used for IPC with
   *                              any other message queue having the same name in the system
   *  @param[in,out]	pHandle handle to the message queue object
   *  @param[in]	pstrAttrs Optional attributes, NULL for default
   *  @return		Error code indicating sucess/failure
   *  @sa			tstrWILC_MsgQueueAttrs
   *  @author		syounan
   *  @date		30 Aug 2010
   *  @version		1.0
   */
  WILC_ErrNo WILC_MsgQueueCreate(WILC_MsgQueueHandle *pHandle,
  			       tstrWILC_MsgQueueAttrs *pstrAttrs);
  
  
  /*!
   *  @brief		Sends a message
   *  @details		Sends a message, this API will block unil the message is
   *                              actually sent or until it is timedout (as long as the feature
   *                              CONFIG_WILC_MSG_QUEUE_TIMEOUT is enabled and pstrAttrs->u32Timeout
   *                              is not set to WILC_OS_INFINITY), zero timeout is a valid value
   *  @param[in]	pHandle handle to the message queue object
   *  @param[in]	pvSendBuffer pointer to the data to send
   *  @param[in]	u32SendBufferSize the size of the data to send
   *  @param[in]	pstrAttrs Optional attributes, NULL for default
   *  @return		Error code indicating sucess/failure
   *  @sa			tstrWILC_MsgQueueAttrs
   *  @author		syounan
   *  @date		30 Aug 2010
   *  @version		1.0
   */
  WILC_ErrNo WILC_MsgQueueSend(WILC_MsgQueueHandle *pHandle,
  			     const void *pvSendBuffer, u32 u32SendBufferSize,
  			     tstrWILC_MsgQueueAttrs *pstrAttrs);
  
  
  /*!
   *  @brief		Receives a message
   *  @details		Receives a message, this API will block unil a message is
   *                              received or until it is timedout (as long as the feature
   *                              CONFIG_WILC_MSG_QUEUE_TIMEOUT is enabled and pstrAttrs->u32Timeout
   *                              is not set to WILC_OS_INFINITY), zero timeout is a valid value
   *  @param[in]	pHandle handle to the message queue object
   *  @param[out]	pvRecvBuffer pointer to a buffer to fill with the received message
   *  @param[in]	u32RecvBufferSize the size of the receive buffer
   *  @param[out]	pu32ReceivedLength the length of received data
   *  @param[in]	pstrAttrs Optional attributes, NULL for default
   *  @return		Error code indicating sucess/failure
   *  @sa			tstrWILC_MsgQueueAttrs
   *  @author		syounan
   *  @date		30 Aug 2010
   *  @version		1.0
   */
  WILC_ErrNo WILC_MsgQueueRecv(WILC_MsgQueueHandle *pHandle,
  			     void *pvRecvBuffer, u32 u32RecvBufferSize,
  			     u32 *pu32ReceivedLength,
  			     tstrWILC_MsgQueueAttrs *pstrAttrs);
  
  
  /*!
   *  @brief		Destroys an existing  Message queue
   *  @param[in]	pHandle handle to the message queue object
   *  @param[in]	pstrAttrs Optional attributes, NULL for default
   *  @return		Error code indicating sucess/failure
   *  @sa			tstrWILC_MsgQueueAttrs
   *  @author		syounan
   *  @date		30 Aug 2010
   *  @version		1.0
   */
  WILC_ErrNo WILC_MsgQueueDestroy(WILC_MsgQueueHandle *pHandle,
  				tstrWILC_MsgQueueAttrs *pstrAttrs);
  
  
  
  #endif
  