| | |
| | | /******************************************************************************* |
| | | * File Name : GPS.h |
| | | * Description : |
| | | * Created on : 2019年3月11日 |
| | | * Created on : 2019��3��11�� |
| | | * Author : www.hido-studio.com |
| | | *******************************************************************************/ |
| | | #ifndef _GPS_H_ |
| | |
| | | /******************************************************************************* |
| | | * Macro * |
| | | *******************************************************************************/ |
| | | /* IM23A NAVI 数据 STATUS 状态字定义 */ |
| | | #define IM23A_STATUS_FINIT (0x00000001U) // 1 滤波器未初始化标志 |
| | | #define IM23A_STATUS_READY (0x00000002U) // 2 滤波器收敛完成标志 |
| | | #define IM23A_STATUS_INACCURATE (0x00000004U) // 3 滤波器收敛过程中 |
| | | #define IM23A_STATUS_TILT_REJECT (0x00000008U) // 4 倾角过大标志位 |
| | | #define IM23A_STATUS_GNSS_REJECT (0x00000010U) // 5 GNSS 定位数据差标志位 |
| | | #define IM23A_STATUS_FRESET (0x00000020U) // 6 滤波器重置标志位 |
| | | #define IM23A_STATUS_FIX_RLS1 (0x00000040U) // 7 倾斜测量安装角估计阶段 1 |
| | | #define IM23A_STATUS_FIX_RLS2 (0x00000080U) // 8 倾斜测量安装角估计阶段 2 |
| | | #define IM23A_STATUS_FIX_RLS3 (0x00000100U) // 9 倾斜测量安装角估计阶段 3 |
| | | #define IM23A_STATUS_FIX_RLS4 (0x00000200U) // 10 倾斜测量安装角估计阶段 4 |
| | | #define IM23A_STATUS_FIX_RLS_OK (0x00000400U) // 11 倾斜测量安装角估计完成 |
| | | #define IM23A_STATUS_DIR1 (0x00002000U) // 12 初始化晃动方向 1 |
| | | #define IM23A_STATUS_DIR2 (0x00004000U) // 13 初始化晃动方向 2 |
| | | #define IM23A_STATUS_GNSS_LOST (0x00010000U) // 14 滤波器判定 GNSS 数据无效 |
| | | #define IM23A_STATUS_FINIT_OK (0x00020000U) // 15 初始化完成标志 |
| | | #define IM23A_STATUS_PPS_READY (0x00040000U) // 16 收到 PPS 信号 |
| | | #define IM23A_STATUS_SYNC_READY (0x00080000U) // 17 模块时间同步成功 |
| | | #define IM23A_STATUS_GNSS_CONNECT (0x00100000U) // 18 模块解析到 RTK 数据 |
| | | |
| | | /******************************************************************************* |
| | | * Type Definition * |
| | |
| | | HIDO_UINT8 m_u8Sec; //second |
| | | }ST_GPS; |
| | | |
| | | /* GPRMI数据包结构 */ |
| | | typedef struct |
| | | { |
| | | HIDO_UINT32 m_u32UTCTime; // <1> UTC时间, hhmmss.ss格式 (centisecond) |
| | | HIDO_UINT16 m_u16WeekNumber; // <2> 周数 (IM23A无此字段, 默认0) |
| | | HIDO_UINT32 m_u32TimeOfWeek; // <3> 周内秒 (IM23A无此字段, 默认0) |
| | | HIDO_DOUBLE m_dLatitude; // <4> 纬度(°), 正数为北纬 |
| | | HIDO_DOUBLE m_dLongitude; // <5> 经度(°), 正数为东经 |
| | | HIDO_FLOAT m_fAltitude; // <6> 高程(m) |
| | | HIDO_FLOAT m_fLatStdDev; // <7> 纬度标准差(m) / 预留 |
| | | HIDO_FLOAT m_fLonStdDev; // <8> 经度标准差(m) / 预留 |
| | | HIDO_FLOAT m_fAltStdDev; // <9> 高程标准差(m) / 预留 |
| | | HIDO_FLOAT m_fEastVelocity; // <10> 东方向速度(m/s) |
| | | HIDO_FLOAT m_fNorthVelocity; // <11> 北方向速度(m/s) |
| | | HIDO_FLOAT m_fUpVelocity; // <12> 天顶方向速度(m/s) |
| | | HIDO_FLOAT m_fHorizontalVelStdDev; // <13> 定位精度(来自IM23A字段11) |
| | | HIDO_FLOAT m_fHeadingAngle; // <14> 航向角(°) [IM23A原始为弧度,已转换为0-360°] |
| | | HIDO_FLOAT m_fPitchAngle; // <15> 俯仰角(°) [IM23A原始为弧度,已转换] |
| | | HIDO_FLOAT m_fRollAngle; // <16> 横滚角(°) [IM23A原始为弧度,已转换] |
| | | HIDO_FLOAT m_fHeadingAngleStdDev; // <17> 航向角标准差(°) / 预留 |
| | | HIDO_FLOAT m_fPitchAngleStdDev; // <18> 俯仰角标准差(°) / 预留 |
| | | HIDO_FLOAT m_fRollAngleStdDev; // <19> 横滚角标准差(°) / 预留 |
| | | HIDO_FLOAT m_fBaselineDistance; // <20> 基线距离(m) / 预留 |
| | | HIDO_UINT8 m_u8SatelliteCount; // <21> 卫星数量(如协议缺省则返回0) |
| | | HIDO_UINT8 m_u8FixedAmbiguityCount; // <22> 载波整周固定观测量个数(默认0) |
| | | HIDO_UINT8 m_u8PositionQuality; // <23> 定位质量指示(来自状态字低8位) |
| | | HIDO_BOOL m_bValid; // 数据有效标志 |
| | | |
| | | /* IM23A扩展字段 */ |
| | | HIDO_FLOAT m_fAccelBiasX; // 加速度计 X 零偏 |
| | | HIDO_FLOAT m_fAccelBiasY; // 加速度计 Y 零偏 |
| | | HIDO_FLOAT m_fAccelBiasZ; // 加速度计 Z 零偏 |
| | | HIDO_FLOAT m_fGyroBiasX; // 陀螺仪 X 零偏 |
| | | HIDO_FLOAT m_fGyroBiasY; // 陀螺仪 Y 零偏 |
| | | HIDO_FLOAT m_fGyroBiasZ; // 陀螺仪 Z 零偏 |
| | | HIDO_FLOAT m_fImuTemperature; // 传感器温度(°C) |
| | | HIDO_UINT32 m_u32StatusFlags; // 状态字段(参见IM23A_STATUS_xxx宏定义) |
| | | }ST_GPRMI; |
| | | |
| | | /* GPIMU数据包结构 */ |
| | | typedef struct |
| | | { |
| | | HIDO_UINT32 m_u32UTCTime; // <1> UTC时间, hhmmss.sss格式 |
| | | HIDO_FLOAT m_fAccelX; // <2> x轴加速度(g) |
| | | HIDO_FLOAT m_fAccelY; // <3> y轴加速度(g) |
| | | HIDO_FLOAT m_fAccelZ; // <4> z轴加速度(g) |
| | | HIDO_FLOAT m_fGyroX; // <5> 陀螺x轴角速度(°/s) |
| | | HIDO_FLOAT m_fGyroY; // <6> 陀螺y轴角速度(°/s) |
| | | HIDO_FLOAT m_fGyroZ; // <7> 陀螺z轴角速度(°/s) |
| | | HIDO_FLOAT m_fTemperature; // <8> 传感器温度(℃) |
| | | HIDO_UINT8 m_u8Checksum; // <9> 异或校验和 |
| | | HIDO_BOOL m_bValid; // 数据有效标志 |
| | | }ST_GPIMU; |
| | | |
| | | /* GPGIG数据包结构 (fmig报文,包含位置信息、解状态和差分龄期) */ |
| | | typedef struct |
| | | { |
| | | HIDO_UINT32 m_u32UTCTime; // UTC时间 |
| | | HIDO_DOUBLE m_dLatitude; // 纬度(°), 正数为北纬 |
| | | HIDO_DOUBLE m_dLongitude; // 经度(°), 正数为东经 |
| | | HIDO_UINT8 m_u8SatelliteCount; // 卫星数量 |
| | | HIDO_UINT8 m_u8SolutionStatus; // 解状态 (0=无效, 1=单点, 2=伪距差分, 4=RTK固定解, 5=RTK浮点解) |
| | | HIDO_UINT8 m_u8DifferentialAge; // 差分龄期(秒) |
| | | HIDO_FLOAT m_fHRMS; // 水平精度HRMS |
| | | HIDO_FLOAT m_fVRMS; // 垂直精度VRMS |
| | | HIDO_FLOAT m_fHDOP; // 水平精度因子 |
| | | HIDO_FLOAT m_fVDOP; // 垂直精度因子 |
| | | HIDO_BOOL m_bValid; // 数据有效标志 |
| | | }ST_GPGIG; |
| | | |
| | | /******************************************************************************* |
| | | * Global Function * |
| | | *******************************************************************************/ |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_GetState |
| | | * Description : 获取GPS定位状态 |
| | | * Description : ��ȡGPS��λ״̬ |
| | | * Input : None |
| | | * Output : None |
| | | * Return : 定位状态 0 1 2 3 |
| | | * Return : ��λ״̬ 0 1 2 3 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2021年1月8日 |
| | | * Modified Date: : 2021��1��8�� |
| | | *******************************************************************************/ |
| | | HIDO_UINT8 GPS_GetState(HIDO_VOID); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_PinRegister |
| | | * Description : GPS模块管脚注册 |
| | | * Input : _ePin 管脚定义 |
| | | * Description : GPSģ��ܽ�ע�� |
| | | * Input : _ePin �ܽŶ��� |
| | | * : _pstGPIOx GPIOx |
| | | * : _u16GPIOPin GPIO_PIN_x |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2021年1月8日 |
| | | * Modified Date: : 2021��1��8�� |
| | | *******************************************************************************/ |
| | | HIDO_VOID GPS_PinRegister(E_GPSPin _ePin, GPIO_TypeDef *_pstGPIOx, HIDO_UINT16 _u16GPIOPin); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_Poll |
| | | * Description : GPS轮询处理 |
| | | * Description : GPS��ѯ���� |
| | | * Input : None |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2021年1月8日 |
| | | * Modified Date: : 2021��1��8�� |
| | | *******************************************************************************/ |
| | | HIDO_VOID GPS_Poll(void); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_Init |
| | | * Description : GPS模块初始化 |
| | | * Description : GPSģ���ʼ�� |
| | | * Input : None |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2021年1月8日 |
| | | * Modified Date: : 2021��1��8�� |
| | | *******************************************************************************/ |
| | | HIDO_VOID GPS_Init(void); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_GetGPRMI |
| | | * Description : 获取最新的GPRMI数据 |
| | | * Input : _pstGPRMI - 存储GPRMI数据的结构体指针 |
| | | * Output : None |
| | | * Return : HIDO_OK - 成功, HIDO_ERR - 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2025年11月11日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 GPS_GetGPRMI(ST_GPRMI *_pstGPRMI); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_GetGPIMU |
| | | * Description : 获取最新的GPIMU数据 |
| | | * Input : _pstGPIMU - 存储GPIMU数据的结构体指针 |
| | | * Output : None |
| | | * Return : HIDO_OK - 成功, HIDO_ERR - 失败 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2025年11月11日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 GPS_GetGPIMU(ST_GPIMU *_pstGPIMU); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_GetCurrentENU |
| | | * Description : 获取当前ENU坐标(相对于开机后第一个固定解) |
| | | * Input : _enu - 存储ENU坐标的数组指针 [东, 北, 天] |
| | | * Output : None |
| | | * Return : HIDO_OK - 成功, HIDO_ERR - 失败或原点未初始化 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2025年12月3日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 GPS_GetCurrentENU(float _enu[3]); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_GetGPGIG |
| | | * Description : 获取最新的GPGIG数据(fmig报文,包含位置信息、解状态和差分龄期) |
| | | * Input : _pstGPGIG - 存储GPGIG数据的结构体指针 |
| | | * Output : None |
| | | * Return : HIDO_OK - 成功, HIDO_ERR - 失败或数据无效 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2025年12月4日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 GPS_GetGPGIG(ST_GPGIG *_pstGPGIG); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_UploadGGA |
| | | * Description : 每秒上传一次GGA报文到4G(拼接fmin和fmig数据,经纬度来自fmig) |
| | | * Input : None |
| | | * Output : None |
| | | * Return : None |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2025年12月4日 |
| | | *******************************************************************************/ |
| | | HIDO_VOID GPS_UploadGGA(HIDO_VOID); |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : GPS_FormatGGA |
| | | * Description : 将fmin和fmig数据格式化为标准GGA报文(经纬度优先使用fmig数据) |
| | | * Input : _pstGPRMI - fmin数据 |
| | | * : _pstGPGIG - fmig数据(包含经纬度信息) |
| | | * : _pcBuffer - 输出缓冲区 |
| | | * : _u32BufferSize - 缓冲区大小 |
| | | * Output : _pcBuffer |
| | | * Return : 实际写入的字符数,失败返回0 |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2025年12月4日 |
| | | *******************************************************************************/ |
| | | HIDO_UINT32 GPS_FormatGGA(const ST_GPRMI *_pstGPRMI, const ST_GPGIG *_pstGPGIG, |
| | | HIDO_CHAR *_pcBuffer, HIDO_UINT32 _u32BufferSize); |
| | | |
| | | #endif /* _GPS_H_ */ |