#include "message.h"

MESSAGE_FIFO MsgFifos[MSG_FIFO_COUNT];		//定义一个消息数组
Com_ProtocolMessage sendMsg;

/*
***********************************************************************
*	函 数 名: MessageInit
*	功能说明: 消息处理初始化
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void MessageInit(void)					
{
	memset(&MsgFifos, 0, sizeof(MsgFifos));
}

/*
***********************************************************************
*	函 数 名: MessageSend
*	功能说明: 发送消息
*	形    参：
* 					MsgFifoIndex：发送目标
*						event：要发送的消息
*	返 回 值: _ErrStatus：成功返回_OK,不成功返回_ERROR
***********************************************************************
*/
_ErrStatus MessageSend(uint8_t MsgFifoIndex, Com_ProtocolMessage msg)
{	
	MESSAGE_FIFO *pMsgFifo = &MsgFifos[MsgFifoIndex]; 

	if(pMsgFifo->Count >= MAX_FIFO_DEPTH)
	{
		return _ERROR;
	}	
	pMsgFifo->Buf[(pMsgFifo->IndexHead + (pMsgFifo->Count++)) % MAX_FIFO_DEPTH] = msg;
	return _OK;
}


/*
***********************************************************************
*	函 数 名: MessageGet
*	功能说明: 获取消息
*	形    参：MsgFifoIndex：查找目标，从此模块查找
*	返 回 值: fifo为空则返回NULL，否则返回对应消息的指针
***********************************************************************
*/
Com_ProtocolMessage *MessageGet(uint8_t MsgFifoIndex)							
{
	Com_ProtocolMessage *pMsg = NULL;
	MESSAGE_FIFO* pMsgFifo = &MsgFifos[MsgFifoIndex];

	if(pMsgFifo->Count)
	{
		pMsg = &(pMsgFifo->Buf[pMsgFifo->IndexHead]);
		pMsgFifo->IndexHead = (pMsgFifo->IndexHead + 1) % MAX_FIFO_DEPTH;
		pMsgFifo->Count--;
	}				
	return pMsg;
}
