bluetoothgps.cpp

来自「一个mapxmobile+gps的小程序,需要先安装mapx mobile」· C++ 代码 · 共 146 行

CPP
146
字号
// 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; 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?