/*************************** (C) COPYRIGHT 2017 CXHY ****************************
 * 文件名  ：gps.h
 * 描  述  ：GPS头文件驱动代码     
 * 版  本  ：V1.0
 * 作  者  ：XuZhongPing
 * 日  期  ：2022/08/03
*********************************************************************************/
#ifndef __GPS_H
#define __GPS_H	 

#include "stdio.h"	 
#include "stdint.h" 

typedef struct _nmeaTIME
{
	int     year;       /**< Years since 1900 */
	int     mon;        /**< Months since January - [1,12] */
	int     day;        /**< Day of the month - [1,31] */
	int     hour;       /**< Hours since midnight - [0,23] */
	int     min;        /**< Minutes after the hour - [0,59] */
	int     sec;        /**< Seconds after the minute - [0,59] */
	int     hsec;       /**< Hundredth part of second - [0,99] */

} nmeaTIME;

/**
 * Summary GPS information from all parsed packets,
 * used also for generating NMEA stream
 * @see nmea_parse
 * @see nmea_GPGGA2info,  nmea_...2info
 */
typedef struct _nmeaINFO
{
	double   lat;         /**< 数值，纬度*/
	double   lon;         /**< 数值，经度*/
	uint32_t u_lat;     	/**< 数值，纬度（已放大1000000倍）*/
	uint8_t  u_ns;      	/**< 数值，纬度方向（0->N-北,1->S-南）*/
	uint32_t u_lon;     	/**< 数值，经度（已放大1000000倍）*/
	uint8_t  u_ew;      	/**< 数值，纬度方向（0->E-东,W-西）*/
	uint16_t u_elv;				/**< 数值，海拔高度，即接收机天线相对于大地水准面的高度 */
	uint16_t u_speed;			/**< 数值 对地速度，单位为节 */
	uint16_t u_direction;	/**< 数值 对地真航向，单位为度 */
		
} nmeaINFO;

/**
 * GNGGA packet information structure (Global Positioning System Fix Data)
 */
typedef struct _nmeaGNGGA
{
	nmeaTIME utc;       	/**< hhmmss.sss， 当前定位的UTC时间 */
	double  lat;        	/**< ddmm.mmmm， 纬度 前 2 字符表示度，后面的字符表示分  */
	char    ns;       		/**< 字符， 纬度方向： N-北， S-南 */
	double  lon;        	/**< dddmm.mmmm， 经度，前 3 字符表示度，后面的字符表示分 */
	char    ew;       		/**< 字符， 经度方向： E-东， W-西 */
	int     sig;        	/**< 数值， 指示当前定位质量，该字段不应为空 (0 = 定位不可用或无效; 1 = SPS 定位模式，定位有效; 6 = 估算模式（航位推算）) */
	int     satInUse; 		/**< 数值， 用于定位的卫星数目， 00~24 */
	double  HDOP;       	/**< 数值， 水平精度因子（ HDOP） */
	double  elv;        	/**< 数值，海拔高度，即接收机天线相对于大地水准面的高度 */
	char    elv_units;  	/**< 字符，高度单位，米， 固定字符 M */
	double  diff;       	/**< 数值，参考椭球面与大地水准面之间的距离，"-"表示大地水准面低于参考椭球面 */
	char    diff_units; 	/**< 字符，高度单位，米， 固定字符 M */
	double  dgps_age;   	/**< 数值，差分修正的数据龄期，未使用 DGPS 时该域为空 */
	int     dgps_sid;   	/**< 数值，差分参考站的 ID */

} nmeaGNGGA;

/**
 * GNRMC packet information structure (Recommended Minimum sentence C)
 */
typedef struct _nmeaGNRMC
{
	nmeaTIME utc;        	/**< hhmmss.sss， 当前定位的UTC时间 */
	char    status;     	/**< 字符，位置有效标志(A = 数据有效 或 V = 接收机警告，数据无效) */
	double  lat;        	/**< ddmm.mmmm， 纬度 前 2 字符表示度，后面的字符表示分  */
	char    ns;       		/**< 字符， 纬度方向： N-北， S-南 */
	double  lon;        	/**< dddmm.mmmm， 经度，前 3 字符表示度，后面的字符表示分 */
	char    ew;       		/**< 字符， 经度方向： E-东， W-西 */
	double  speed;				/**< 数值 对地速度，单位为节 */
	double  direction;		/**< 数值 对地真航向，单位为度 */
	double  declination;	/**< 数值 磁偏角，单位为度。 固定为空*/
	char    declin_ew;		/**< 字符 磁偏角方向： E-东， W-西。 固定为空 */
	char    mode;					/**< 字符 定位模式标志 (A = 自主模式, D = 差分模式, E = 估算模式, N = 数据无效) */

} nmeaGNRMC;


extern nmeaGNGGA	gpsGNGGA;
extern nmeaGNRMC	gpsGNRMC;
extern nmeaINFO		gpsInfo;

extern uint8_t gpsConnectSta;										//GPS模块硬件连接状态


void GPS_Init(void);
void GPS_Task(void);

#endif  

/******************** (C) COPYRIGHT 2017 CXHY *****END OF FILE*******************/ 
