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

📄 gps_nmea_rmc_interpreter.c

📁 uCOS2 for 51系列
💻 C
📖 第 1 页 / 共 2 页
字号:
																	current_state = GPS_NMEA_RMC_SPEED_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;			


//*********************************************************************************************************
//**************************************	seg spd.value 	***********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_SPEED_SEG			:	switch(cnt)
												{
													case 0	:	gpsdata_buf.spd.value = (rx-'0')*1852/10;
																break;
													case 1	:
													case 2	:
													case 3	:
													case 4	:	if(rx != '.')
																{ 	
																	gpsdata_buf.spd.value *= 10;		
																	gpsdata_buf.spd.value += (rx-'0')*1852/10;
																}
																else if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_SPEED_DIR_SEG;
																	seg_offset = *prx_counter + 1;
																}
																break;
														
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_SPEED_DIR_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;				
//**************************************	seg spd.dir 	***********************************************
		case GPS_NMEA_RMC_SPEED_DIR_SEG		:	switch(cnt)
												{
													case 0	:	gpsdata_buf.spd.dir = (rx-'0');
																break;
													case 1	:
													case 2	:
													case 3	:
													case 4	:	if(rx != '.')
																{ 	
																	gpsdata_buf.spd.dir *= 10;		
																	gpsdata_buf.spd.dir += (rx-'0');
																}
																else if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_DATE_SEG;
																	seg_offset = *prx_counter + 1;
																}
																break;
														
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_DATE_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;		
//*********************************************************************************************************
//**************************************	seg date.date 	***********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_DATE_SEG		:		switch(cnt)
												{
													case 0	:	gpsdata_buf.date.date = (rx-'0')*10;
																break;
													case 1	:	gpsdata_buf.date.date += (rx-'0');
																break;
//**************************************	seg date.month 	**********************************************
													case 2	:	gpsdata_buf.date.month = (rx-'0')*10;
																break;
													case 3	:	gpsdata_buf.date.month += (rx-'0');
																break;
//**************************************	seg date.year 	**********************************************
													case 4	:	gpsdata_buf.date.year = (rx-'0')*10;
																break;
													case 5	:	gpsdata_buf.date.year += (rx-'0');
																break;
//******************************************	, 	******************************************************
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_MAG_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
											  	}
												break;
//*********************************************************************************************************
//**************************************	seg mag.value 	***********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_MAG_SEG			:	switch(cnt)
												{
													case 0	:	gpsdata_buf.mag.value = (rx-'0')*1852/10;
																break;
													case 1	:
													case 2	:
													case 3	:
													case 4	:	if(rx != '.')
																{ 	
																	gpsdata_buf.mag.value *= 10;		
																	gpsdata_buf.mag.value += (rx-'0')*1852/10;
																}
																else if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_MAG_DIR_SEG;
																	seg_offset = *prx_counter + 1;
																}
																break;
														
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_MAG_DIR_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;				
//**************************************	seg mag.dir 	***********************************************
		case GPS_NMEA_RMC_MAG_DIR_SEG		:	switch(cnt)
												{
													case 0	:	gpsdata_buf.mag.dir = rx;
																break;
//******************************************	, 	****************************************************
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_MODE_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;
//*********************************************************************************************************
//******************************************	seg mode 	***********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_MODE_SEG			:	switch(cnt)
												{
													case 0	:	gpsdata_buf.mag.dir = rx;
																break;
													default	:	if(rx == '*')
																{
																	current_state = GPS_NMEA_RMC_CHECKSUM_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;
//*********************************************************************************************************
//******************************************	seg checksum	*******************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_CHECKSUM_SEG		:	switch(cnt)
												{
													case 0	:	if((rx>='a')&&(rx<='f'))
																	gpsdata_buf.checksum = (0x0a + (rx - 'a'))<<4 ;
																else if((rx>='A')&&(rx<='F'))
																	gpsdata_buf.checksum = (0x0a + (rx - 'A'))<<4 ;
																else if((rx>='0')&&(rx<='9'))
																	gpsdata_buf.checksum = (rx - '0')<<4 ;
																else
																	*prx_counter = 0;
																break;
													case 1	:	if((rx>='a')&&(rx<='f'))
																	gpsdata_buf.checksum += 0x0a + (rx - 'a') ;
																else if((rx>='A')&&(rx<='F'))
																	gpsdata_buf.checksum += 0x0a + (rx - 'A') ;
																else if((rx>='0')&&(rx<='9'))
																	gpsdata_buf.checksum += rx - '0' ;
																else
																	*prx_counter = 0;
																break;
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_END_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;

	}

	if(current_state != GPS_NMEA_RMC_CHECKSUM_SEG)
		checksum ^= rx;
	else if(current_state == GPS_NMEA_RMC_END_SEG)
	{
		if(checksum == gpsdata_buf.checksum);
//			memcpy()
		seg_offset = 0;
		checksum = 0;
		current_state = GPS_MOTO_TYPE_SEG;

	}

}


/*********************************************************************************************************
                            End Of File
**********************************************************************************************************/

⌨️ 快捷键说明

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