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

📄 nmeaparserdlg.cpp

📁 Read nmea file and send to com port. you can easly simulate the gps application
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		pSnr->SetColor(RGB(255,0,0));
		pSnr->SetPos(index*5);
#else
	// switch(m_NMEAParser.m_btGSAFixMode)
	switch( mode )
	{
		case 0 :  
			pSnr->SetColor(RGB(128,128,128));
			pSnr->SetPos(snr_val);
			break;
		case 1 :  
			pSnr->SetColor(RGB(255,0,0));
			pSnr->SetPos(snr_val);
			break;
		case 2 :  			
			pSnr->SetColor(RGB(0,255,0));
			pSnr->SetPos(snr_val);
			break;
		case 3 :  
			pSnr->SetColor(RGB(0,0,255));
			pSnr->SetPos(snr_val);
			break;
		default :  
			break;
	}
#endif

}

BOOL CNMEAParserDemoDlg::IsUsedInSolution( WORD wPrn)
{
	for ( int i=0; i < 12; i++ )
		if ( wPrn == m_NMEAParser.m_wGSASatsInSolution[i]) return TRUE;
	return FALSE;
}

void CNMEAParserDemoDlg::SoundNotify(void)
{
	m_nSoundTick++;

	if ( m_n3DFix != m_NMEAParser.m_btGSAFixMode ) {
		if ( m_NMEAParser.m_btGSAFixMode == 3 ) {  // 3D Fix
			MessageBeep(MB_ICONASTERISK);
			m_nSoundCnt = 0;
		}
		if ( m_NMEAParser.m_btGSAFixMode == 2 ) {	// 2D Fix
			MessageBeep(MB_OK);
			m_nSoundCnt = 0;
		}
		if ( m_NMEAParser.m_btGSAFixMode == 1 ) {	// Not Fix
			MessageBeep(MB_ICONQUESTION);
			m_nSoundCnt = 1;
			m_nSoundTick = 1;
		}
		m_n3DFix = m_NMEAParser.m_btGSAFixMode;
	}
	else if ( m_nSoundCnt ) {
		if ( !(m_nSoundTick%20) ) {
			MessageBeep(MB_ICONQUESTION);
		}
	}
}

void CNMEAParserDemoDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here

	free(gRxMegaBuf);
	
}

void CNMEAParserDemoDlg::OnPortOpen() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString PortName;
	PortName.Format("OPEN PORT: %s\r\n",byIndexComPort(m_iSerialPort));
	if(m_CommPort[0].m_bConnected == FALSE)//器飘啊 摧囚 乐阑 版快俊父 器飘甫 凯扁 困秦
	{
		m_CommPort[0].OpenPort(m_iSerialPort,byIndexComPort(m_iSerialPort), byIndexBaud(m_iBaudRate));
	}
	else
	{
		AfxMessageBox("Already Port open");
	}

}

void CNMEAParserDemoDlg::OnPortClose() 
{
	// TODO: Add your control notification handler code here
	
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString PortName;
	if(m_CommPort[0].m_bConnected == TRUE)
	{	
		m_CommPort[0].ClosePort();
	}
}

void CNMEAParserDemoDlg::OnFileOpen() 
{
	// TODO: Add your control notification handler code here
	//txt颇老阑 凯绢辑 SEND俊叼磐 芒俊 单捞磐 甫 持澜
	CString GetFileName;
	char *buf;
	CFile file;
	CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST, "Text File(*.*)|*.*", NULL);
	if(dlg.DoModal() == IDOK)
	{
		SetDlgItemText(IDC_FILE_NAME,dlg.GetFileName() );
		file.Open(dlg.GetFileName(),CFile::modeRead, NULL);
		DWORD len = file.GetLength();		
		m_cProgress.SetRange32(0, len);
		m_cProgress.SetPos(0);
		buf = new char[len];
		memset(buf,0,len);
		file.ReadHuge(buf, len);

// 		SetDlgItemText(IDC_SEND,buf);

		MakeNmeaData(buf,len);

		delete [] buf;
		file.Close();
	}	
}

void CNMEAParserDemoDlg::OnSendData() 
{
	// TODO: Add your control notification handler code here

	SetTimer(NMEA_SEND_TIMER, 1000/m_nTimerSpeed, NULL);	
}

void CNMEAParserDemoDlg::OnSendDataClear() 
{
	// TODO: Add your control notification handler code here
	
	m_EditSend.SetSel(0,-1);
	m_EditSend.Clear();
	m_strSend.Empty();
	m_EditSend.SetFocus();	

	m_iCount =0;
	m_EditReceive.SetSel(0, -1);
	m_EditReceive.Clear();
	m_strReceive.Empty();
}

