⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 savegpscommand.c

📁 分析GPS数据,是自己在一个手机项目上的代码. 分析接收到GPS数据,然后得到每条GPS数据分别存在CommandBuf中用于之后的处理 其中有比较严格的容错处理.对 很敏感
💻 C
字号:
/********************************************************************
分析GPS数据,是自己在一个手机项目上的代码.
分析接收到GPS数据,然后得到每条GPS数据分别存在CommandBuf中用于之后的处理
其中有比较严格的容错处理.对\n很敏感
********************************************************************/
BOOL SaveGPSCommand(UINT16 Len, UINT8 *ComBuf)
{
	static UINT8 BufIndex = 0;
	static BOOL NewCom = FALSE;
	UINT8 *pbuf, ComTemp;
	UINT16 i;
	BOOL NewComTemp = FALSE;
	BOOL En_ComDecode = FALSE;
	
	pbuf = GeneralUartCom.CommandBuf[ComIndex] + BufIndex;
	for(i=0; i<Len; i++)
	{
		ComTemp = *(ComBuf+i);
		if( (ComTemp == '\r') || (ComTemp == '\n') )
		{
			if(ComTemp == '\r')
			{
				if(BufIndex > 0)
				{
					if( (*(pbuf-1) == '\r') || (*(pbuf-1) == '\n') )
					{
						NewComTemp = TRUE;
					}
					else
					{
						if(BufIndex < COMMAND_LENGHT)
						{
							*(pbuf++) = ComTemp;
							BufIndex ++;
						}
						else
						{
							pbuf = GeneralUartCom.CommandBuf[ComIndex];
							memset(pbuf, 0, COMMAND_LENGHT);
							*(pbuf++) = ComTemp;
							BufIndex = 1;
						}
					}
				}
				else
				{
					*(pbuf++) = ComTemp;
					BufIndex = 1;
				}
			}
			else		// if(ComTemp == '\n')
			{
				if(BufIndex > 0)
				{
					if(*(pbuf-1) == '\r')
					{
						if(BufIndex < COMMAND_LENGHT)
						{
							*(pbuf++) = ComTemp;
							BufIndex ++;
						}
						else
						{
							pbuf = GeneralUartCom.CommandBuf[ComIndex];
							memset(pbuf, 0, COMMAND_LENGHT);
							*(pbuf++) = ComTemp;
							BufIndex = 1;
						}
					}
					else if(*(pbuf-1) == '\n')
					{
						NewComTemp = TRUE;
					}
					else
					{
						if(BufIndex < COMMAND_LENGHT)
						{
							*(pbuf++) = ComTemp;
							BufIndex ++;
						}
						else
						{
							pbuf = GeneralUartCom.CommandBuf[ComIndex];
							memset(pbuf, 0, COMMAND_LENGHT);
							*(pbuf++) = ComTemp;
							BufIndex = 1;
						}
					}
				}
				else		// if(BufIndex == 0)
				{
					*(pbuf++) = ComTemp;
					BufIndex = 1;
				}
			}
			if(NewComTemp == TRUE)
			{
				NewComTemp = FALSE;
				NewCom = FALSE;
				GeneralUartCom.Com_Used[ComIndex] = TRUE;
				En_ComDecode = TRUE;
				GeneralUartCom.ComIndex = ComIndex;
				
				if(ComIndex < COMMAND_COUNT)
					ComIndex ++;
				else
					ComIndex = 0;
				
				pbuf = GeneralUartCom.CommandBuf[ComIndex];
				memset(pbuf, 0, COMMAND_LENGHT);
				*(pbuf++) = ComTemp;
				BufIndex = 1;
			}
			NewCom = TRUE;
		}
		else
		{
			if(NewCom == TRUE)
			{
				NewCom = FALSE;
				GeneralUartCom.Com_Used[ComIndex] = TRUE;
				En_ComDecode = TRUE;
				GeneralUartCom.ComIndex = ComIndex;
				
				if(ComIndex < COMMAND_COUNT)
					ComIndex ++;
				else
					ComIndex = 0;
				
				BufIndex = 0;
				pbuf = GeneralUartCom.CommandBuf[ComIndex];
				memset(pbuf, 0, COMMAND_LENGHT);
			}
			
			if(BufIndex < COMMAND_LENGHT)
			{
				*(pbuf++) = ComTemp;
				BufIndex ++;
			}
			else
			{
				pbuf = GeneralUartCom.CommandBuf[ComIndex];
				memset(pbuf, 0, COMMAND_LENGHT);
				*(pbuf++) = ComTemp;
				BufIndex = 1;
			}
		}
	}	
	if(En_ComDecode)
	{
		GeneralUartCom.Enproc = TRUE;
		mmi_SendMessage(MSG_DECODE_GPSDATA, NULL);
	}
	return En_ComDecode;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -