text: /*
  *********************************************************************************************************
  *
  *	模块名称 : 消息处理模块
  *	文件名称 : bsp_msg.c
  *	版    本 : V1.0
  *	说    明 : 消息处理机制。
  *
  *	修改记录 :
  *		版本号  日期        作者     说明
  *		V1.0    2015-03-27 armfly  正式发布
  *
  *	Copyright (C), 2014-2015, 安富莱电子 www.armfly.com
  *
  *********************************************************************************************************
  */
  
  #include "bsp.h"
  
  MSG_FIFO_T g_tMsg;
  
  /*
  *********************************************************************************************************
  *	函 数 名: bsp_InitMsg
  *	功能说明: 初始化消息缓冲区
  *	形    参:  无
  *	返 回 值: 无
  *********************************************************************************************************
  */
  void bsp_InitMsg(void)
  {
  	bsp_ClearMsg();
  }
  
  /*
  *********************************************************************************************************
  *	函 数 名: bsp_PutMsg
  *	功能说明: 将1个消息压入消息FIFO缓冲区。
  *	形    参:  _MsgCode : 消息代码
  *			  _pMsgParam : 消息参数，一般指向某个特定的结构体. 或者是0
  *	返 回 值: 无
  *********************************************************************************************************
  */
  void bsp_PutMsg(uint16_t _MsgCode, uint32_t _MsgParam)
  {
  	g_tMsg.Buf[g_tMsg.Write].MsgCode = _MsgCode;
  	g_tMsg.Buf[g_tMsg.Write].MsgParam = _MsgParam;
  
  	if (++g_tMsg.Write  >= MSG_FIFO_SIZE)
  	{
  		g_tMsg.Write = 0;
  	}
  }
  
  /*
  *********************************************************************************************************
  *	函 数 名: bsp_GetMsg
  *	功能说明: 从消息FIFO缓冲区读取一个键值。
  *	形    参:  无
  *	返 回 值: 0 表示无消息； 1表示有消息
  *********************************************************************************************************
  */
  uint8_t bsp_GetMsg(MSG_T *_pMsg)
  {
  	MSG_T *p;
  
  	if (g_tMsg.Read == g_tMsg.Write)
  	{
  		return 0;
  	}
  	else
  	{
  		p = &g_tMsg.Buf[g_tMsg.Read];
  
  		if (++g_tMsg.Read >= MSG_FIFO_SIZE)
  		{
  			g_tMsg.Read = 0;
  		}
  		
  		_pMsg->MsgCode = p->MsgCode;
  		_pMsg->MsgParam = p->MsgParam;
  		return 1;
  	}
  }
  
  
  /*
  *********************************************************************************************************
  *	函 数 名: bsp_GetMsg2
  *	功能说明: 从消息FIFO缓冲区读取一个键值。使用第2个读指针。可以2个进程同时访问消息区。
  *	形    参:  无
  *	返 回 值: 0 表示无消息； 1表示有消息
  *********************************************************************************************************
  */
  uint8_t bsp_GetMsg2(MSG_T *_pMsg)
  {
  	MSG_T *p;
  
  	if (g_tMsg.Read2 == g_tMsg.Write)
  	{
  		return 0;
  	}
  	else
  	{
  		p = &g_tMsg.Buf[g_tMsg.Read2];
  
  		if (++g_tMsg.Read2 >= MSG_FIFO_SIZE)
  		{
  			g_tMsg.Read2 = 0;
  		}
  		
  		_pMsg->MsgCode = p->MsgCode;
  		_pMsg->MsgParam = p->MsgParam;
  		return 1;
  	}
  }
  
  /*
  *********************************************************************************************************
  *	函 数 名: bsp_ClearMsg
  *	功能说明: 清空消息FIFO缓冲区
  *	形    参：无
  *	返 回 值: 无
  *********************************************************************************************************
  */
  void bsp_ClearMsg(void)
  {
  	g_tMsg.Read = g_tMsg.Write;
  }
  
  /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
  