voqc/board/Inc/laser.h

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