FluxDC/components/FluxUart/FluxUart.h

256 lines
5.6 KiB
C
Raw Normal View History

/**
* @file FluxUart.h
* @brief
*
*
*
* @author wang xiang en
* @date 2025-04-19
* @version
* @copyright (C)2025, YUWELL MEDTECH Co.ltd
*/
2025-03-15 09:37:07 +08:00
#ifndef _FLUX_UART_H
#define _FLUX_UART_H
#ifdef __cplusplus
extern "C" {
#endif
2025-03-11 18:55:34 +08:00
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include "esp_log.h"
2025-03-15 09:37:07 +08:00
2025-03-11 18:55:34 +08:00
/* UART */
/* UART1 RT-2 TX-1*/
/* UART2 RT-46 TX-45*/
#if 1
2025-03-15 13:17:10 +08:00
#define ECHO_TEST_TXD2 GPIO_NUM_45
#define ECHO_TEST_RXD2 GPIO_NUM_46
2025-03-11 18:55:34 +08:00
#define ECHO_UART_PORT_NUM2 (UART_NUM_2)
2025-03-15 13:17:10 +08:00
#define ECHO_TEST_TXD1 GPIO_NUM_1
#define ECHO_TEST_RXD1 GPIO_NUM_2
2025-03-11 18:55:34 +08:00
#define ECHO_UART_PORT_NUM1 (UART_NUM_1)
#else
#define ECHO_TEST_TXD2 GPIO_NUM_1
#define ECHO_TEST_RXD2 GPIO_NUM_2
#define ECHO_UART_PORT_NUM2 (UART_NUM_2)
#define ECHO_TEST_TXD1 GPIO_NUM_45
#define ECHO_TEST_RXD1 GPIO_NUM_46
#define ECHO_UART_PORT_NUM1 (UART_NUM_1)
#endif
/*不使用RTS CTS*/
2025-03-11 18:55:34 +08:00
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
/* 通讯参数设置 */
2025-03-11 18:55:34 +08:00
#define ECHO_UART_BAUD_RATE (9600)
#define ECHO_TASK_STACK_SIZE (8*1024)
2025-03-11 18:55:34 +08:00
/* 选择使用大端/小端模式 */
#define BIG_ENDIAN_USED 0
#define LITTLE_ENDIAN_USED !BIG_ENDIAN_USED
/* 流量计通讯参数设定 地址、功能码 */
#define FLUX_ADDR 0x01
#define FLUX_FUNC_READ 0x03
#define FLUX_FUNC_SET 0x10
#define FLUX_FUNC_SET_SINGLE 0x06
/* 启动指令下发事件组标志位 */
#define START_TEST_EVENT_BIT BIT0
/* 定义缓冲大小 */
#define BUF_SIZE (1024)
/*定义工作模式*/
enum FluxMachineWorkMode{
FLUX_MODE_NORMAL,
FLUX_MODE_TIMER,
FLUX_MODE_VOLUME,
FLUX_MODE_REV,
};
/**
* @brief RTU通讯帧
*
*/
struct ModbusRTU_Frame
{
unsigned char ADDR;
unsigned char FUNC;
2025-03-13 10:26:19 +08:00
unsigned char DATA[4];
unsigned char CRC[2];
};
/**
* @brief 32RTU通讯帧
*
*/
struct ModbusRTU_Frame2Reg
{
unsigned char ADDR;
unsigned char FUNC;
2025-03-11 18:55:34 +08:00
unsigned short regAddr;
unsigned short regNum;
uint8_t ByteNum;
uint8_t DATA[4];
unsigned char CRC[2];
};
2025-03-24 08:08:44 +08:00
/**
* @brief
*
*/
2025-03-24 08:08:44 +08:00
struct FluxMachineData
{
enum FluxMachineWorkMode workMode;
float time;
float volume;
float rev;
float breathTimes;
int32_t breathRate;
2025-03-24 08:08:44 +08:00
unsigned short finishFlag;
float liquidTemperature;
float cumulativeVolume;
};
/* 记录当前呼吸频率、累计流量、累计体积、累计时间等数据 */
2025-03-24 08:08:44 +08:00
extern struct FluxMachineData FluxMachineData;
/* 通讯帧结构体 */
extern struct ModbusRTU_Frame2Reg flux_frame2Reg;
/* 通讯帧结构体 */
extern struct ModbusRTU_Frame flux_frame;
extern struct ModbusRTU_Frame breath_frame;
/* 定义用于下发启动指令的帧 */
extern struct ModbusRTU_Frame flux_frame_start;
/* 启动指令下发事件组 */
extern EventGroupHandle_t start_state_event_group;
2025-04-23 16:00:26 +08:00
/* 导出当前工作模式的变量 */
extern bool is_test_mode_nom;
/**
* @brief
*
*/
#define FLUX_TEST_START flux_frame_start.ADDR = FLUX_ADDR;\
flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE;\
\
flux_frame_start.DATA[0] = 0x00;\
flux_frame_start.DATA[1] = 0x01;\
flux_frame_start.DATA[2] = 0x00;\
flux_frame_start.DATA[3] = 0x01;\
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start));\
ESP_LOGI("FLUX_TEST_START","send start");
/**
* @brief
*
*/
#define RESULT_RIGHT lv_obj_set_style_bg_color(ui_pageHome_panelTestResult,lv_color_hex(0x00FF00),LV_PART_MAIN);\
lv_label_set_text(ui_pageHome_labelTestResult,"V");
/**
* @brief
*
*/
#define RESULT_FAULT lv_obj_set_style_bg_color(ui_pageHome_panelTestResult,lv_color_hex(0xFF0000),LV_PART_MAIN);\
lv_label_set_text(ui_pageHome_labelTestResult,"X");
2025-04-22 15:14:43 +08:00
/* 定义主界面进度条显示控制函数 */
2025-04-25 09:03:30 +08:00
#define FLUX_PROGRESS_BAR_CONTROL(x) lv_bar_set_value(ui_pageHome_BarTestProgBS, x, LV_ANIM_ON);
/**
* @brief 1
*
* @param[in] arg not used
*
*/
2025-03-15 13:17:10 +08:00
void uart1_echoTask(void* arg);
2025-03-11 18:55:34 +08:00
/**
* @brief 2
*
* @param[in] arg not used
*
*/
2025-03-15 13:17:10 +08:00
void uart2_echoTask(void* arg);
2025-03-11 18:55:34 +08:00
/**
* @brief
*
* @param[in] arg not used
*
*/
2025-03-25 14:26:24 +08:00
void test_task(void *arg);
/**
* @brief CRC16
*
* @param[in] pchMsg
* @param[in] wDataLen
*
*/
unsigned short CRC16(unsigned char* pchMsg, unsigned short wDataLen);
2025-03-13 10:26:19 +08:00
/**
* @brief 03 06
*
* @param[in] uart_num
* @param[in] frame
*
*/
esp_err_t ModbusRTU_Send_0306(uart_port_t uart_num, struct ModbusRTU_Frame *frame);
2025-03-13 10:26:19 +08:00
#if USART_USE_10_COMMAND
/**
* @brief 0x10
*
* @param[in] uart_num
* @param[in] frame
*
*/
esp_err_t ModbusRTU_Send_0x10(uart_port_t uart_num, struct ModbusRTU_Frame2Reg *frame);
#endif
/**
* @brief 05
*
* @param[in] uart_num
* @param[in] frame
*
*/
esp_err_t ModbusRTU_Send_0x05(uint32_t ADDR);
2025-03-15 09:37:07 +08:00
/**
* @brief
*
*/
esp_err_t RefreshResult(void);
2025-03-15 09:37:07 +08:00
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif