www.pudn.com > HPMapx.rar > bluetoothgps.cpp
// bluetoothgps.cpp : implementation file
//
#include "stdafx.h"
#include "bluetoothgps.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CBlueToothGPS::CBlueToothGPS()
{
hwParentWindow = NULL;
m_GpsData=NULL;
strcpy(m_MainMsg,"");
}
void CBlueToothGPS::Clear()
{
if(!m_GpsData)return;
switch( CurrentType = IsValid() )
{
case GPGGA: delete (LPGPSGGA_DATA)m_GpsData; break;
case GPGSA: break;
case GPGSV: break;
case GPRMC: delete (PGPSRMC_DATA)m_GpsData; break;
case GPVTG: break;
}
m_GpsData = NULL;
}
double CBlueToothGPS::GetMapPosX()
{
if( CurrentType != GPGGA && CurrentType != GPRMC)
VERIFY(0);
return m_GpsData->IsParsed()? m_GpsData->GetLongitude() :0.00;
}
double CBlueToothGPS::GetMapPosY()
{
if( CurrentType != GPGGA && CurrentType != GPRMC)
VERIFY(0);
return m_GpsData->IsParsed()? m_GpsData->GetLatitude() :0.00 ;
}
double CBlueToothGPS::GetUTCTime()
{
if( CurrentType != GPGGA && CurrentType != GPRMC)
VERIFY(0);
return m_GpsData->IsParsed()? m_GpsData->GetHHMMSS_SSS():0.00 ;
}
int CBlueToothGPS::GetStarNumber()
{
if(CurrentType != GPGGA)
VERIFY(0);
return m_GpsData->IsParsed()? ((LPGPSGGA_DATA)m_GpsData)->GetStarNumber():0;
}
double CBlueToothGPS::GetSpeed()
{
if(CurrentType != GPRMC)
VERIFY(0);
return ((PGPSRMC_DATA)m_GpsData)->GetKMSpeed();
}
float CBlueToothGPS::GetDirection()
{
if(CurrentType != GPRMC)
VERIFY(0);
return ((PGPSRMC_DATA)m_GpsData)->GetDirection();
}
BEGIN_MESSAGE_MAP(CBlueToothGPS, CWnd)
//{{AFX_MSG_MAP(CBlueToothGPS)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_COMM_RXCHAR,OnRecvMessage)
END_MESSAGE_MAP()
// Open GPS
bool CBlueToothGPS::OpenGPS()
{
return m_Comm.Open( COMM_SET( m_hWnd ));
}
GPS_TYPE CBlueToothGPS::IsValid()
{
char *pDest = NULL;
if( (pDest= strstr(m_MainMsg,"GPGGA")) != NULL ) return GPGGA;
if( (pDest= strstr(m_MainMsg,"GPGSA")) != NULL ) return GPGSA;
if( (pDest= strstr(m_MainMsg,"GPGSV")) != NULL ) return GPGSV;
if( (pDest= strstr(m_MainMsg,"GPRMC")) != NULL ) return GPRMC;
if( (pDest= strstr(m_MainMsg,"GPVTG")) != NULL ) return GPVTG;
return UNKNOWN;
}
LONG CBlueToothGPS::OnRecvMessage(WPARAM ch, LPARAM port)
{
if( (char)ch != '\n' )
{
char chT[2];
chT[0] = ch;
chT[1] = '\0';
strcat(m_MainMsg,chT);
}
else
{
TRACE(L"\n");
AfxTrace(CString(m_MainMsg));
switch( CurrentType = IsValid() )
{
case GPGGA: m_GpsData = new GPSGGAData(m_MainMsg); break;
case GPRMC: m_GpsData = new GPSRMCData(m_MainMsg); break;
case GPGSA:
case GPGSV:
case GPVTG:
case UNKNOWN:
m_MainMsg[0] = '\0';
return -1;
}
m_MainMsg[0] = '\0';
if( !m_GpsData->IsParsed() )
{
Clear();
return 2;
}
// if( CurrentType == GPGGA)
// GetParent()->SendMessage(WM_USER_GGAPOS);
if( CurrentType == GPRMC)
GetParent()->SendMessage(WM_USER_RMCPOS);
}
return 1;
}