第一次提交

This commit is contained in:
2025-09-05 21:09:02 +08:00
commit f0106c0f17
107 changed files with 38950 additions and 0 deletions

View File

@@ -0,0 +1,320 @@
#ifndef _INTERFACE_H_
#define _INTERFACE_H_
#include "stdint.h"
#include "app_config.h" // 假设包含基础配置和宏定义
#include "interface_config.h"
#include "debug.h"
#pragma pack(1)//数据结构一个字节对齐
#define request_read_id un_request_frame.bit_data.request_id//读取ID
#define request_header_id un_request_frame.bit_data.frame_header//帧头
#define FAULT 0
#define NORMAL 1
#define NMEA_BUF_SIZE 128
#define RX_BUFFER_LEN 1400
#define IMU_LEN 90
#define IMU_FRAME_LEN 42
typedef struct StrInfNavigationOutput
{
uint16_t frame_header; // 帧头 固定值0xAACC
uint16_t frame_type; // 帧类型 固定值0x0027
uint16_t frame_length; // 帧长 固定值49
uint8_t accumulated; // 累加值 按帧累加
/* 陀螺仪数据 (6字节) */
int16_t gyroscope_x_axis; // 陀螺X轴 | 偏移量0 | 实际值=原始值×(300/32768)+0 | 单位deg/s
int16_t gyroscope_y_axis; // 陀螺Y轴 | 偏移量0 | 实际值=原始值×(300/32768)+0 | 单位deg/s
int16_t gyroscope_z_axis; // 陀螺Z轴 | 偏移量0 | 实际值=原始值×(300/32768)+0 | 单位deg/s
/* 加速度计数据 (6字节) */
int16_t acceleration_x_axis; // 加表X轴 | 偏移量0 | 实际值=原始值×(12/32768)+0 | 单位g
int16_t acceleration_y_axis; // 加表Y轴 | 偏移量0 | 实际值=原始值×(12/32768)+0 | 单位g
int16_t acceleration_z_axis; // 加表Z轴 | 偏移量0 | 实际值=原始值×(12/32768)+0 | 单位g
/* 磁力计数据 (6字节) */
int16_t magnetic_x_axis; // 磁力计X轴 | 偏移量0 | 实际值=原始值×1+0 | 单位uT
int16_t magnetic_y_axis; // 磁力计Y轴 | 偏移量0 | 实际值=原始值×1+0 | 单位uT
int16_t magnetic_z_axis; // 磁力计Z轴 | 偏移量0 | 实际值=原始值×1+0 | 单位uT
/* 定位数据 (12字节) */
int32_t lon; // 经度 | 偏移量0 | 实际值=原始值×1e-7+0 | 单位deg
int32_t lat; // 纬度 | 偏移量0 | 实际值=原始值×1e-7+0 | 单位deg
int32_t high; // 高度 | 偏移量0 | 实际值=原始值×1e-3+0 | 单位m
/* 导航数据 (11字节) */
uint8_t rtk_state; // RTK状态 | 偏移量0 | 0=不定位,1=单点,2=DGPS,4=RTK固定解,5=RTK浮点解
int16_t gps_speed; // GPS速度 | 偏移量0 | 实际值=原始值×0.01+0 | 单位m/s
int16_t car_speed; // 车速 | 偏移量0 | 实际值=原始值×0.01+0 | 单位m/s
int16_t dual_antenna_heading; // 双天线航向 | 偏移量0 | 实际值=原始值×0.01+0 | 单位:度
int32_t time; // 时间 | 偏移量0 | 实际值=原始值/4000+0 | 单位:秒
/* 校验位 (1字节) */
uint8_t crc1; // CRC按照字节来接取低8位 | 偏移量0
} StrInfNavigationOutput;
typedef union _UnInfNavigationOutput
{
StrInfNavigationOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrInfNavigationOutput)]; // 通过结构体类型确定大小
} UnInfNavigationOutput;
typedef struct {
/* 帧头 (3字节) */
// uint8_t header[3]; // 固定值0xBD 0xDB 0x0B
uint8_t header1; // 固定值0xBD 0xDB 0x0B
uint8_t header2; // 固定值0xBD 0xDB 0x0B
uint8_t header3; // 固定值0xBD 0xDB 0x0B
/* 姿态数据 (6字节) */
int16_t roll; // 横滚角 实际值=原始值×(360/32768) 单位deg
int16_t pitch; // 俯仰角 实际值=原始值×(360/32768) 单位deg
int16_t yaw; // 方位角 实际值=原始值×(360/32768) 单位deg
/* 陀螺仪数据 (6字节) */
int16_t gyro_x; // 陀螺X轴 实际值=原始值×(300/32768) 单位deg/s
int16_t gyro_y; // 陀螺Y轴 实际值=原始值×(300/32768) 单位deg/s
int16_t gyro_z; // 陀螺Z轴 实际值=原始值×(300/32768) 单位deg/s
/* 加速度计数据 (6字节) */
int16_t accel_x; // 加表X轴 实际值=原始值×(12/32768) 单位g
int16_t accel_y; // 加表Y轴 实际值=原始值×(12/32768) 单位g
int16_t accel_z; // 加表Z轴 实际值=原始值×(12/32768) 单位g
/* 定位数据 (12字节) */
int32_t latitude; // 纬度 实际值=原始值×1e-7 单位deg
int32_t longitude; // 经度 实际值=原始值×1e-7 单位deg
int32_t altitude; // 高度 实际值=原始值×1e-3 单位m
/* 速度数据 (6字节) */
int16_t velocity_north; // 北向速度 实际值=原始值×(100/32768) 单位m/s
int16_t velocity_east; // 东向速度 实际值=原始值×(100/32768) 单位m/s
int16_t velocity_down; // 地向速度 实际值=原始值×(100/32768) 单位m/s
/* 状态数据 (5字节) */
uint8_t init_status; // Bit0:位置 Bit1:速度 Bit2:俯仰/横滚 Bit3:航向 (1=完成初始化)
uint8_t rtk_status; // 0:不定位 1:单点 2:DGPS 4:RTK固定解 5:RTK浮点解
uint8_t reserved[3]; // 预留字节
/* 导航数据 (10字节) */
uint16_t nav_status; // 导航状态位 (包含50、51、62等状态)
int16_t gps_speed; // GPS速度 实际值=原始值×0.01 单位m/s
int16_t vehicle_speed; // 车速 实际值=原始值×0.01 单位m/s
uint16_t dual_heading; // 双天线航向 实际值=原始值×0.01 单位:度
uint32_t timestamp; // 时间 实际值=原始值/4000 单位:秒
/* 类型和校验 (2字节) */
uint8_t data_type; // 数据类型
uint8_t checksum; // 异或校验 (0~56字节)
} StrInfNavigationRS232Output;
typedef union {
StrInfNavigationRS232Output bit_data;
uint8_t arr[sizeof(StrInfNavigationRS232Output)];
} UnInfNavigationRS232Output;
typedef struct StrInfNavigationOutputC
{
uint16_t frame_header; // 帧头 固定值0xAACC
uint16_t frame_type; // 帧类型 固定值0x0027
uint16_t frame_length; // 帧长 固定值49
uint8_t accumulated; // 累加值 按帧累加
/* 陀螺仪数据 (6字节) */
int16_t gyroscope_x_axis; // 陀螺X轴 | 偏移量0 | 实际值=原始值×(300/32768)+0 | 单位deg/s
int16_t gyroscope_y_axis; // 陀螺Y轴 | 偏移量0 | 实际值=原始值×(300/32768)+0 | 单位deg/s
int16_t gyroscope_z_axis; // 陀螺Z轴 | 偏移量0 | 实际值=原始值×(300/32768)+0 | 单位deg/s
/* 加速度计数据 (6字节) */
int16_t acceleration_x_axis; // 加表X轴 | 偏移量0 | 实际值=原始值×(12/32768)+0 | 单位g
int16_t acceleration_y_axis; // 加表Y轴 | 偏移量0 | 实际值=原始值×(12/32768)+0 | 单位g
int16_t acceleration_z_axis; // 加表Z轴 | 偏移量0 | 实际值=原始值×(12/32768)+0 | 单位g
/* 四元数 (16字节) */
uint32_t q0; // 四元数标量分量(w) | 存储值=实际值×1e6 | 偏移量0 | 精度±0.000001 | 无量纲
uint32_t q1; // 四元数向量分量(x) | 存储值=实际值×1e6 | 偏移量0 | 精度±0.000001 | 无量纲
uint32_t q2; // 四元数向量分量(y) | 存储值=实际值×1e6 | 偏移量0 | 精度±0.000001 | 无量纲
uint32_t q3; // 四元数向量分量(z) | 存储值=实际值×1e6 | 偏移量0 | 精度±0.000001 | 无量纲
/* 磁力计数据 (6字节) */
int16_t magnetic_x_axis; // 磁力计X轴 | 偏移量0 | 实际值=原始值×1+0 | 单位uT
int16_t magnetic_y_axis; // 磁力计Y轴 | 偏移量0 | 实际值=原始值×1+0 | 单位uT
int16_t magnetic_z_axis; // 磁力计Z轴 | 偏移量0 | 实际值=原始值×1+0 | 单位uT
/* 定位数据 (12字节) */
int32_t lon; // 经度 | 偏移量0 | 实际值=原始值×1e-7+0 | 单位deg
int32_t lat; // 纬度 | 偏移量0 | 实际值=原始值×1e-7+0 | 单位deg
int32_t high; // 高度 | 偏移量0 | 实际值=原始值×1e-3+0 | 单位m
/* 导航数据 (11字节) */
uint8_t rtk_state; // RTK状态 | 偏移量0 | 0=不定位,1=单点,2=DGPS,4=RTK固定解,5=RTK浮点解
int16_t gps_speed; // GPS速度 | 偏移量0 | 实际值=原始值×0.01+0 | 单位m/s
int16_t car_speed; // 车速 | 偏移量0 | 实际值=原始值×0.01+0 | 单位m/s
int16_t dual_antenna_heading; // 双天线航向 | 偏移量0 | 实际值=原始值×0.01+0 | 单位:度
int32_t time; // 时间 | 偏移量0 | 实际值=原始值/4000+0 | 单位:秒
/* 校验位 (1字节) */
uint8_t crc1; // CRC按照字节来接取低8位 | 偏移量0
} StrInfNavigationOutputC;
typedef union _UnInfNavigationOutputC
{
StrInfNavigationOutputC bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrInfNavigationOutputC)]; // 通过结构体类型确定大小
} UnInfNavigationOutputC;
typedef enum {
NMEA_TYPE_UNKNOWN = 0, // 未确定
NMEA_TYPE_GGA, // GGA协议
NMEA_TYPE_VTG, // VTG协议
NMEA_TYPE_THS // THS协议
} NMEA_FrameType;
typedef struct StrInfNMEAOutput
{
char buffer[NMEA_BUF_SIZE];
NMEA_FrameType frame_ready; // 0:未确定 1:GGA 2:VTG 3:THS
} StrInfNMEAOutput;
// 接收请求帧
typedef struct _StrRequestFrame
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头 固定值0x0080
unsigned int frame_type : 16; // 帧类型 固定值0x0029
unsigned int frame_length : 16; // 帧长 固定值10
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int request_id : 16; // 请求帧ID 请求ID 0-FFFFFFFF表示全部帧
unsigned int crc : 8; // CRC 按字节累加之和 取低8位
} StrRequestFrame;
typedef union _UnRequestFrame
{
StrRequestFrame bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrRequestFrame)]; // 通过结构体类型确定大小
} UnRequestFrame;
// 接收请求帧
typedef struct _StrRequestMessage
{
uint8_t ip_adesser[8]; // IP地址
uint16_t port;
} StrRequestMessage;
// typedef struct {
// uint8_t data_id;
// uint8_t data_len;
// uint8_t data[4];
// }YisDateFrame;
typedef struct
{
uint8_t dma_buffer[2][RX_BUFFER_LEN]; // 双缓冲
volatile uint8_t active_buf; // 当前活跃缓冲区索引
volatile uint16_t buf_len; // 当前活跃缓冲区索引
} rtcmBuffer;
typedef enum{
IIM46234 = 0,
YIS321,
}imu_type;
typedef struct
{
uint8_t dma_buffer[2][IMU_LEN]; // 双缓冲
volatile uint8_t active_buf; // 当前活跃缓冲区索引
volatile uint16_t buf_len; // 当前活跃缓冲区索引
volatile imu_type type; // 类型
} imuBuffer;
//外部数据结构声明
// 设置输出加速度角速度数据
extern uint8_t set_output_data[20];
// 设定输出频率
extern uint8_t set_rate[20];
// 保存配置
extern uint8_t save_cmd[20];
// 进入流控模式,输出数据
extern uint8_t stream_cmd[20];
//变量
extern uint8_t test_app[26];
// 设置输出加速度角速度数据
extern uint8_t set_output_data[20];
// 设定输出频率
extern uint8_t set_rate[20];
// 保存配置
extern uint8_t save_cmd[20];
// 进入流控模式,输出数据
extern uint8_t stream_cmd[20];
extern UnInfNavigationOutput navigation_output1;
extern UnInfNavigationOutput navigation_output2;
extern UnInfNavigationOutputC navigation_outputC1;
extern StrInfNMEAOutput nema_output1 ;
extern UnInfNavigationRS232Output navigation_rs232_output;//串口输出数据
extern UnRequestFrame un_request_frame;//请求帧
extern StrRequestMessage str_RequestMessage;//请求信息
extern rtcmBuffer RTCM_Buffer1;
extern imuBuffer imu_buffer1;
//函数
void canSendAll(void *signal_id);
void ethernetSendAll(void *signal_id);
#pragma pack()
#endif /* _INTERFACE_H_ */