📄 nmeaparserdlg.cpp
字号:
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 + -