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

📄 cechat.cpp

📁 基于WINCE的硬件ID转换程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		    			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 + -