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
|