66 lines
1.7 KiB
C
66 lines
1.7 KiB
C
#ifndef __LASER_H
|
|
#define __LASER_H
|
|
|
|
#include "main.h"
|
|
#include "uarts.h"
|
|
#include <stdbool.h>
|
|
|
|
#define RS485_PORT UART_NUM_5
|
|
#define RS485_REC_LEN 50u
|
|
#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_HandleTypeDef *huart, uint8_t *data, uint16_t len); // 发送数据
|
|
|
|
typedef struct
|
|
{
|
|
volatile laser_statue_e state; // 状态机状态
|
|
|
|
bool connect; // 连接状态
|
|
bool open_status; // 激光开启状态
|
|
bool zero_status; // 调零状态
|
|
float 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);
|
|
void usart3_laser_send(UART_HandleTypeDef *huart,uint8_t *Tx_Buf,uint16_t Size);
|
|
void laser_rx_cb(void);
|
|
void uart3_it_init(void);
|
|
void cmd_parsing(char *str);
|
|
void laser_task(void);
|
|
|
|
#endif
|