58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
#ifndef __LASER_H
|
|
#define __LASER_H
|
|
|
|
#include "board.h"
|
|
|
|
#define RS485_PORT UART_NUM_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_num_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
|