#ifndef __LASER_H #define __LASER_H #include "usart.h" #include "lib.h" #include "uart.h" #define RS485_PORT UART_5 #define RS485_REC_LEN 30u #define STATUS_DEFAULT 1 // 上电后默认状态 :激光开启,调零关闭后再开启 typedef enum { LASER_IDEL = 0, LASER_CONNECT, LASER_OPEN_STATUS, LASER_ZERO_STATUS_CLOSE, LASER_ZERO_STATUS_OPEN, LASER_DISTANCE, LASER_READY, } laser_statue_e; /** * @bref 状态机事件 */ typedef struct sm_event_s { laser_statue_e sig; void (*event)(void); } laser_event_t; typedef void (*send_data_cb_t)(uart_id_e id, uint8_t *data, uint16_t len); // 发送数据 typedef struct { volatile laser_statue_e state; // 状态机状态 bool connect; // 连接状态 bool open_status; // 激光开启状态 bool zero_status; // 调零状态 float32 distance; // 测定值 send_data_cb_t send_data_cb; // 发送数据回调函数,外部传入 // 以下是指令部分 void (*command_device_connect_req)(void); // 设备是否连接 void (*command_open_status_req)(void); // 激光开启状态查询 void (*command_open_status_write_req)(bool); // 激光开启OR关闭 void (*command_distance_read_req)(void); // 测定值读出 void (*command_zero_status_req)(void); // 调零状态查询 void (*command_zero_status_write_req)(bool); // 调零状态开启OR关闭 } laser_t; extern laser_t laser_handle; extern laser_event_t laser_event[]; extern void laser_init(send_data_cb_t cb); #endif