157 lines
3.9 KiB
C
157 lines
3.9 KiB
C
|
|
#ifndef __GPS_NOVATEL_H
|
||
|
|
#define __GPS_NOVATEL_H
|
||
|
|
|
||
|
|
#include "stm32f7xx.h"
|
||
|
|
#include "stm32f7xx_hal.h"
|
||
|
|
#include <FreeRTOS.h>
|
||
|
|
#include "libcmn.h"
|
||
|
|
|
||
|
|
#define B10_P1 (1.0E+1) /* B: base, P: positive */
|
||
|
|
#define B10_P2 (1.0E+2)
|
||
|
|
#define B10_P3 (1.0E+3)
|
||
|
|
#define B10_P4 (1.0E+4)
|
||
|
|
#define B10_P5 (1.0E+5)
|
||
|
|
#define B10_P6 (1.0E+6)
|
||
|
|
#define B10_P7 (1.0E+7)
|
||
|
|
#define B10_P8 (1.0E+8)
|
||
|
|
#define B10_P9 (1.0E+9)
|
||
|
|
|
||
|
|
#define B10_N1 (1.0E-1) /* B: base, N: negative */
|
||
|
|
#define B10_N2 (1.0E-2)
|
||
|
|
#define B10_N3 (1.0E-3)
|
||
|
|
#define B10_N4 (1.0E-4)
|
||
|
|
#define B10_N5 (1.0E-5)
|
||
|
|
#define B10_N6 (1.0E-6)
|
||
|
|
#define B10_N7 (1.0E-7)
|
||
|
|
#define B10_N8 (1.0E-8)
|
||
|
|
#define B10_N9 (1.0E-9)
|
||
|
|
|
||
|
|
/** novatel message id & length */
|
||
|
|
#define ID_TIME (101) // 0x65
|
||
|
|
#define ID_BESTPOS (42) // 0x2A
|
||
|
|
#define ID_BESTVEL (99)
|
||
|
|
#define ID_HEADING (971)
|
||
|
|
#define ID_PSRDOP (174)
|
||
|
|
|
||
|
|
|
||
|
|
#define LEN_TIME (28+44+4) /** header length + body length + crc check length */
|
||
|
|
#define LEN_BESTPOS (28+72+4)
|
||
|
|
#define LEN_BESTVEL (28+44+4)
|
||
|
|
#define LEN_HEADING (28+44+4)
|
||
|
|
|
||
|
|
#define NOVATEL_HEADER_LENGTH (28)
|
||
|
|
#define MIN_NOVATEL_MSG_LENGTH (LEN_TIME) /** ref LEN_TIME/LEN_BESTPOS/LEN_BESTVEL */
|
||
|
|
#define MAX_NOVATEL_MSG_LENGTH (LEN_SATMSG)
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Configing,
|
||
|
|
ConfigDone
|
||
|
|
|
||
|
|
}FlagConfig;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
NOVATEL_FIXTYPE_NONE = 0,
|
||
|
|
NOVATEL_FIXTYPE_FIXEDPOS = 1,
|
||
|
|
NOVATEL_FIXTYPE_FIXEDHEIGHT = 2,
|
||
|
|
NOVATEL_FIXTYPE_DOPPLER_VELOCITY = 8,
|
||
|
|
NOVATEL_FIXTYPE_SMOOTED_SINGLE= 9,
|
||
|
|
NOVATEL_FIXTYPE_SINGLE = 16,
|
||
|
|
NOVATEL_FIXTYPE_PSRDIFF = 17,
|
||
|
|
NOVATEL_FIXTYPE_WAAS = 18,
|
||
|
|
NOVATEL_FIXTYPE_PROPAGATED = 19,
|
||
|
|
NOVATEL_FIXTYPE_OMNISTAR = 20,
|
||
|
|
NOVATEL_FIXTYPE_L1_FLOAT = 32,
|
||
|
|
NOVATEL_FIXTYPE_IONOFREE_FLOAT = 33,
|
||
|
|
NOVATEL_FIXTYPE_NARROR_FLAOT = 34,
|
||
|
|
NOVATEL_FIXTYPE_FIXED_RECKON = 35,
|
||
|
|
NOVATEL_FIXTYPE_L1_INT = 48,
|
||
|
|
NOVATEL_FIXTYPE_NARROW_INT = 50,
|
||
|
|
NOVATEL_FIXTYPE_OMNISTAR_HP = 64,
|
||
|
|
NOVATEL_FIXTYPE_OMNISTAR_XP = 65,
|
||
|
|
NOVATEL_FIXTYPE_PPP_CONVERGING = 68,
|
||
|
|
NOVATEL_FIXTYPE_PPP = 69,
|
||
|
|
NOVATEL_FIXTYPE_OPERATIONAL = 70,
|
||
|
|
NOVATEL_FIXTYPE_WARNING = 71,
|
||
|
|
NOVATEL_FIXTYPE_OUT_OF_BOUNDS = 72
|
||
|
|
} NovatelFixtypeEnum;
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
float velN,velE,velD;
|
||
|
|
/** time */
|
||
|
|
uint16_t HeaderWeekOfTime;
|
||
|
|
uint32_t HeaderMsecOfTime;
|
||
|
|
uint8_t time_valid;
|
||
|
|
UtcStruct utc;
|
||
|
|
|
||
|
|
/** bestpos */
|
||
|
|
uint8_t flgPosUpd;
|
||
|
|
uint16_t HeaderWeekOfBestpos;
|
||
|
|
uint32_t HeaderMsecOfBestpos;
|
||
|
|
double LatDeg,LonDeg,hgt;
|
||
|
|
float diffage;
|
||
|
|
uint8_t SolnSv;
|
||
|
|
uint32_t baseid;
|
||
|
|
GnssFixtypeEnum fix_type;
|
||
|
|
NovatelFixtypeEnum PosType; // NovatelFixtypeEnum
|
||
|
|
float LatSigma;
|
||
|
|
float LonSigma;
|
||
|
|
float HightSigma;
|
||
|
|
|
||
|
|
/** srdop */
|
||
|
|
uint8_t flgDopUpd;
|
||
|
|
float gdop;
|
||
|
|
float Pdop;
|
||
|
|
float Hdop;
|
||
|
|
|
||
|
|
/** bestvel */
|
||
|
|
uint8_t flgVelUpd;
|
||
|
|
uint16_t HeaderWeekOfBestvel;
|
||
|
|
uint32_t HeaderMsecOfBestvel;
|
||
|
|
uint32_t V_valid;
|
||
|
|
double HorSpd; // m/s
|
||
|
|
double TrkGnd; // degree
|
||
|
|
double VertSpd; // m/s, up(+)
|
||
|
|
|
||
|
|
/** heading */
|
||
|
|
uint8_t aAngHz;
|
||
|
|
uint8_t flgAttUpd;
|
||
|
|
NovatelFixtypeEnum NovatelAttType; // NovatelFixtypeEnum
|
||
|
|
uint8_t att_type; /** 0: fixed ambiguity 1: float ambiguity */
|
||
|
|
uint8_t ang_sv_num;
|
||
|
|
float heading; /** degree,0-360 */
|
||
|
|
float pitch; /** degree,+-90 */
|
||
|
|
float roll; /** degree,+-90 */
|
||
|
|
|
||
|
|
int CntNovatelTime;
|
||
|
|
int CntNovatelBestpos;
|
||
|
|
int CntNovatelBestvel;
|
||
|
|
int CntNovatelHeading;
|
||
|
|
int CntNovatelPsrdop;
|
||
|
|
int LastCntNovatelTime;
|
||
|
|
int LastCntNovatelBestpos;
|
||
|
|
int LastCntNovatelBestvel;
|
||
|
|
int LastCntNovatelHeading;
|
||
|
|
int LastCntNovatelPsrdop;
|
||
|
|
int PpsNovatelTime;
|
||
|
|
int PpsNovatelBestpos;
|
||
|
|
int PpsNovatelBestvel;
|
||
|
|
int PpsNovatelHeading;
|
||
|
|
int PpsNovatelPsrdop;
|
||
|
|
|
||
|
|
} NovatelStruct;
|
||
|
|
|
||
|
|
extern void NovatelDecodeTime(NovatelStruct *sol,uint8_t frame[]);
|
||
|
|
extern void NovatelDecodeBestvel(NovatelStruct *sol,uint8_t frame[]);
|
||
|
|
extern void NovatelDecodeHeading(NovatelStruct *sol,uint8_t frame[]);
|
||
|
|
extern void NovatelDecodeBestpos(NovatelStruct *sol,uint8_t frame[]);
|
||
|
|
extern void NovatelDecodePsrdop(NovatelStruct *sol,uint8_t frame[]);
|
||
|
|
|
||
|
|
extern void NovatelDecodeInit(NovatelStruct *sol);
|
||
|
|
extern void NovatelDecodeStats(NovatelStruct *sol);
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|