?? gpsbuf.cpp
字號:
// GpsBuf.cpp: implementation of the CGpsBuf class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GpsRecv.h"
#include "GpsBuf.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGpsBuf::CGpsBuf()
{
ReceiveData_InPtr = 0;
ReceiveData_OutPtr = 0;
iReadLength = 0;
}
CGpsBuf::~CGpsBuf()
{
}
void CGpsBuf::Write(BYTE * Buf, int len)
{
for(int i = 0; i < len; i++)
{
ReceiveData[ReceiveData_InPtr] = Buf[i];
ReceiveData_InPtr = ReceiveData_InPtr + 1;
if(ReceiveData_InPtr >= GPS_BUFFER_LENGTH)
ReceiveData_InPtr = 0;
}
}
int CGpsBuf::Read(BYTE * bBuf, int & iLength)
{
if(IsFrameGps())
{
for(int i = 0; i < iReadLength; i++)
{
bBuf[i] = ReceiveData[ReceiveData_OutPtr];
ReceiveData_OutPtr = ReceiveData_OutPtr + 1;
if(ReceiveData_OutPtr >= GPS_BUFFER_LENGTH)
ReceiveData_OutPtr = 0;
}
iLength = iReadLength;
bBuf[iLength] = '\0';
return 1;
}
return 0;
}
int CGpsBuf::GetDataBufSpace(void)
{
int length;
if(ReceiveData_InPtr == ReceiveData_OutPtr)
length = GPS_BUFFER_LENGTH - 1;
else if((ReceiveData_InPtr + 1) % GPS_BUFFER_LENGTH == ReceiveData_OutPtr)
length = 0;
else if(ReceiveData_InPtr > ReceiveData_OutPtr)
length = GPS_BUFFER_LENGTH - (ReceiveData_InPtr - ReceiveData_OutPtr) - 1;
else if(ReceiveData_InPtr < ReceiveData_OutPtr)
length = ReceiveData_OutPtr - ReceiveData_InPtr - 1;
return length;
}
int CGpsBuf::GetBufDataLength(void)
{
int length;
length = GPS_BUFFER_LENGTH - GetDataBufSpace() - 1;
return length;
}
BOOL CGpsBuf::IsFrameGps(void)
{
int step = 0;
int head = 0, tail = 0;
int len = GetBufDataLength();
while(len > 6)
{
if(!(ReceiveData[ReceiveData_OutPtr] == '$'
&& ReceiveData[(ReceiveData_OutPtr+1)%GPS_BUFFER_LENGTH] == 'G'
&& ReceiveData[(ReceiveData_OutPtr+2)%GPS_BUFFER_LENGTH] == 'P'
&& ReceiveData[(ReceiveData_OutPtr+3)%GPS_BUFFER_LENGTH] == 'R'
&& ReceiveData[(ReceiveData_OutPtr+4)%GPS_BUFFER_LENGTH] == 'M'
&& ReceiveData[(ReceiveData_OutPtr+5)%GPS_BUFFER_LENGTH] == 'C'))
{
ReceiveData_OutPtr++;
if(ReceiveData_OutPtr >= GPS_BUFFER_LENGTH)
ReceiveData_OutPtr = 0;
len = GetBufDataLength();
if(++step >= 300) break;
}
else
{
head = 1; //Find the Head
break;
}
}
if(head != 1) return FALSE;
len = GetBufDataLength();
step = 0;
DWORD ptr = ReceiveData_OutPtr;
while(head && len > 0)
{
if(!(ReceiveData[ptr] == 0x0d
&& ReceiveData[(ptr+1)%GPS_BUFFER_LENGTH] == 0x0a))
{
ptr++;
if(ptr >= GPS_BUFFER_LENGTH) ptr = 0;
if(ptr == ReceiveData_InPtr) break;
if(++step >= 100)
{
ReceiveData_OutPtr = (ReceiveData_OutPtr + 100) % GPS_BUFFER_LENGTH;
break;
}
}
else
{
tail = 1; //Find the Tail
break;
}
}
if(head == 1 && tail == 1)
{
iReadLength = (ptr - ReceiveData_OutPtr + 2 + GPS_BUFFER_LENGTH) % GPS_BUFFER_LENGTH;
return TRUE;
}
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -