209 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /**
 | |
|     @file       GPSParser.h
 | |
|     @ingroup
 | |
| 
 | |
|     @brief      Sample module brief
 | |
|                 Sample module description
 | |
| 
 | |
|     @note       Nothing (or anything need to be mentioned).
 | |
| 
 | |
|     Copyright   Novatek Microelectronics Corp. 2005.  All rights reserved.
 | |
| */
 | |
| 
 | |
| #ifndef _NMEAParser_H
 | |
| #define _NMEAParser_H
 | |
| 
 | |
| #include "kwrap/semaphore.h"
 | |
| #include "kwrap/flag.h"
 | |
| #include "kwrap/type.h"
 | |
| #include "kwrap/task.h"
 | |
| #include <uart.h>
 | |
| 
 | |
| #define NMEA_BUFFER_OFFSET		(35*1024)   //35KB
 | |
| #define NMEA_BUFFER_RESERVED	128
 | |
| #define NMEA_SENTENCE_SIZE		180
 | |
| #define NMEA_TYPE_SIZE			7
 | |
| #define GSA_SENTENCE			0x41534750 //'A''S''G''P'
 | |
| #define RMC_SENTENCE			0x434D5250 //'C''M''R''P'
 | |
| #define GGA_SENTENCE			0x41474750 //'A''G''G''P'
 | |
| #define GSV_SENTENCE			0x56534750 //'V''S''G''P'
 | |
| #define GLL_SENTENCE			0x4C4C4750 //'L''L''G''P'
 | |
| #define VTG_SENTENCE			0x47545650 //'G''T''V''P'
 | |
| #define SNR_SENTENCE			0x4F534E45 //'O''S''N''E'
 | |
| #define ROS_SENTENCE			0x534F5259 //'S''O''R''Y'
 | |
| 
 | |
| //#define GPS_FLAG_DATAVALID		0x00000001
 | |
| //#define GPS_FLAG_LOG			0x00000002
 | |
| // Flag
 | |
| #define GPS_FLAG_DATAVALID          FLGPTN_BIT(0)
 | |
| #define GPS_FLAG_LOG        		FLGPTN_BIT(1)
 | |
| #define GPS_FLAG_ALL		        0xFFFFFFFF
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
| 	ER(*open)(void);
 | |
| 	ER(*close)(void);
 | |
| 	ER(*init)(UART_INIT_PARA  *pUartInitPara);
 | |
| 	ER(*getString)(CHAR *pcString, UINT32 *pcBufferLen);
 | |
| } GPS_UART_OBJ, *pGPS_UART_OBJ;
 | |
| 
 | |
| typedef struct {
 | |
| 	CHAR    *pGPSDataStartAddr;
 | |
| 	UINT32  GPSBufUsedPos;
 | |
| 	UINT32  GPSBufSize;
 | |
| } GPSBuf, *pGPSBuf;
 | |
| 
 | |
| typedef struct {
 | |
| 
 | |
| 	CHAR    *GGA;
 | |
| 	CHAR    *RMC;
 | |
| 	CHAR    *GSA;
 | |
| 	CHAR    *GSV;
 | |
| 	CHAR    *GLL;
 | |
| 	CHAR    *VTG;
 | |
| 	GPSBuf  GPSDataBuf;
 | |
| 
 | |
| } NMEASENTENCE;
 | |
| 
 | |
| typedef enum {
 | |
| 	No_Fix = 1,
 | |
| 	TWO_D_Fix,
 | |
| 	THREE_D_Fix
 | |
| } FIXMODE;
 | |
| 
 | |
| //GSA, Satellite status
 | |
| typedef struct {
 | |
| 
 | |
| 	CHAR    SelMode;			//'A' auto selection of 2D or 3D fix
 | |
| 								//'M' manual
 | |
| 	UINT32  FixMode;			//'1' no fix
 | |
| 								//'2' 2D fix
 | |
| 								//'3' 3D fix
 | |
| 	UINT32  SatUsed01;			//PRNs of satellites used for fix (space for 12)
 | |
| 	UINT32  SatUsed02;
 | |
| 	UINT32  SatUsed03;
 | |
| 	UINT32  SatUsed04;
 | |
| 	UINT32  SatUsed05;
 | |
| 	UINT32  SatUsed06;
 | |
| 	UINT32  SatUsed07;
 | |
| 	UINT32  SatUsed08;
 | |
| 	UINT32  SatUsed09;
 | |
| 	UINT32  SatUsed10;
 | |
| 	UINT32  SatUsed11;
 | |
| 	UINT32  SatUsed12;
 | |
| 	double  PDOP;				//Position dilution of precision
 | |
| 	double  HDOP;				//Horizontal dilution of precision
 | |
| 	double  VDOP;				//Vertical dilution of precision
 | |
| 
 | |
| } GSAINFO;
 | |
| extern GSAINFO GSAInfo;
 | |
| 
 | |
| //RMC, Recommended Minimum sentence C
 | |
