📄 savegpscommand.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 + -