#ifndef __LASER_SIMPLE_H #define __LASER_SIMPLE_H #include #include "usart.h" #ifdef __cplusplus extern "C" { #endif typedef enum { LASER_CH_FRONT_STP = 0, LASER_CH_FRONT_ATK, LASER_CH_REAR_STP, LASER_CH_REAR_ATK, LASER_CH_MAX } laser_channel_t; typedef struct { uint16_t distance_mm; // [新增] 经过中值滤波处理后平滑的距离值 (推荐用于避障控制) uint16_t raw_distance_mm; // [新增] 传感器吐出的原始距离值 (供调试或特殊算法读取) uint8_t valid; // 数据是否有效 uint8_t online; // 雷达是否在线(未超时) uint8_t fault_code; // 故障码 (0为正常,0x80为超时) uint32_t update_tick_ms; // 最后一次数据刷新的系统节拍 } laser_simple_data_t; typedef struct { laser_simple_data_t ch[LASER_CH_MAX]; } laser_simple_snapshot_t; /* 初始化并启动 DMA 及解析任务 */ void LASER_SIMPLE_Init(void); /* 周期调用 (实际为空,保留接口兼容) */ void LASER_SIMPLE_Poll(uint32_t tick_ms); /* 获取统一快照 (无数据撕裂风险) */ const laser_simple_snapshot_t *LASER_SIMPLE_GetSnapshot(void); /* 获取前后最小有效距离 (使用滤波后的值) */ uint16_t LASER_SIMPLE_GetFrontNearest(void); uint16_t LASER_SIMPLE_GetRearNearest(void); /* --- 新增:暴露给全局回调分发器的专用接口 --- */ void LASER_UART_RxCpltCallback(UART_HandleTypeDef *huart); void LASER_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); void LASER_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size); void LASER_UART_ErrorRecovery(UART_HandleTypeDef *huart); #ifdef __cplusplus } #endif #endif