| typedef struct {
 | |
| 
 | |
| 	UINT32    Hour;
 | |
| 	UINT32    Minute;
 | |
| 	UINT32    Second;
 | |
| 	UINT32    Year;
 | |
| 	UINT32    Month;
 | |
| 	UINT32    Day;
 | |
| 	CHAR      Status;			//Status A=active or V=Void
 | |
| 	CHAR      NSInd;
 | |
| 	CHAR      EWInd;
 | |
| 	CHAR      reservd;
 | |
| 	float     Latitude;
 | |
| 	float     Longitude;
 | |
| 	float     Speed;			//Speed over the ground in knots
 | |
| 	float     Angle;			//Track angle in degrees True
 | |
| 
 | |
| } RMCINFO;
 | |
| extern RMCINFO RMCInfo;
 | |
| 
 | |
| //GGA, Global Positioning System Fix Data
 | |
| typedef struct {
 | |
| 
 | |
| 	UINT32    Hour;
 | |
| 	UINT32    Minute;
 | |
| 	UINT32    Second;
 | |
| 	double    Latitude;
 | |
| 	CHAR      NSInd;
 | |
| 	double    Longitude;
 | |
| 	CHAR      EWInd;
 | |
| 	UINT32    PosFixInd;		//Fix quality: 0 = invalid
 | |
| 								//             1 = GPS fix
 | |
| 	UINT32    SatNumber;		//Number of satellites being tracked
 | |
| 	double    HDOP;				//Horizontal dilution of position
 | |
| 	double    Altitude;			//Altitude, Meters, above mean sea level
 | |
| 	double    MSL;				//Height of geoid (mean sea level) above WGS84
 | |
| 
 | |
| } GGAINFO;
 | |
| extern GGAINFO GGAInfo;
 | |
| 
 | |
| typedef struct {
 | |
| 
 | |
| 	UINT32    SatNum;			//Satellite PRN number
 | |
| 	UINT32    Elev;				//Elevation, degrees
 | |
| 	UINT32    Azi;				//Azimuth, degrees
 | |
| 	UINT32    SNR;				//SNR - higher is better
 | |
| 
 | |
| } SATDATA;
 | |
| 
 | |
| //GSV, Satellites in view
 | |
| typedef struct {
 | |
| 
 | |
| 	UINT32    NumOfSen;			//Number of sentences for full data
 | |
| 	UINT32    SenNum;			//Sentence number
 | |
| 	UINT32    SatInView;		//Number of satellites in view
 | |
| 	SATDATA   SAT01;
 | |
| 	SATDATA   SAT02;
 | |
| 	SATDATA   SAT03;
 | |
| 	SATDATA   SAT04;
 | |
| 	SATDATA   SAT05;
 | |
| 	SATDATA   SAT06;
 | |
| 	SATDATA   SAT07;
 | |
| 	SATDATA   SAT08;
 | |
| 	SATDATA   SAT09;
 | |
| 	SATDATA   SAT10;
 | |
| 	SATDATA   SAT11;
 | |
| 	SATDATA   SAT12;
 | |
| 	SATDATA   SAT13;
 | |
| 	SATDATA   SAT14;
 | |
| 	SATDATA   SAT15;
 | |
| 	SATDATA   SAT16;
 | |
| 
 | |
| } GSVINFO;
 | |
| extern GSVINFO GSVInfo;
 | |
| 
 | |
| typedef enum {
 | |
| 	GSA,
 | |
| 	RMC,
 | |
| 	GGA,
 | |
| 	GSV,
 | |
| 	GLL,
 | |
| 	VTG
 | |
| } NMEATYPE;
 | |
| 
 | |
| 
 | |
| //extern void GPS_SetUartObj(GPS_UART_OBJ *UartObj);
 | |
| extern ER GPSRec_Open(UART_BAUDRATE BaudRate);
 | |
| extern ER GPSRec_Close(void);
 | |
| extern ER GPSRec_Reset(void);
 | |
| extern BOOL GPSRec_CheckData(void);
 | |
| extern BOOL GPSRec_GetRMCDate(RMCINFO *pRMCInfo);
 | |
| extern BOOL GPSRec_GetGGADate(GGAINFO *pGGAInfo);
 | |
| extern float GPSRec_GetGPS_Speed(void);
 | |
| 
 | |
| //#NT#2015/10/02#KCHong -begin
 | |
| //#NT#Add GPS heartbeat to detect GPS status
 | |
| extern BOOL GPSRec_GetSpeed(float *Speed);
 | |
| extern UINT32 GetGPSHeartBeat(void);
 | |
| //#NT#2015/10/02#KCHong -end
 | |
| 
 | |
| //extern UINT32 _SECTION(".kercfg_data") GPSRECEIVE_ID; // GPS Task
 | |
| //extern UINT32 _SECTION(".kercfg_data") FLG_ID_GPS; // GPS Flag
 | |
| extern THREAD_HANDLE _SECTION(".kercfg_data") GPSRECEIVE_ID;
 | |
| extern ID _SECTION(".kercfg_data") FLG_ID_GPS;
 | |
| extern ID _SECTION(".kercfg_data") FGPS_SEM_ID;
 | |
| 
 | |
| #endif
 | 
