53 lines
1.8 KiB
C
53 lines
1.8 KiB
C
|
|
#ifndef __LASER_SIMPLE_H
|
|||
|
|
#define __LASER_SIMPLE_H
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#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
|