0
0

Initial commit from DCSP - 2026/1/15 15:11:58

This commit is contained in:
xb
2026-01-15 15:11:58 +08:00
commit c93536b187
100 changed files with 59765 additions and 0 deletions

View File

@@ -0,0 +1,369 @@
#ifndef _SENSOR_GNSS_H_
#define _SENSOR_GNSS_H_
#include <stdint.h>
#define GPS_Hk_FRAME_LENGTH 372
typedef union {
uint8_t data;
struct{
uint8_t post_staus : 1;//定位状态
uint8_t orbit_staus : 2;//定轨状态
uint8_t resolve_staus:3;//解算状态
uint8_t work_staus:2; //工作状态
};
} PostionStatus;//定位状态
typedef union {
uint16_t data;
struct{
uint8_t gps_available_num:4; //GPS可用星数
uint8_t gps_catch_num:4; // GPS捕获星数
uint8_t bd_available_num:4; //bd可用星数
uint8_t bd_catch_num:4; // bd捕获星数
};
}GNSS_Star_Num;//星星
typedef union {
uint8_t data;
struct{
uint8_t A_B_flag:1; //A/B机标识
uint8_t master_slave_flag:2; //主从核通信状态
uint8_t Tmark_flag:1; //Tmark状态
uint8_t Orbit_enable_flag:2; //定轨输出使能标记
uint8_t pulse_enable_flag:2; //秒脉冲输出使能标记
};
}GNSSSReceiverStatus;//监控状态
typedef union
{
uint8_t data;
struct
{
uint8_t rs422_init_couse:4; //422总线初始化原因
uint8_t rs422_init_num:4; //422总线初始化计数(总线需求类型1),初始化一次+1
};
}RS422_Status;//RS422状态
typedef union
{
uint16_t data;
struct
{
uint8_t gps_carrier_noise_46:4; //载噪比大于46的GPS星数
uint8_t gps_carrier_noise_less40:4; //载噪比40~46的GPS星数
uint8_t bd_carrier_noise_46:4; //载噪比大于46的bd星数
uint8_t bd_carrier_noise_less40:4; //载噪比40~46的bd星数
};
}GNSS_CarrierNoise;//载噪比分布
typedef union
{
uint8_t data;
struct
{
uint8_t cpusoft_reset_num:4; //导航信息处理软件复位次数
uint8_t orbitsoft_reset_num:4; //定轨接口软件复位次数
};
}GNSS_Reset;//GNSS接收机复位计数
typedef union
{
uint8_t data;
struct
{
uint8_t not_posi_reason:4; //非定位原因
uint8_t reset_reason_core:4; //从核复位原因
};
}GNSS_CPUSoft_Status;//航信息处理软件状态
typedef union
{
uint8_t data[12];
struct
{
uint8_t thoroughfare0:4; //通道0
uint8_t thoroughfare1:4; //通道1
uint8_t thoroughfare2:4; //通道2
uint8_t thoroughfare3:4; //通道3
uint8_t thoroughfare4:4; //通道4
uint8_t thoroughfare5:4; //通道5
uint8_t thoroughfare6:4; //通道6
uint8_t thoroughfare7:4; //通道7
uint8_t thoroughfare8:4; //通道8
uint8_t thoroughfare9:4; //通道9
uint8_t thoroughfare10:4; //通道10
uint8_t thoroughfare11:4; //通道11
uint8_t thoroughfare12:4; //通道12
uint8_t thoroughfare13:4; //通道13
uint8_t thoroughfare14:4; //通道14
uint8_t thoroughfare15:4; //通道15
uint8_t thoroughfare16:4; //通道16
uint8_t thoroughfare17:4; //通道17
uint8_t thoroughfare18:4; //通道18
uint8_t thoroughfare19:4; //通道19
uint8_t thoroughfare20:4; //通道20
uint8_t thoroughfare21:4; //通道21
uint8_t thoroughfare22:4; //通道22
uint8_t thoroughfare23:4; //通道23
};
}GNSS_Orbit_Reject_Reason;//定轨剔除原因
typedef union
{
uint8_t data;
struct
{
uint8_t filter_conver_flag:2; //滤波器收敛标志
uint8_t Orbit_init_flag:2; //定轨初始化标记
uint8_t reset_reason_master_core:4; //主核复位原因
};
}GNSS_OrbitSoft_Status;//定轨接口软件状态
//该结构体中使用2字节的增量数据长度导致memcpy时数据丢失,暂不使用
typedef union
{
uint32_t data;
struct
{
uint16_t data_length:15;//增量数据长度
uint8_t soft_version:8;//程序版本号
uint8_t inject_cmd:2;//上注命令
uint8_t crc_return_value:3;//校验返回值
uint8_t program_inject_logo:3; //程序上注标识
uint8_t boot:1; //boot引导区
};
}GNSS_Soft_Injection_Status;//上注状态
typedef union
{
uint8_t data;
struct
{
uint8_t param_type:2; //上注参数类型
uint8_t param_flash_flag:2; //上注参数写FLASH标识
uint8_t track_parameter_source:2; //轨道参数来源
uint8_t eop_param_source:2; //EOP参数来源
};
}GNSS_Param_Injection_Status;//参数上注信息
typedef union
{
uint16_t data;
struct
{
uint8_t channel_reject:8; //通道剔除原因
uint8_t reserve:2; //保留
uint8_t track_param:4; //跟踪参数
uint8_t track_status:2; //跟踪状态
};
}Satellite_Channel_Status;//通道卫星状态
typedef struct __attribute__((packed))
{
uint8_t satellite_num; //卫星号
uint8_t Signal_noise_ratio;//信噪比
Satellite_Channel_Status sat_channel_status;//通道卫星状态
uint8_t channel_orbit_status;//通道定轨状态
uint32_t pseudo_range_integer; //伪距整数部分
uint16_t pseudo_range_decimal; //伪距小数部分
uint32_t signal_carrier_integer; //载波相位整数部分
uint32_t signal_carrier_decimal; //载波相位小数部分
}GPS_Channel_Observe_with_pseu; //带伪距伪距率输出的GPS卫星信息
typedef struct __attribute__((packed))
{
uint8_t satellite_num; //卫星号
uint8_t Signal_noise_ratio;//信噪比
Satellite_Channel_Status sat_channel_status;//通道卫星状态
uint8_t channel_orbit_status;//通道定轨状态
}GPS_Channel_Observe_without_pseu; //带伪距伪距率输出的卫星信息
typedef struct __attribute__((packed))
{
uint8_t satellite_num; //卫星号
uint8_t Signal_noise_ratio;//信噪比
Satellite_Channel_Status satellite_channel_status;//通道卫星状态
uint8_t channel_orbit_status;//通道定轨状态
uint32_t pseudo_range_integer; //伪距整数部分
uint16_t pseudo_range_decimal; //伪距小数部分
}BD_Channel_Observe_with_pseu; //带伪距伪距率输出的BD卫星信息
typedef struct __attribute__((packed))
{
uint8_t satellite_num; //卫星号
uint8_t Signal_noise_ratio;//信噪比
Satellite_Channel_Status satellite_channel_status;//通道卫星状态
uint8_t channel_orbit_status;//通道定轨状态
}BD_Channel_Observe_without_pseu; //带伪距伪距率输出的BD卫星信息
typedef union
{
uint8_t data;
struct
{
uint8_t time_top_param_type:1; //上注参数类型:(time参数上注状态)
uint8_t time_param_source:1; //参数来源(time参数上注状态)
uint8_t time_write_flash_flag:2; //写FLASH标识(time参数上注状态)
uint8_t bd_top_param_type:1; //上注参数类型:(BD参数上注状态)
uint8_t bd_param_source:1; //参数标识(BD参数上注状态)
uint8_t bd_write_flash_flag:2; //写FLASH标识(BD参数上注状态)
};
}BD_Time_Param_Status; //BD及时间基准参数上注状态
/******基本遥测数据******/
typedef struct __attribute__((packed))
{
uint8_t header[2];
uint16_t length;
uint8_t datatype;
uint8_t telemetry_cnt; //遥测请求计数
uint8_t rec_cmd_cnt; //接收指令计数
uint8_t error_cmd_cnt; //错误指令计数
uint8_t recent_cmd; //最近执行指令码
//PostionStatus posi_status; //状态
uint8_t posi_status;
uint16_t bds_week; //BDS周
uint8_t bds_second[3]; //BDS秒
uint32_t bds_microsecond; //bds纳秒
uint16_t gps_week; //gps周
uint8_t gps_second[3]; //gps秒
uint32_t gps_microsecond; //gps纳秒
uint32_t rx_star_broadcast_second; //收到星上秒值
uint32_t rx_star_broadcast_microsecond; //收到星上毫秒值
int8_t diff_seconds; //GNSS与星务时间差秒
int16_t diff_m_seconds; //GNSS与星务时间差毫秒
int32_t GNSS_X_POS_inJ2000; //J2000坐标系X轴位置不定位时输出AAH
int32_t GNSS_Y_POS_inJ2000; //J2000坐标系Y轴位置不定位时输出AAH
int32_t GNSS_Z_POS_inJ2000; //J2000坐标系Z轴位置不定位时输出AAH
int32_t GNSS_X_SPEED_inJ2000; //J2000坐标系X轴速度不定位时输出AAH
int32_t GNSS_Y_SPEED_inJ2000; //J2000坐标系Y轴速度不定位时输出AAH
int32_t GNSS_Z_SPEED_inJ2000; //J2000坐标系Z轴速度不定位时输出AAH
int32_t GNSS_X_POS_inWGS84; //WGS-84坐标系X轴位置不定位时输出AAH
int32_t GNSS_Y_POS_inWGS84; //WGS-84坐标系Y轴位置不定位时输出AAH
int32_t GNSS_Z_POS_inWGS84; //WGS-84坐标系Z轴位置不定位时输出AAH
int32_t GNSS_X_SPEED_inWGS84; //WGS-84坐标系X轴速度不定位时输出AAH
int32_t GNSS_Y_SPEED_inWGS84; //WGS-84坐标系Y轴速度不定位时输出AAH
int32_t GNSS_Z_SPEED_inWGS84; //WGS-84坐标系Z轴速度不定位时输出AAH
int32_t GNSS_X_ORBIT_POS_inJ2000; //GNSS定轨X位置,J2000坐标系
int32_t GNSS_Y_ORBIT_POS_inJ2000; //GNSS定轨Y位置,J2000坐标系
int32_t GNSS_Z_ORBIT_POS_inJ2000; //GNSS定轨Z位置,J2000坐标系
int32_t GNSS_X_ORBIT_SPEED_inJ2000; //GNSS定轨X速度,J2000坐标系
int32_t GNSS_Y_ORBIT_SPEED_inJ2000; //GNSS定轨Y速度,J2000坐标系
int32_t GNSS_Z_ORBIT_SPEED_inJ2000; //GNSS定轨Z速度,J2000坐标系
int32_t GNSS_X_ORBIT_POS_inWGS84; //GNSS定轨X位置,WGS-84坐标系
int32_t GNSS_Y_ORBIT_POS_inWGS84; //GNSS定轨Y位置,WGS-84坐标系
int32_t GNSS_Z_ORBIT_POS_inWGS84; //GNSS定轨Z位置,WGS-84坐标系
int32_t GNSS_X_ORBIT_SPEED_inWGS84; //GNSS定轨X速度,WGS-84坐标系
int32_t GNSS_Y_ORBIT_SPEED_inWGS84; //GNSS定轨Y速度,WGS-84坐标系
int32_t GNSS_Z_ORBIT_SPEED_inWGS84; //GNSS定轨Z速度,WGS-84坐标系
GNSS_Star_Num gnss_star_num;
uint32_t utc_time; //UTC累计秒整数
uint32_t tic_time; //tic计数
uint8_t gps_leap_seconds; //GPS定位计算结果当前使用的跳秒值
uint8_t bd2_leap_seconds; //BDS定位计算结果当前使用的跳秒值
uint16_t GDOP_value; //GNSS定位计算结果GDOP值
int32_t gps_solve_clock_diff; //GPS定位计算结果时钟偏差量
int32_t BD_solve_clock_diff; //BDS定位计算结果时钟偏差量
int32_t GNSS_drift; //GNSS定位计算结果时钟漂移值
GNSSSReceiverStatus receiver_status; //监控状态标识
RS422_Status rs422_status; //422总线初始化原因及计数(总线需求类型1)
uint8_t reserve; //保留
GNSS_CarrierNoise gnss_carrier_noise; //载噪比分布
GNSS_Reset gnss_reset_num; //GNSS接收机复位计数
GNSS_CPUSoft_Status navigation_status; //导航信息处理软件状态
GNSS_OrbitSoft_Status orbitsoft_status; //定轨接口软件状态
uint8_t slave_core_sram_err_num; //从核SRAM监控错误计数
uint8_t mater_core_sram_err_num; //主核SRAM监控错误计数
uint8_t Single_point_use_star ; //单点定位使用星数
uint8_t filter_point_use_star ; //滤波使用星数
uint8_t orbit_param_PDOP ; //定轨参数PDOP
uint8_t orbit_param_pos_residual; //定轨参数位置残差
uint8_t orbit_param_speed_residual; //定轨参数速度残差
uint8_t orbit_convergence_value; //定轨收敛值
uint8_t orbit_infor_standard_deviation; //定轨先验信息的标准差
uint8_t measure_update_standard_deviation; //量测更新后的标准差
uint32_t orbit_module_run_flag; //定轨模块运行标记
GNSS_Orbit_Reject_Reason orbit_reject_reasion; //定轨剔除原因
uint8_t orbit_health[3]; //当前定轨健康字
//GNSS_Soft_Injection_Status soft_injection_Status;//上注状态
uint32_t soft_injection_Status;//上注状态
GNSS_Param_Injection_Status param_injection_Status;//参数上注信息
uint8_t reserve2; //保留
GPS_Channel_Observe_with_pseu gps_channel_1_observe_amount;//GPS第1通道卫星观测量
GPS_Channel_Observe_with_pseu gps_channel_2_observe_amount;//GPS第2通道卫星观测量
GPS_Channel_Observe_with_pseu gps_channel_3_observe_amount;//GPS第3通道卫星观测量
GPS_Channel_Observe_without_pseu gps_channel_4_observe_amount;//GPS第4通道卫星观测量
GPS_Channel_Observe_without_pseu gps_channel_5_observe_amount;//GPS第5通道卫星观测量
GPS_Channel_Observe_without_pseu gps_channel_6_observe_amount;//GPS第6通道卫星观测量
GPS_Channel_Observe_without_pseu gps_channel_7_observe_amount;//GPS第7通道卫星观测量
GPS_Channel_Observe_without_pseu gps_channel_8_observe_amount;//GPS第8通道卫星观测量
BD_Channel_Observe_with_pseu bd_channel_1_observe_amount;//bd第1通道卫星观测量
BD_Channel_Observe_with_pseu bd_channel_2_observe_amount;//bd第2通道卫星观测量
BD_Channel_Observe_with_pseu bd_channel_3_observe_amount;//bd第3通道卫星观测量
BD_Channel_Observe_without_pseu bd_channel_4_observe_amount;//bd第4通道卫星观测量
BD_Channel_Observe_without_pseu bd_channel_5_observe_amount;//bd第5通道卫星观测量
BD_Channel_Observe_without_pseu bd_channel_6_observe_amount;//bd第6通道卫星观测量
BD_Channel_Observe_without_pseu bd_channel_7_observe_amount;//bd第7通道卫星观测量
BD_Channel_Observe_without_pseu bd_channel_8_observe_amount;//bd第8通道卫星观测量
BD_Time_Param_Status bd_time_param_status;
uint8_t navigation_frame_number; //导航星历帧序号
uint8_t navigation_frame_data[20]; //导航星历数据
uint16_t navigation_frame_checksum; //导航星历校验和
uint16_t checksum; //数据长度和有效数据字段的校验和
uint16_t tail; //桢尾
} GNSS_Base_t;
typedef struct __attribute__((packed))
{
uint16_t header; //桢头
uint16_t data_length; //数据长度
uint8_t type; //数据类型
uint8_t cmd[6];
uint16_t checksum;//校验和
uint16_t tail;//桢尾
}GNSS_Cmd;
uint8_t generate_gnss_frame(uint8_t *frame, double PosVelECIReal[6], double mjd, double Epoch_J2000);
#endif