⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.cpp

📁 自己封装的能解析出GPS数据中的$GPRMC数据
💻 CPP
字号:
// GPS.cpp: implementation of the GPS class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GPS.h"
#include "string.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

GPS::GPS()
{
     gpsMessage[1024] = NULL;
	 buffHead = 0;
     buffEnd = 0;
}

GPS::~GPS()
{

}

void GPS::gpsGPRMC()
{	
	char tempStr[30] = {0};
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.time, tempStr);

	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.statu, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.latitude, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.southornorth, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.longitude, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.eastorwest, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.high, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.director, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.date, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.magic, tempStr);
	
	memset(tempStr, 0, 30);
	getStringEnd(',', tempStr);
	strcpy(gpsMCSignal.magicdirtor, tempStr);

/*	printf("**********************************************************\n");
	printf("Time        : %s\n", gpsMCSignal.time);
	printf("Statue      : %s\n", gpsMCSignal.statu);
	printf("Latitude    : %s\n", gpsMCSignal.latitude);
	printf("Southornorth: %s\n", gpsMCSignal.southornorth);
	printf("Longitude   : %s\n", gpsMCSignal.longitude);
	printf("Eastorwest  : %s\n", gpsMCSignal.eastorwest);
	printf("High        : %s\n", gpsMCSignal.high);
	printf("Director    : %s\n", gpsMCSignal.director);
	printf("Date        : %s\n", gpsMCSignal.date);
	printf("Magic       : %s\n", gpsMCSignal.magic);
	printf("Magicdirtor : %s\n", gpsMCSignal.magicdirtor);*/	
}

void GPS::getString(char strChar[])
{
	char temp[20] = {0}; 
	_strlwr(strChar);
//	checkNULL();
	while(gpsMessage[buffEnd] != '$')
	{
		gpsMessage[buffEnd] = 0;
//		gpsMessage[buffEnd][1] = 0;
		buffEnd = (buffEnd + 1) % 1024;
//		checkNULL();
		if(buffEnd > 1020)
			return ;
	}
	getStringEnd(',' ,temp);
	_strlwr(temp);
	strcpy(strChar, temp);
	return;
}

DWORD WINAPI GPS::analyseGPSProc(LPVOID lpparam)
{
	char singleType[10] = {'\0'};
	int  knowSignle = 0;
	while(1)
	{
		getString(singleType);	
		if(strcmp(singleType, "$gprmc") == 0)
		{
			knowSignle = 1;
			gpsGPRMC();
			return 0;
		}
	
		else if(buffEnd > 1020)
			return 0;	

/*		if(knowSignle == 0)
		{
		//	printf("%s.............\n", singleType);
		//	return 0;
		}
		knowSignle = 0;*/
	}
	return 0;
}

void GPS::checkNULL()
{
  //  while(gpsMessage[buffEnd][1] == 0);
}

void GPS::getStringEnd(char stopcn, char backstr[])
{
	int ii = 0;
//	checkNULL();
	while((gpsMessage[buffEnd] != stopcn) && (gpsMessage[buffEnd] != '\n'))
	{
		backstr[ii] = gpsMessage[buffEnd];
		gpsMessage[buffEnd] = 0;
		buffEnd =(buffEnd + 1) % 1024;
		ii++;
//		checkNULL();
	}
	gpsMessage[buffEnd] = 0;
	buffEnd =(buffEnd + 1) % 1024;	
	backstr[ii] = '\0';
}

void GPS::analyseDateTime()
{
	CString c;
	analyseGPSProc(NULL);

	int   Day,   Moon,   Year;
    int   hour,   minute,   second;   
    CString   str   =   gpsMCSignal.date ; 
	CString   str1   =   gpsMCSignal.time ; 
  
    Day   =   atoi(str.Mid(0,2));   
    Moon  =   atoi(str.Mid(2,2));   
    Year  =   atoi((const char   *)str.Mid(4,2)); 

	hour    =   atoi((const char   *)str1.Mid(0,2));   
    minute  =   atoi((const char   *)str1.Mid(2,2));   
    second  =   atoi((const char   *)str1.Mid(4,2)); 

	c.Format("20%02d-%d-%d",Year,Moon,Day);
	strcpy(gpsMCSignal.date,c);    
	
	c.Format("%d:%d:%d", hour,minute,second);
	strcpy(gpsMCSignal.time,c);
	
	if(strcmp(gpsMCSignal.southornorth, "S") == 0)
	{
		c.Format("-%s",gpsMCSignal.latitude);
		strcpy(gpsMCSignal.latitude,c); 
	}

	if(strcmp(gpsMCSignal.eastorwest, "W") == 0)
	{
		c.Format("-%s",gpsMCSignal.longitude);
		strcpy(gpsMCSignal.longitude,c); 
	}
}

⌨️ 快捷键说明

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