nt9856x/rtos/code/driver/na51089/include/GPS.h
2023-03-28 15:07:53 +08:00

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