void CNMEAParserDemoDlg::OnReleasedcaptureSliderSpeed(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	m_nTimerSpeed = m_SendSpeed.GetPos();

	SetTimer(NMEA_SEND_TIMER, 1000/m_nTimerSpeed, NULL);

	*pResult = 0;
}

void CNMEAParserDemoDlg::OnSelchangeSerialPort() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString change,str;
	m_iSerialPort = m_cSerialPort.GetCurSel();
	m_cSerialPort.GetLBText(m_iSerialPort,str);
}

void CNMEAParserDemoDlg::OnSelchangeBaudRate() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString change,str;
	m_iBaudRate = m_cBaudRate.GetCurSel();
	m_cBaudRate.GetLBText(m_iBaudRate,str);
}

CString CNMEAParserDemoDlg::byIndexComPort(int xPort)
{
	CString PortName;
	switch(xPort)
	{
		case 0:		PortName = "COM1"; 			break;
			
		case 1:		PortName = "COM2";			break;

		case 2:		PortName = "COM3"; 			break;
		
		case 3:		PortName = "COM4";			break;
			
		case 4:		PortName = "\\\\.\\COM5"; 	break;
			
		case 5:		PortName = "\\\\.\\COM6";	break;
			
		case 6:		PortName = "\\\\.\\COM7"; 	break;
			
		case 7:		PortName = "\\\\.\\COM8";	break;
		
		case 8:		PortName = "\\\\.\\COM9"; 	break;
			
		case 9:		PortName = "\\\\.\\COM10";	break;
	}


	
	return PortName;
}

DWORD CNMEAParserDemoDlg::byIndexBaud(int xBaud)
{
	DWORD dwBaud;
	switch(xBaud)
	{
		case 0:		dwBaud = CBR_4800;		break;
			
		case 1:		dwBaud = CBR_9600;		break;
	
		case 2:		dwBaud = CBR_14400;		break;
	
		case 3:		dwBaud = CBR_19200;		break;
	
		case 4:		dwBaud = CBR_38400;		break;
	
		case 5:		dwBaud = CBR_56000;		break;
	
		case 6:		dwBaud = CBR_57600;		break;
	
		case 7:		dwBaud = CBR_115200;	break;
	}

	return dwBaud;
}

BYTE CNMEAParserDemoDlg::byIndexData(int xData)
{
	BYTE byData;
	switch(xData)
	{
		case 0 :	byData = 5;			break;
	
		case 1 :	byData = 6;			break;
		
		case 2 :	byData = 7;			break;
		
		case 3 :	byData = 8;			break;
	}
	return byData;
}

BYTE CNMEAParserDemoDlg::byIndexStop(int xStop)
{
	BYTE byStop;
	if(xStop == 0)
	{
		byStop = ONESTOPBIT;
	}
	else
	{
		byStop = TWOSTOPBITS;
	}
	return byStop;
}
BYTE CNMEAParserDemoDlg::byIndexParity(int xParity)
{
	BYTE byParity;
	switch(xParity)
	{
	case 0 :	byParity = NOPARITY;	break;
	
	case 1 :	byParity = ODDPARITY;	break;
	
	case 2 :	byParity = EVENPARITY;	break;
	}

	return byParity;
}

BYTE CNMEAParserDemoDlg::byCode2AsciiValue(char cData)
{
	//捞 窃荐绰 char巩磊甫 hex蔼栏肺 函版秦 林绰 窃荐 涝聪促.
	BYTE byAsciiValue;
	if( ( '0' <= cData ) && ( cData <='9' ) )
	{
		byAsciiValue = cData - '0';
	}
	else if( ( 'A' <= cData ) && ( cData <= 'F' ) )
	{
		byAsciiValue = (cData - 'A') + 10;
	}
	else if( ( 'a' <= cData ) && ( cData <= 'f' ) )
	{
		byAsciiValue = (cData - 'a') + 10;
	}
	else
	{
		byAsciiValue = 0;
	}
	return byAsciiValue;
}

