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;  
}