📄 cechat.cpp
字号:
j++;
break;
}
}
i--;
}
i--;
ORI_Gps.pdop = 0;
j = 0;
while(GPS_DATA[i] != ',')
{
if(GPS_DATA[i] != '.')
{
switch(j)
{
case 0:
ORI_Gps.pdop = GPS_DATA[i] - 48;
j++;
break;
case 1:
ORI_Gps.pdop = ORI_Gps.pdop + (GPS_DATA[i] -48) * 10;
j++;
break;
case 3:
ORI_Gps.pdop = ORI_Gps.pdop + (GPS_DATA[i] -48) * 100;
j++;
break;
}
}
i--;
}
temp = ORI_Gps.FixType;
ORI_Gps.FixType = GPS_DATA[9] - 48;
//GSA为四帧数据中最后一帧
#ifdef NAV_POS
// iLP_GetGpsSensorData(&ORI_Gps,Inertia_NAVMsg.Park);
#endif
#ifdef DEBUG_GPS
wsprintf (sShowGPS_Byte, TEXT ("GSA\r\n"));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
#endif
break;
case 4: //GSV Message
i = 0;
// find first ','
while(GPS_DATA[i] != ',') // skip "$GPGSV"
{
i++;
}
i++; // skip ','
ORI_Gps.msgnum = 0;
while(GPS_DATA[i] != ',') // 获取 msgnum
{
ORI_Gps.msgnum = ORI_Gps.msgnum * 10 + (GPS_DATA[i]-48);
i++;
}
i++;
while(GPS_DATA[i] != ',') // skip "msg #"
{
if((GPS_DATA[i]-48)==1)
{
iGSV_Index = 0;
memset( ORI_Gps.GSVMsg,0, sizeof( ORI_Gps.GSVMsg ));
}
i++;
}
i++; // skip ','
ORI_Gps.satsinview = 0;
while(GPS_DATA[i] != ',') // 获取 Total number of satellites in view
{
ORI_Gps.satsinview = ORI_Gps.satsinview * 10 + (GPS_DATA[i]-48);
i++;
}
i++; // skip ','
while(1) // 获取 GSV information
{
ORI_Gps.GSVMsg[iGSV_Index].prn = 0;
while(GPS_DATA[i] != ',') // 获取 prn
{
ORI_Gps.GSVMsg[iGSV_Index].prn = ORI_Gps.GSVMsg[iGSV_Index].prn * 10 + (GPS_DATA[i]-48);
i++;
}
i++;
ORI_Gps.GSVMsg[iGSV_Index].elev = 0;
while(GPS_DATA[i] != ',') // 获取 elev
{
ORI_Gps.GSVMsg[iGSV_Index].elev = ORI_Gps.GSVMsg[iGSV_Index].elev * 10 + (GPS_DATA[i]-48);
i++;
}
i++;
ORI_Gps.GSVMsg[iGSV_Index].azimuth = 0;
while(GPS_DATA[i] != ',') // 获取 azimuth
{
ORI_Gps.GSVMsg[iGSV_Index].azimuth = ORI_Gps.GSVMsg[iGSV_Index].azimuth * 10 + (GPS_DATA[i]-48);
i++;
}
i++;
ORI_Gps.GSVMsg[iGSV_Index].SNR = 0;
while(GPS_DATA[i] != ',' && GPS_DATA[i] != '*') // 获取 elev
{
ORI_Gps.GSVMsg[iGSV_Index].SNR = ORI_Gps.GSVMsg[iGSV_Index].SNR * 10 + (GPS_DATA[i]-48);
i++;
}
iGSV_Index++;
if(GPS_DATA[i] == '*')
break;
i++;
}
i++;
#ifdef DEBUG_GPS
wsprintf (sShowGPS_Byte, TEXT ("GSV\r\n"));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
#endif
break;
case 5: //RMC Message
#if 1
i = 0;
for(j = 0;j< 7;j++)
{
while(GPS_DATA[i] != ',')
{
i++;
}
i++;
}
ORI_Gps.Speed = 0;
while(GPS_DATA[i] != ',')
{
if(GPS_DATA[i] != '.')
ORI_Gps.Speed = ORI_Gps.Speed * 10 + (GPS_DATA[i]-48);
i++;
}
i++;
ORI_Gps.Heading = 0;
while(GPS_DATA[i] != ',')
{
if(GPS_DATA[i] != '.')
ORI_Gps.Heading = ORI_Gps.Heading * 10 + (GPS_DATA[i]-48);
i++;
}
i++;
for(j=0;j<6;j++)
ORI_Gps.Date[j] = GPS_DATA[i+j]; //ddmmyy
ORI_Gps.TimeStamp = 0;//Inertia_NAVMsg.TimeStamp;
#ifdef NAV_POS
// if(ORI_Gps.FixType > 1)
// {
// iLP_GetGpsSensorData(&ORI_Gps,Inertia_NAVMsg.Park);
// }
#endif
#ifdef TEST_OUTPUT//测试代码
//输出显示发送给主控的GPS定位信息
#endif
#endif
// dr_vSiRF_Init();
#ifdef DEBUG_GPS
wsprintf (sShowGPS_Byte, TEXT ("RMC\r\n"));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
#endif
break;
case 6: // VTG Message
i = 0;
while(GPS_DATA[i] != ',') // skip "$GPVTG"
{
i++;
}
i++; // skip ','
ORI_Gps.Heading = 0;
while(GPS_DATA[i] != ',') // get Heading %1 degree
{
if(GPS_DATA[i] != '.')
ORI_Gps.Heading = ORI_Gps.Heading * 10 + (GPS_DATA[i]-48);
i++;
}
i++; //skip ','
for(j = 0;j<3;j++)
{
while(GPS_DATA[i] != ',') // skip "T,m.m,M,"
{
i++;
}
i++;
}
ORI_Gps.Speed = 0;
while(GPS_DATA[i] != ',') // get speed,knots. 1% knots.
{
if(GPS_DATA[i] != '.')
ORI_Gps.Speed = ORI_Gps.Speed * 10 + (GPS_DATA[i]-48);
i++;
}
#ifdef NAV_POS
// iLP_GetGpsSensorData(&ORI_Gps,Inertia_NAVMsg.Park);
#endif
// 其余不作处理
#ifdef DEBUG_GPS
wsprintf (sShowGPS_Byte, TEXT ("VTG\r\n"));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
#endif
break;
case 7: //ZDA Message
i = 0;
while(GPS_DATA[i] != ',') // skip "$GPZDA"
{
i++;
}
i++; // skip ','
ORI_Gps.UTC = 0;
//calculate UTC
while(GPS_DATA[i] != ',') // 获取 UTC
{
if(GPS_DATA[i]!='.')
ORI_Gps.UTC = ORI_Gps.UTC * 10 + (GPS_DATA[i]-48);
i++;
}
ORI_Gps.UTC = ORI_Gps.UTC * 10; // 乘10,保持与SIRF一致
i++; // skip ','
for(j=0;j<8;j++)
ORI_Gps.Date[j] = GPS_DATA[i+j]; //ddmmyy
ORI_Gps.TimeStamp = 0;//Inertia_NAVMsg.TimeStamp;
if((ORI_Gps.FixType > 1) && (ORI_Gps.FixType != temp))
{
unsigned char year,month,date,hour,minutes,seconds,seconds0;
year = (ORI_Gps.Date[4]-48)*10+ORI_Gps.Date[5] - 48;
month = (ORI_Gps.Date[2] - 48) *10 + ORI_Gps.Date[3] - 48;
date = (ORI_Gps.Date[0] - 48)*10 + ORI_Gps.Date[1] - 48;
hour = ORI_Gps.UTC / 10000000;
minutes = (ORI_Gps.UTC % 10000000) /100000;
seconds = (ORI_Gps.UTC % 100000) /1000;
seconds0 = (ORI_Gps.UTC % 1000) /10;
/*
NRtc_Time.year=year;
NRtc_Time.month=month;
NRtc_Time.date=date;
NRtc_Time.day=0;
NRtc_Time.hour=hour;
NRtc_Time.minutes=minutes;
NRtc_Time.seconds=seconds;
NRtc_Time.seconds0=seconds0;
NRtc_Time.time_12_24=0;
*/
// Rtc_SetTime(&NRtc_Time);
// Rtc_SetTime(year,month,date,0,hour,minutes,seconds,seconds0,0);
}
#ifdef DEBUG_GPS
wsprintf (sShowGPS_Byte, TEXT ("ZDA\r\n"));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
#endif
break;
}
}
//*************************************************************************************************
// 函数原型
//*************************************************************************************************
int Calc_checksum(char* sz, int nCount)
{
unsigned char cs=0,ss=0;
int i=0,j=0;
for(j=0;j<nCount;j++){
if(sz[j]=='$' && sz[j+1]=='G' && sz[j+2]=='P'){
j++;
break;
}
}
for (i=j; i<nCount-1; i++)
{
ss=sz[i];
if(sz[i]!='*')
cs = cs ^((unsigned char)sz[i]);
else
break;
}
ss=sz[i+1];
if (ss > 0x40) ss = ss - 7;
ss = (ss & 0x0f) * 16 + (sz[i+2]- 0x30);
if (sz[i+2] > 0x40) ss = ss - 7;
if(ss==cs)
return 1;
else
return 0;
}
//高端获取GPS数据
#define MAX_LENGTH 64
int i_ShowGpsData(HWND hWnd,char *GPS_DATA)
{
LPWSTR wpstr = new WORD[MAX_LENGTH];
MultiByteToWideChar(CP_ACP,0,GPS_DATA,MAX_LENGTH,wpstr,MAX_LENGTH);
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)wpstr);
// wsprintf (sShowGPS_Byte, TEXT ("\r\n"));
// SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
return 1;
}
/*
wsprintf (sShowGPS_Byte, TEXT ("\r\n"));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
for(i=0;i<pstGpsMsg->satsinview;i++)
{
_itoa(ORI_Gps.GSVMsg[i].SNR,pstr,10);
MultiByteToWideChar(CP_ACP,0,pstr,10,wpstr,10);
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)wpstr);
wsprintf (sShowGPS_Byte, TEXT (" "));
SendDlgItemMessage (hWnd, ID_RCVTEXT, EM_REPLACESEL, 0, (LPARAM)sShowGPS_Byte);
}
*/
////////////////////////////////////////////////////////////////////////////////
// IO访问
static BYTE SrIoControl(DWORD dwCmd, BYTE Input, BYTE Output)
{
DWORD dwWriteBytes;
if (m_hGio == INVALID_HANDLE_VALUE)
{ // 尚未创建IO设备对象
m_hGio = CreateFile(L"GIO1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (m_hGio == INVALID_HANDLE_VALUE)
return SC_ERROR;
}
DeviceIoControl(m_hGio, dwCmd, &Input, 1, &Output, 1, &dwWriteBytes, NULL);
return Output;
}
DWORD ConvertHWID_to_DeviceID(unsigned char *rdata)
{
unsigned char dat[6];
char numb[24]={0};
unsigned char a8[8];
unsigned char temp[3];
SetWindowText(hRecStarSNRInfo0, _T(""));
LPWSTR wpstr = new WORD[21];
dat[0]=rdata[0];
dat[1]=rdata[1];
dat[2]=rdata[2];
dat[3]=rdata[3];
dat[4]=rdata[4];
dat[5]=rdata[5];
temp[0]=dat[0];
temp[1]=dat[1];
temp[2]=dat[2];
VtoC(temp,a8 );
numb[0]=a8[0];
numb[1]=a8[1];
numb[2]=a8[2];
numb[3]=a8[3];
numb[4]=' ';
numb[5]=a8[4];
numb[6]=a8[5];
numb[7]=a8[6];
numb[8]=a8[7];
temp[0]=dat[3];
temp[1]=dat[4];
temp[2]=dat[5];
VtoC(temp,a8 );
numb[9]=' ';
numb[10]=a8[0];
numb[11]=a8[1];
numb[12]=a8[2];
numb[13]=a8[3];
numb[14]=' ';
numb[15]=a8[4];
numb[16]=a8[5];
numb[17]=a8[6];
numb[18]=a8[7];
numb[19]=' ';
numb[20]='0';
numb[21]='0';
numb[22]='0';
numb[23]='0';
numb[24]='\0';
MultiByteToWideChar(CP_ACP,0,numb,-1,wpstr,24);
SetWindowText(hRecStarSNRInfo0, wpstr);
RETAILMSG(1,(TEXT("ENC - ~ ENC_Read\n")));
return 20;
}
void VtoC(unsigned char *a,unsigned char *cov )
{
int temp=0;
temp |= (*a)<<16;
temp |= *(a+1)<<8;
temp |= *(a+2);
*(cov+0) =(char)(((temp & (0x7<<21))>>21)+0x30);
*(cov+1) =(char)(((temp & (0x7<<18))>>18)+0x30);
*(cov+2) =(char)(((temp & (0x7<<15))>>15)+0x30);
*(cov+3) =(char)(((temp & (0x7<<12))>>12)+0x30);
*(cov+4) =(char)(((temp & (0x7<<9))>>9)+0x30);
*(cov+5) =(char)(((temp & (0x7<<6))>>6)+0x30);
*(cov+6) =(char)(((temp & (0x7<<3))>>3)+0x30);
*(cov+7) =(char)(((temp & (0x7<<0))>>0)+0x30);
}
unsigned char CHARtoINT(char str)
{
switch(str)
{
case '0':
return(0);
break;
case '1':
return(1);
break;
case '2':
return(2);
break;
case '3':
return(3);
break;
case '4':
return(4);
break;
case '5':
return(5);
break;
case '6':
return(6);
break;
case '7':
return(7);
break;
case '8':
return(8);
break;
case '9':
return(9);
break;
case 'A':
case 'a':
return(10);
break;
case 'B':
case 'b':
return(11);
break;
case 'C':
case 'c':
return(12);
break;
case 'D':
case 'd':
return(13);
break;
case 'E':
case 'e':
return(14);
break;
case 'F':
case 'f':
return(15);
break;
default:
iFlagError=1;
return(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -