This repository has been archived on 2025-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
torsion/User/board/laser.h

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