第一次提交
This commit is contained in:
320
ETH/UdpServer/User/interface.h
Normal file
320
ETH/UdpServer/User/interface.h
Normal 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-FFFF,FFFF表示全部帧
|
||||
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_ */
|
||||
Reference in New Issue
Block a user