?? 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 + -