Files
motor/Common/uart/novatel_class/gps_novatel_protocol.h
T

157 lines
3.9 KiB
C
Raw Normal View History

2024-09-26 22:32:20 +08:00
#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