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

📄 gps_nmea_rmc_interpreter.c

📁 uCOS2 for 51系列
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************************************************
**				                       uC/OS 2 FOR PHILIP LPC21XX
**                                   The Real-Time Kernel(For ADS1.2)
**
**                                  
**                                                V0.00.1
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: Drv_GPS.C
**创   建   人: 龚树强
**最后修改日期: 2005年5月2日
**描        述: 串口0驱动程序
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 龚树强
** 版  本: V0.01.1
** 日 期: 2005年5月2日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/


#include "..\source\Includes.h"

#include "..\driver\Drv_GPS\GPS_NMEA_RMC_Interpreter.h"


/*******************************************************************************
*********************			常	量	定	义			************************
********************************************************************************/


/*******************************************************************************
*********************			变	量	定	义			************************
********************************************************************************/
 
extern	INT8U 		current_state,seg_offset,checksum;

extern	GPS_DATA	gpsdata_buf;
/*********************************************************************************************************
** 函数名称: GPS_NMEA_RMC_Interpreter
** 功能描述: GPS NMEA格式RMC包解释函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 龚树强
** 日 期: 2005年1月3日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/ 

 		void	GPS_NMEA_RMC_Interpreter(INT8U rx,INT8U *prx_counter)  		reentrant
{
	INT8U	cnt;

	cnt = *prx_counter - seg_offset;

	switch(current_state)
	{
		case GPS_NMEA_TYPE_SEG			:		current_state = GPS_NMEA_RMC_TIME_SEG;
												seg_offset = *prx_counter;
												cnt = *prx_counter - seg_offset;

//*********************************************************************************************************
//***********************************	seg time.hour 	************************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_TIME_SEG		:		switch(cnt)
												{
													case 0	:	gpsdata_buf.time.hour = (rx-'0')*10;
																break;
													case 1	:	gpsdata_buf.time.hour += (rx-'0');
																break;
//***********************************	seg time.min 	************************************************
													case 2	:	gpsdata_buf.time.min = (rx-'0')*10;
																break;
													case 3	:	gpsdata_buf.time.min += (rx-'0');
																break;
//***********************************	seg time.sec 	************************************************
													case 4	:	gpsdata_buf.time.sec = (rx-'0')*10;
																break;
													case 5	:	gpsdata_buf.time.sec += (rx-'0');
																break;
//******************************************	. 	****************************************************
													case 6	 :	if(rx!='.')
																	*prx_counter = 0;
																break;
//***********************************	seg time.msec 	************************************************
													case 7	:	gpsdata_buf.time.msec = (rx-'0')*1000;
																break;
													case 8	:	gpsdata_buf.time.msec += (rx-'0')*100;
																break;
													case 9	:	gpsdata_buf.time.msec += (rx-'0')*10;
																break;
													case 10	:	gpsdata_buf.time.msec += (rx-'0');
																break;
//******************************************	, 	****************************************************
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_STATE_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
											  	}
												break;
//*********************************************************************************************************
//***********************************	seg active satae  **********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_STATE_SEG		:		switch(cnt)
												{
													case 0	:	gpsdata_buf.state = rx;
																break;
//******************************************	, 	****************************************************
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_LATITUDE_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;			
//*********************************************************************************************************
//**********************************	seg latitude.dec 	***********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_LATITUDE_SEG	:		switch(cnt)
												{
													case 0	:	gpsdata_buf.latitude.dec = (rx-'0')*10;
																break;
													case 1	:	gpsdata_buf.latitude.dec += (rx-'0');
																break;
//*******************************	seg latitude.min 	************************************************
													case 2	:	gpsdata_buf.latitude.min = (rx-'0')*10;
																break;
													case 3	:	gpsdata_buf.latitude.min += (rx-'0');
																break;
//******************************************	. 	****************************************************
													case 4 	:	if(rx!='.')
																	*prx_counter = 0;
																break;
//*******************************	seg latitude.msec 	************************************************
													case 5	:	gpsdata_buf.latitude.mmin = (rx-'0')*1000;
																break;
													case 6	:	gpsdata_buf.latitude.mmin += (rx-'0')*100;
																break;
													case 7	:	gpsdata_buf.latitude.mmin += (rx-'0')*10;
																break;
													case 8	:	gpsdata_buf.latitude.mmin += (rx-'0');
																break;
//******************************************	, 	****************************************************
													case 9	:	if(rx!=',')
																	*prx_counter = 0;
																break;
//*******************************	seg latitude.dir 	************************************************
													case 10	:	gpsdata_buf.latitude.dir = rx;
																break;
//******************************************	, 	****************************************************
													default	:	if(rx == ',')
																{
																	current_state = GPS_NMEA_RMC_LONGTITUDE_SEG;
																	seg_offset = *prx_counter + 1;
																}
																else
																	*prx_counter = 0;
																break;
												}
												break;			


//*********************************************************************************************************
//**********************************	seg longitude.dec 	***********************************************
//*********************************************************************************************************
		case GPS_NMEA_RMC_LONGTITUDE_SEG	:	switch(cnt)
												{
													case 0	:	gpsdata_buf.longitude.dec = (rx-'0')*100;
																break;
													case 1	:	gpsdata_buf.longitude.dec += (rx-'0')*10;
																break;
													case 2	:	gpsdata_buf.longitude.dec += (rx-'0');
																break;
//*******************************	seg longitude.min 	************************************************
													case 3	:	gpsdata_buf.longitude.min = (rx-'0')*10;
																break;
													case 4	:	gpsdata_buf.longitude.min += (rx-'0');
																break;
//******************************************	. 	****************************************************
													case 5 	:	if(rx!='.')
																	*prx_counter = 0;
																break;
//*******************************	seg longitude.msec 	************************************************
													case 6	:	gpsdata_buf.longitude.mmin = (rx-'0')*1000;
																break;
													case 7	:	gpsdata_buf.longitude.mmin += (rx-'0')*100;
																break;
													case 8	:	gpsdata_buf.longitude.mmin += (rx-'0')*10;
																break;
													case 9	:	gpsdata_buf.longitude.mmin += (rx-'0');
																break;
//******************************************	, 	****************************************************
													case 10	:	if(rx!=',')
																	*prx_counter = 0;
																break;
//*******************************	seg longitude.dir 	************************************************
													case 11	:	gpsdata_buf.longitude.dir = rx;
																break;
//******************************************	, 	****************************************************
													default	:	if(rx == ',')
																{

⌨️ 快捷键说明

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