long CNMEAParserDemoDlg::OnCommunication(WPARAM wParam, LPARAM lParam)
{
	UpdateData(TRUE);//罐绰 单捞磐 鸥涝阑 舅扁 困秦
	CString str = "";
	CString tmpStr = "";
	BYTE aByte; //单捞磐甫 历厘且 函荐 
	int iSize;
	
	if ( lParam > 4 ) return 0;
	if ( lParam < 0 ) return 0;

	iSize =  (m_CommPort[lParam].m_QueueRead).GetSize(); //器飘肺 甸绢柯 单捞磐 肮荐
												 //SetCommState俊 汲沥等 郴侩 锭巩俊 芭狼 8俺究 甸绢咳
	m_iSize += iSize;	//罐篮 单捞磐狼 醚 肮荐甫 汲沥芒俊 焊咯林扁 困秦 

	for(int i  = 0 ; i < iSize; i++)//甸绢柯 肮荐 父怒 单捞磐甫 佬绢 客 拳搁俊 焊咯淋
	{
		(m_CommPort[lParam].m_QueueRead).GetByte(&aByte);//钮俊辑 单捞磐 茄俺甫 佬绢咳
		str.Format("%c", aByte);
		tmpStr += str;
	}	

	if ( m_EditReceive.GetLineCount() > 128 ) {
		m_EditReceive.SetSel(0,-1);
		m_EditReceive.Clear();
		m_strReceive.Empty();
	}


	m_EditReceive.SetSel(-1,0);
	m_EditReceive.ReplaceSel(tmpStr);//拳搁俊 罐篮 单捞磐 焊咯淋
	return 1;
}

void CNMEAParserDemoDlg::InitNmeaData(void)
{
	m_pNmeaData = NULL;
	m_nTotalCount = 0;
	m_nCount = 0;
}

void CNMEAParserDemoDlg::MakeNmeaData(char *data, int len)
{
	ClearNmeaData();

	m_pNmeaData = new char[len];

	memcpy( m_pNmeaData, data, len);

	m_nTotalCount = len;

}

void CNMEAParserDemoDlg::ClearNmeaData(void)
{
	if ( m_pNmeaData ) {
		delete [] m_pNmeaData;
	}
	InitNmeaData();
}

void CNMEAParserDemoDlg::SendNmeaData(void)
{
	char NmeaBuf[128];
	int count=0;

	memset( NmeaBuf, 0x0, 128 );
	if ( (m_nCount < m_nTotalCount) && m_pNmeaData ) {
		for ( count = 0 ; count < 128 ; count++ ) {
			NmeaBuf[count] = m_pNmeaData[m_nCount++];
			if ( m_nCount >= m_nTotalCount ) break;
			if ( NmeaBuf[count] == '\n' ) break;
		}
		m_cProgress.SetPos(m_nCount);

		count++;

//		CString str = &NmeaBuf[m_nCount%1024];
		CString str = NmeaBuf;

		if ( m_EditSend.GetLineCount() > 128 ) {
			m_EditSend.SetSel(0,-1);
			m_EditSend.Clear();
			m_strSend.Empty();
		}
		m_EditSend.SetSel(-1,0);
		m_EditSend.ReplaceSel(str);//拳搁俊 罐篮 单捞磐 焊咯淋

		ParseNmeaData((char *)NmeaBuf, count);

		//for ( int pi=0;pi<4;pi++)
		//	m_CommPort[pi].WriteComm((unsigned char *)NmeaBuf, count) ;
	}
	else if ( m_bRepeat ) {
		m_nCount = 0;
		m_cProgress.SetPos(m_nCount);
	}
	else{
		ClearNmeaData();
		KillTimer( NMEA_SEND_TIMER );
	}
}

void CNMEAParserDemoDlg::ParseNmeaData(char *pBuff, int dwBytesRead)
{
	int i;

#if 0  // cglee_gps_debug
	{
		unsigned char *pString;
		RETAILMSG(1,(TEXT("\r\nGet GPS[0x%08X][%03d]\r\n"), pBuff,dwBytesRead));
		for ( i=0;i<dwBytesRead;i++) {
			RETAILMSG(1,(TEXT("%c"),pBuff[i]));
		}
	}
#endif

	if(!m_NMEAParser.ParseBuffer((unsigned char *)pBuff, dwBytesRead) )   // save Error message
	{
		for (i=0; i<dwBytesRead; i++)
			GpsErrBuf[g_errCnt++] = pBuff[i];
	}

	if ( READMAXSIZE - g_nCnt < 255 )   // Gps Log buffer is full
	{
		CreateGpsLog(gRxMegaBuf,_T("GpsLog"),g_nCnt);
		g_nCnt = 0;
	}
	if ( ERRMAXSIZE - g_errCnt < 255 )   // Error Log buffer is full
	{
		GpsErrBuf[g_errCnt] = '\0';
		CreateGpsLog(GpsErrBuf, _T("ErrLog"),g_errCnt);
		g_errCnt = 0;
	}  //051031hj

	SoundNotify();

#if 0
	if ( m_NMEAParser.m_dwGGACount != m_dwDataCount ) {
		m_dwDataCount = m_NMEAParser.m_dwGGACount;
	
		if ( !m_NMEAParser.m_dGGALongitude ) return;
		if ( !m_NMEAParser.m_dGGALatitude ) return;
		if ( m_NMEAParser.m_btGGAGPSQuality == 0) return;

		if ( (m_NMEAParser.m_dGGALongitude == m_gPrevDataSet.GetXData() ) &&
			 (m_NMEAParser.m_dGGALatitude == m_gPrevDataSet.GetYData() ) ) return;

		m_gPrevDataSet.SetPosition( m_NMEAParser.m_dGGALongitude, m_NMEAParser.m_dGGALatitude);
	
		CGraphDataSet* graphDataSet = new CGraphDataSet();
		graphDataSet->SetPosition(m_NMEAParser.m_dGGALongitude, m_NMEAParser.m_dGGALatitude);
		m_pGraph->AddDataSet(graphDataSet);

	}
#endif
}

void CNMEAParserDemoDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	
	for( int i=0;i<4;i++) {
		if(m_CommPort[i].m_bConnected == TRUE)	{	
			m_CommPort[i].ClosePort();
		}
	}

	ClearNmeaData();

// cglee	delete m_pGraph;

	CDialog::OnClose();
}

void CNMEAParserDemoDlg::OnBtnPause() 
{
	// TODO: Add your control notification handler code here

	KillTimer(NMEA_SEND_TIMER);
	
}

void CNMEAParserDemoDlg::OnBtnStop() 
{
	// TODO: Add your control notification handler code here

	KillTimer(NMEA_SEND_TIMER);

	ClearNmeaData();
}

void CNMEAParserDemoDlg::OnChkRepeat() 
{
	// TODO: Add your control notification handler code here

	m_bRepeat = !m_bRepeat;
}

void CNMEAParserDemoDlg::OnBtnStep() 
{
	// TODO: Add your control notification handler code here
	
	SendNmeaData();
	UpdateText();
	
}

void CNMEAParserDemoDlg::OnBtnUp() 
{
	// TODO: Add your control notification handler code here

	m_nTimerSpeed++;
	
	if ( m_nTimerSpeed > 100 ) m_nTimerSpeed = 100;

	m_SendSpeed.SetPos(m_nTimerSpeed);

	SetTimer(NMEA_SEND_TIMER, 1000/m_nTimerSpeed, NULL);
	
}

void CNMEAParserDemoDlg::OnBtnDown() 
{
	// TODO: Add your control notification handler code here

	m_nTimerSpeed--;
	
	if ( m_nTimerSpeed < 1 ) m_nTimerSpeed = 1;

	m_SendSpeed.SetPos(m_nTimerSpeed);

	SetTimer(NMEA_SEND_TIMER, 1000/m_nTimerSpeed, NULL);
	
}

void CNMEAParserDemoDlg::OnCheckYear() 
{
	// TODO: Add your control notification handler code here

	m_bSimYear = !m_bSimYear;
	m_NMEAParser.m_bSimYear = m_bSimYear;
	
}

void CNMEAParserDemoDlg::OnPortOpen2() 
{
	// TODO: Add your control notification handler code here
	
	UpdateData(TRUE);
	CString PortName;
	PortName.Format("OPEN PORT: %s\r\n",byIndexComPort(m_iSerialPort2));
	if(m_CommPort[1].m_bConnected == FALSE)//器飘啊 摧囚 乐阑 版快俊父 器飘甫 凯扁 困秦
	{
		m_CommPort[1].OpenPort(m_iSerialPort2,byIndexComPort(m_iSerialPort2), byIndexBaud(m_iBaudRate));
	}
	else
	{
		AfxMessageBox("Already Port open");
	}
}

void CNMEAParserDemoDlg::OnPortOpen3() 
{
	// TODO: Add your control notification handler code here

	UpdateData(TRUE);
	CString PortName;
	PortName.Format("OPEN PORT: %s\r\n",byIndexComPort(m_iSerialPort3));
	if(m_CommPort[2].m_bConnected == FALSE)//器飘啊 摧囚 乐阑 版快俊父 器飘甫 凯扁 困秦
	{
		m_CommPort[2].OpenPort(m_iSerialPort3,byIndexComPort(m_iSerialPort3), byIndexBaud(m_iBaudRate));
	}
	else
	{
		AfxMessageBox("Already Port open");
	}	
}

void CNMEAParserDemoDlg::OnPortOpen4() 
{
	// TODO: Add your control notification handler code here

	UpdateData(TRUE);
	CString PortName;
	PortName.Format("OPEN PORT: %s\r\n",byIndexComPort(m_iSerialPort4));
	if(m_CommPort[3].m_bConnected == FALSE)//器飘啊 摧囚 乐阑 版快俊父 器飘甫 凯扁 困秦
	{
		m_CommPort[3].OpenPort(m_iSerialPort4,byIndexComPort(m_iSerialPort4), byIndexBaud(m_iBaudRate));
	}
	else
	{
		AfxMessageBox("Already Port open");
	}	
}

⌨️ 快捷键说明

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