#ifndef DATA_PACKET_H #define DATA_PACKET_H #include #define PACKET_START_BYTE 0xFFFFFFFF #define PACKET_END_BYTE 0x0000 // 数据包结构(精简版 - 有包头无校验和,含GPS) typedef struct __attribute__((packed)) { uint32_t start_byte; // 包头 (4字节) = 0xFFFFFFFF uint32_t timestamp; // 系统时间戳 (4字节) int32_t adc_data1; // ADC1 数据 (4字节) int32_t adc_data2; // ADC2 数据 (4字节) int32_t adc_data3; // ADC3 数据 (4字节) uint32_t gps_time; // GPS时间戳 (4字节) HHMMSS格式 float gps_latitude; // GPS纬度 (4字节) float gps_longitude; // GPS经度 (4字节) } DataPacket_t; // 校正后数据包结构(精简版 - 有包头无校验和,含GPS) typedef struct __attribute__((packed)) { uint32_t start_byte; // 包头 (4字节) = 0xFFFFFFFF uint32_t timestamp; // 系统时间戳 (4字节) float corrected_x; // 校正后X轴数据 (4字节) float corrected_y; // 校正后Y轴数据 (4字节) float corrected_z; // 校正后Z轴数据 (4字节) uint32_t gps_time; // GPS时间戳 (4字节) HHMMSS格式 float gps_latitude; // GPS纬度 (4字节) float gps_longitude; // GPS经度 (4字节) } CorrectedDataPacket_t; // 带GPS信息的校正数据包结构(精简版 - 有包头无校验和) typedef struct __attribute__((packed)) { uint32_t start_byte; // 包头 (4字节) = 0xFFFFFFFF uint32_t timestamp; // 系统时间戳 (4字节) float corrected_x; // 校正后X轴数据 (4字节) float corrected_y; // 校正后Y轴数据 (4字节) float corrected_z; // 校正后Z轴数据 (4字节) uint32_t gps_time; // GPS时间戳 (4字节) HHMMSS格式 float gps_latitude; // GPS纬度 (4字节) float gps_longitude; // GPS经度 (4字节) } CorrectedDataPacketWithGPS_t; // 函数声明 uint16_t Calculate_CRC16(const uint8_t *data, uint16_t len); void PackData(DataPacket_t *packet, int32_t adc1, int32_t adc2, int32_t adc3, uint32_t gps_time, float latitude, float longitude); void PackCorrectedData(CorrectedDataPacket_t *packet, float x, float y, float z, uint32_t gps_time, float latitude, float longitude); void PackCorrectedDataWithGPS(CorrectedDataPacketWithGPS_t *packet, float x, float y, float z, uint32_t gps_time, float latitude, float longitude); uint8_t ValidatePacket(const DataPacket_t *packet); uint8_t ValidateCorrectedPacket(const CorrectedDataPacket_t *packet); uint8_t ValidateCorrectedPacketWithGPS(const CorrectedDataPacketWithGPS_t *packet); #endif // DATA_PACKET_H