#ifndef _FLUX_UART_H #define _FLUX_UART_H #ifdef __cplusplus extern "C" { #endif #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/uart.h" #include "driver/gpio.h" #include "sdkconfig.h" #include "esp_log.h" /* UART */ /* UART1 RT-2 TX-1*/ /* UART2 RT-46 TX-45*/ #define ECHO_TEST_TXD2 GPIO_NUM_45 #define ECHO_TEST_RXD2 GPIO_NUM_46 #define ECHO_UART_PORT_NUM2 (UART_NUM_2) #define ECHO_TEST_TXD1 GPIO_NUM_1 #define ECHO_TEST_RXD1 GPIO_NUM_2 #define ECHO_UART_PORT_NUM1 (UART_NUM_1) #define ECHO_TEST_RTS (UART_PIN_NO_CHANGE) #define ECHO_TEST_CTS (UART_PIN_NO_CHANGE) #define ECHO_UART_BAUD_RATE (9600) #define ECHO_TASK_STACK_SIZE (16*1024) /* Choose whether to use big-endian or little-endian. Modbus-RTU communication uses little-endian. */ #define BIG_ENDIAN_USED 0 #define LITTLE_ENDIAN_USED !BIG_ENDIAN_USED /* Digital flow meter address */ #define FLUX_ADDR 0x01 #define FLUX_FUNC_READ 0x03 #define FLUX_FUNC_SET 0x16 /* Modbus-RTU frame format */ /* All data from the wet flow meter are two bytes long */ /* ADDR : 1byte FUNC : 1byte DATA : 2byte CRC : 2byte */ struct ModbusRTU_Frame { unsigned char ADDR; unsigned char FUNC; unsigned char DATA[4]; unsigned char CRC[2]; }; extern struct ModbusRTU_Frame flux_frame; extern struct ModbusRTU_Frame breath_frame; /* UART1 response task */ void uart1_echoTask(void* arg); /* UART2 response task */ void uart2_echoTask(void* arg); /* CRC16 checksum */ unsigned short CRC16(unsigned char* pchMsg, unsigned short wDataLen); esp_err_t ModbusRTU_Send(uart_port_t uart_num, struct ModbusRTU_Frame *frame); #ifdef __cplusplus } /*extern "C"*/ #endif #endif