Files
HBshuiwuConcentrator/APP/uart.h~RF183f36a.TMP
2025-12-15 16:07:49 +08:00

589 lines
23 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
******************************************************************************
* @file hal_uart.h
* @author William Liang
* @version V1.0.0
* @date 07/22/2013
* @brief This file contains the headers of the uart handlers.
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef _UART_H_
#define _UART_H_
/* Includes ------------------------------------------------------------------*/
#include "include.h"
#include "protocol.h"
#include "storage.h"
#define USART_BUF_SIXE 255
//define COM MBUS master infomation
#define COM_MBUS_MASTER_NO USART1
#define COM_MBUS_MASTER_BAUD 2400
#define COM_MBUS_MASTER_CHECK USART_Parity_Even
#define COM_MBUS_MASTER_CLK RCC_APB2Periph_USART1
#define COM_MBUS_MASTER_TX_PIN GPIO_Pin_9
#define COM_MBUS_MASTER_TX_PORT GPIOA
#define COM_MBUS_MASTER_TX_PORT_CLK RCC_APB2Periph_GPIOA
#define COM_MBUS_MASTER_RX_PIN GPIO_Pin_10
#define COM_MBUS_MASTER_RX_PORT GPIOA
#define COM_MBUS_MASTER_RX_PORT_CLK RCC_APB2Periph_GPIOA
#define COM_MBUS_MASTER_IRQn USART1_IRQn
#define COM_MBUS_MASTER_DMA_CLK RCC_AHBPeriph_DMA1
#define COM_MBUS_MASTER_TX_DMA_CHANNEL DMA1_Channel4
#define COM_MBUS_MASTER_DR_BASE (USART1_BASE + 4)
#define COM_MBUS_MASTER_TX_IRQHandler DMA1_Channel4_IRQHandler
#define COM_MBUS_MASTER_RX_IRQHandler USART1_IRQHandler
#define COM_MBUS_MASTER_TX_DMA_COMPLETE DMA1_IT_TC4
#define COM_MBUS_MASTER_TX_DMA_ERROR DMA1_IT_TE4
#define COM_MBUS_MASTER_DMA_IRQn DMA1_Channel4_IRQn
#define COM_MBUS_MASTER_TX_BUFFER_SIZE 200
#define COM_MBUS_MASTER_RX_BUFFER_SIZE 255
#define COM_MBUS_MASTER_STR "MBUS master"
//define COM LORA moudule infomation
#define COM_RADIO_NO UART5
#define COM_RADIO_BAUD 9600 //8,e,1
#define COM_RADIO_CHECK USART_Parity_Even
#define COM_RADIO_CLK RCC_APB1Periph_UART5
#define COM_RADIO_TX_PIN GPIO_Pin_12
#define COM_RADIO_TX_PORT GPIOC
#define COM_RADIO_TX_PORT_CLK RCC_APB2Periph_GPIOC
#define COM_RADIO_RX_PIN GPIO_Pin_2
#define COM_RADIO_RX_PORT GPIOD
#define COM_RADIO_RX_PORT_CLK RCC_APB2Periph_GPIOD
#define COM_RADIO_IRQn UART5_IRQn
#define COM_RADIO_DMA_CLK 0
#define COM_RADIO_TX_DMA_CHANNEL 0
#define COM_RADIO_DR_BASE 0
#define COM_RADIO_TX_IRQHandler 0
#define COM_RADIO_RX_IRQHandler 0
#define COM_RADIO_TX_DMA_COMPLETE 0
#define COM_RADIO_TX_DMA_ERROR 0
#define COM_RADIO_DMA_IRQn 0
#define COM_RADIO_TX_BUFFER_SIZE 255
#define COM_RADIO_RX_BUFFER_SIZE 255
#define COM_RADIO_STR "radio"
//define COM PLC module infomation
#define COM_PLC_NO USART3
#define COM_PLC_BAUD 2400
#define COM_PLC_CHECK USART_Parity_Even
#define COM_PLC_CLK RCC_APB1Periph_USART3
#define COM_PLC_TX_PIN GPIO_Pin_10
#define COM_PLC_TX_PORT GPIOB
#define COM_PLC_TX_PORT_CLK RCC_APB2Periph_GPIOB
#define COM_PLC_RX_PIN GPIO_Pin_11
#define COM_PLC_RX_PORT GPIOA
#define COM_PLC_RX_PORT_CLK RCC_APB2Periph_GPIOB
#define COM_PLC_IRQn USART3_IRQn
#define COM_PLC_DMA_CLK RCC_AHBPeriph_DMA1
#define COM_PLC_TX_DMA_CHANNEL DMA1_Channel2
#define COM_PLC_DR_BASE (USART3_BASE + 4)
#define COM_PLC_TX_IRQHandler DMA1_Channel2_IRQHandler
#define COM_PLC_RX_IRQHandler USART3_IRQHandler
#define COM_PLC_TX_DMA_COMPLETE DMA1_IT_TC2
#define COM_PLC_TX_DMA_ERROR DMA1_IT_TE2
#define COM_PLC_DMA_IRQn DMA1_Channel2_IRQn
#define COM_PLC_TX_BUFFER_SIZE 255
#define COM_PLC_RX_BUFFER_SIZE 255
#define COM_PLC_STR "PLC"
//define COM LORA moudule infomation
#define COM_485_NO USART2
#define COM_485_BAUD 2400 //8,e,1
#define COM_485_CHECK USART_Parity_Even
#define COM_485_CLK RCC_APB1Periph_USART2
#define COM_485_TX_PIN GPIO_Pin_2
#define COM_485_TX_PORT GPIOA
#define COM_485_TX_PORT_CLK RCC_APB2Periph_GPIOA
#define COM_485_RX_PIN GPIO_Pin_3
#define COM_485_RX_PORT GPIOA
#define COM_485_RX_PORT_CLK RCC_APB2Periph_GPIOA
#define COM_485_IRQn USART2_IRQn
#define COM_485_DMA_CLK RCC_AHBPeriph_DMA1
#define COM_485_TX_DMA_CHANNEL DMA1_Channel7
#define COM_485_DR_BASE (USART2_BASE + 4)
#define COM_485_TX_IRQHandler DMA1_Channel7_IRQHandler
#define COM_485_RX_IRQHandler USART2_IRQHandler
#define COM_485_TX_DMA_COMPLETE DMA1_IT_TC7
#define COM_485_TX_DMA_ERROR DMA1_IT_TE7
#define COM_485_DMA_IRQn DMA1_Channel7_IRQn
#define COM_485_TX_BUFFER_SIZE 255
#define COM_485_RX_BUFFER_SIZE 255
#define COM_485_STR "485"
/*
//define COM module end
#define MBUS_OVERLOAD_FLAG_PIN GPIO_Pin_3
#define MBUS_OVERLOAD_FLAG_PIN_PORT GPIOC
#define MBUS_OVERLOAD_FLAG_PORT_CLK RCC_APB2Periph_GPIOC
#define MBUS_OVERLOAD_FLAG_PORT_SOURCE GPIO_PortSourceGPIOC
#define MBUS_OVERLOAD_FLAG_PIN_SOURCE GPIO_PinSource3
#define MBUS_OVERLOAD_FLAG_LINE EXTI_Line3
#define MBUS_OVERLOAD_FLAG_IRQHandler EXTI3_IRQHandler
*/
#define MBUSM_BAUD_COFF (11 * 1000 / COM_MBUS_MASTER_BAUD)
#define PLC_BAUD_COFF (11 * 1000 / COM_PLC_BAUD)
#define RS485_BAUD_COFF (11 * 1000 / COM_485_BAUD)
#define PRINT_BAUD_COFF (11 * 1000 / COM_DEBUG_BAUD)
#define MBUS_SWITCH_TIMEOUT (10000 /portTICK_RATE_MS)
#define PORT_RX_TIMEOUT (15 /portTICK_RATE_MS)//设置串口的超时接收时间,此值需设置为最低波特率的最少两个字节时间
#define SCAN_PORT_RERIOD (5 /portTICK_RATE_MS)//扫描串口超时的周期
#define MBUS_TIMEOUT (1200 /portTICK_RATE_MS)
#define CS485_TIMEOUT (2000 /portTICK_RATE_MS)
#define PLC_TIMEOUT (2500 /portTICK_RATE_MS)
#define XIMEI_TIMEOUT (10000 /portTICK_RATE_MS)
#define MUT_TIMEOUT (2000 /portTICK_RATE_MS)
#define OPEN_SWITCN_DELAY (2000 /portTICK_RATE_MS)
#define DELAY_HOUR_TIME (3600000 /portTICK_RATE_MS)
#define DELAY_MIN_TIME (60000 /portTICK_RATE_MS)
typedef struct
{
USART_TypeDef * com;
USART_InitTypeDef uart_param;
uint32_t com_clk;
uint16_t com_tx_pin;
GPIO_TypeDef * com_tx_port;
uint32_t com_tx_port_clk;
uint16_t com_rx_pin;
GPIO_TypeDef * com_rx_port;
uint32_t xom_rx_port_clk;
uint32_t com_DMA_CLK;
uint8_t com_IRQn;
uint8_t com_DMA_IRQn;
}st_uart_int;
typedef struct
{
USART_TypeDef * com;
DMA_Channel_TypeDef * com_TX_DMA_CHANNEL;
uint32_t com_DR_BASE;
u16 txbufLength;
}st_uart_channel_cfg;
#define COMM_BUF_SIZE 300
typedef struct
{
u8 *rxBuf;
u8 *txBuf;
u16 rx_index;
u16 rx_len;
u32 rx_timeout;
u32 tx_timeout;
}st_uart_buf_cfg;
struct st_uart_port
{
EventBits_t port_No;
SemaphoreHandle_t xSemaphore;
st_uart_int init;
st_uart_channel_cfg chl;
st_uart_buf_cfg data;
char * string;
};
#define DEFAULT_USART_CFG(baud, check) { baud,USART_WordLength_9b,USART_StopBits_1,\
check, (USART_Mode_Rx | USART_Mode_Tx),\
USART_HardwareFlowControl_None\
}
#define USART_INIT(name) { name##_NO,\
DEFAULT_USART_CFG(name##_BAUD, name##_CHECK),\
name##_CLK,name##_TX_PIN,\
name##_TX_PORT,name##_TX_PORT_CLK,\
name##_RX_PIN,\
name##_RX_PORT,\
name##_RX_PORT_CLK,\
name##_DMA_CLK,\
name##_IRQn,\
name##_DMA_IRQn\
}
#define USART_DMA_config(name) {name##_NO, name##_TX_DMA_CHANNEL, (uint32_t)name##_DR_BASE, name##_TX_BUFFER_SIZE}
#define USART_PORT_PARAMS(name, rxbuf, txbuf) {name##_PORT_NO, NULL, USART_INIT(name),USART_DMA_config(name),{rxbuf,txbuf,0,0,0,0}, name##_STR}
#define USART_RX_INT_HANDLE(name) void name##_RX_IRQHandler(void) \
{ \
if (USART_GetITStatus(name##_NO, USART_IT_RXNE) != RESET) \
{ \
uart_int_rx_frame(&(name##_port)); \
} \
} \
#define USART_TX_INT_HANDLE(name) void name##_TX_IRQHandler(void) \
{ \
if (DMA_GetITStatus(name##_TX_DMA_COMPLETE) != RESET) \
{ \
DMA_ClearITPendingBit(name##_TX_DMA_COMPLETE); \
uart_dma_tx_callback(&(name##_port)); \
} \
if (DMA_GetITStatus(name##_TX_DMA_ERROR) != RESET) \
{ \
DMA_ClearITPendingBit(name##_TX_DMA_ERROR); \
} \
}
#define create_uart_port(name, rxbuf, txbuf) struct st_uart_port name##_port = USART_PORT_PARAMS(name, rxbuf, txbuf);\
USART_TX_INT_HANDLE(name) \
USART_RX_INT_HANDLE(name) \
enum
{
UP_VER_OF_COMMON = 0,
UP_VER_OF_WHSF,
UP_VER_OF_E5E50000,
UP_VER_OF_E5E50001,
UP_VER_OF_FJWGDATA,
UP_VER_OF_standard,
UP_VER_OF_MAX
};
enum
{
PORT_NONE = 0,
PORT_MBUS_MASTER,
PORT_RADIO,
PORT_PLC,
PORT_485,
PORT_MUT,
POET_DEBUG,
PORT_MAX,
};
enum
{
COM_MBUS_MASTER_PORT_NO = (1UL << PORT_MBUS_MASTER),
COM_RADIO_PORT_NO = (1UL << PORT_RADIO),
COM_PLC_PORT_NO = (1UL << PORT_PLC),
COM_485_PORT_NO = (1UL << PORT_485),
COM_MUT_PORT_NO = (1UL << PORT_MUT),
COM_DEBUG_PORT_NO = (1UL << POET_DEBUG),
PORT_AUTO = (COM_MBUS_MASTER_PORT_NO | COM_485_PORT_NO | COM_MUT_PORT_NO)
};
enum
{
PROTCL_AUTO = 0,
PROTCL_E5E50000,
MBUS_METER_START,
MBUS_901F_2400_E,
MBUS_1F90_2400_E,
MBUS_HHCQ_2400_N,
MBUS_YZSJ_1200_E,
MBUS_HZJD_1200_E,
MBUS_METER_MAX,
RS485_METER_START,
RS485_NJSM_1200_N,
RS485_CS485_2400_E,
RS485_METER_MAX,
MUT_METER_START,
//MUT_CQXM_LORA,
MUT_SPI_LORA,
MUT_METER_MAX,
};
/* Baud bps 07 依次表示:
自适应, 1200 2400 4800 9600 19200
38400 57600 */
enum
{
BAUD_auto = 0,
BAUD_1200,
BAUD_2400,
BAUD_4800,
BAUD_9600,
BAUD_19200,
BAUD_38400,
BAUD_57600,
};
/* 0/1
1/2 停止位 */
enum
{
STOP_1bits = 0,
STOP_2bits,
};
/* 0/1
无/有校验 */
enum
{
PARITY_NONE = 0,
PARITY_TRUE,
};
/* 0/1
偶/奇校验 */
enum
{
PARITY_EVEN = 0,
PARITY_ODD,
};
/* 03
5-8 位数 */
enum
{
DATABITS_5 = 0,
DATABITS_6,
DATABITS_7,
DATABITS_8,
};
enum
{
UP_PORT_PLC,
UP_PORT_485,
UP_PORT_MAX,
};
enum
{
MBUS_MODE_MASTER = 0,
MBUS_MODE_SLAVE,
};
/********************define MBUS power contrl pin******************************/
#define MBUS_POWER_CTRL_PIN GPIO_Pin_1
#define MBUS_POWER_CTRL_PIN_PORT GPIOB
#define MBUS_POWER_CTRL_PORT_CLK RCC_APB2Periph_GPIOB
#define open_mbus_switch() GPIO_ResetBits(MBUS_POWER_CTRL_PIN_PORT, MBUS_POWER_CTRL_PIN)
#define close_mbus_switch() GPIO_SetBits(MBUS_POWER_CTRL_PIN_PORT, MBUS_POWER_CTRL_PIN)
#define mbus_switch_state() GPIO_ReadOutputDataBit(MBUS_POWER_CTRL_PIN_PORT, MBUS_POWER_CTRL_PIN)
/********************define MBUS in pin*******************************/
#define MBUS_EXTIN_PIN GPIO_Pin_4
#define MBUS_EXTIN_PORT GPIOC
#define MBUS_EXTIN_CLK RCC_APB2Periph_GPIOC
#define MBUS_in_state() GPIO_ReadInputDataBit(MBUS_EXTIN_PORT, MBUS_EXTIN_PIN)
#define MBUS_EXT_FLAG_PORT_SOURCE GPIO_PortSourceGPIOC
#define MBUS_EXT_FLAG_PIN_SOURCE GPIO_PinSource4
#define MBUS_EXT_FLAG_LINE EXTI_Line4
#define MBUS_EXT_IRQHandler EXTI4_IRQHandler
/********************define MBUS overload *******************************/
#define MBUS_OVERLOAD_PIN GPIO_Pin_12
#define MBUS_OVERLOAD_PORT GPIOB
#define MBUS_OVERLOAD_CLK RCC_APB2Periph_GPIOB
#define MBUS_OVERLOAD_in_state() GPIO_ReadInputDataBit(MBUS_OVERLOAD_PORT, MBUS_OVERLOAD_PIN)
#define MBUS_OVERLOAD_FLAG_PORT_SOURCE GPIO_PortSourceGPIOB
#define MBUS_OVERLOAD_FLAG_PIN_SOURCE GPIO_PinSource12
#define MBUS_OVERLOAD_FLAG_LINE EXTI_Line12
#define MBUS_OVERLOAD_FLAG_IRQHandler EXTI15_10_IRQHandler
/********************define power level pin*******************************/
#define POWER_LEVEL_PIN GPIO_Pin_13
#define POWER_LEVEL_PORT GPIOB
#define POWER_LEVEL_PORT_CLK RCC_APB2Periph_GPIOB
#define SET_POWER_LEVEL_HIGH() GPIO_SetBits(POWER_LEVEL_PORT, POWER_LEVEL_PIN);
#define SET_POWER_LEVEL_LOW() GPIO_ResetBits(POWER_LEVEL_PORT, POWER_LEVEL_PIN);
#define power_level_state() GPIO_ReadOutputDataBit(POWER_LEVEL_PORT, POWER_LEVEL_PIN)
/********************define 485 power contrl pin******************************/
#define RS485_CTRL_PIN GPIO_Pin_5
#define RS485_CTRL_PIN_PORT GPIOC
#define RS485_CTRL_PORT_CLK RCC_APB2Periph_GPIOC
#define open_RS485_switch() GPIO_ResetBits(RS485_CTRL_PIN_PORT, RS485_CTRL_PIN);hal_sRF_ITConfig(RS485_OVERLOAD_FLAG_LINE, ENABLE)
#define close_RS485_switch() GPIO_SetBits(RS485_CTRL_PIN_PORT, RS485_CTRL_PIN); hal_sRF_ITConfig(RS485_OVERLOAD_FLAG_LINE, DISABLE)
#define RS485_switch_state() GPIO_ReadOutputDataBit(RS485_CTRL_PIN_PORT, RS485_CTRL_PIN)
/********************define 485 in pin*******************************/
#define RS485_EXTIN_PIN GPIO_Pin_6
#define RS485_EXTIN_PORT GPIOA
#define RS485_EXTIN_CLK RCC_APB2Periph_GPIOA
#define RS485_in_state() GPIO_ReadOutputDataBit(RS485_EXTIN_PORT, RS485_EXTIN_PIN)
/********************define MBUS overload *******************************/
#define RS485_OVERLOAD_PIN GPIO_Pin_7
#define RS485_OVERLOAD_PORT GPIOA
#define RS485_OVERLOAD_CLK RCC_APB2Periph_GPIOA
#define RS485_OVERLOAD_in_state() GPIO_ReadOutputDataBit(RS485_OVERLOAD_PORT, RS485_OVERLOAD_PIN)
#define RS485_OVERLOAD_FLAG_PORT_SOURCE GPIO_PortSourceGPIOA
#define RS485_OVERLOAD_FLAG_PIN_SOURCE GPIO_PinSource7
#define RS485_OVERLOAD_FLAG_LINE EXTI_Line7
#define RS485_OVERLOAD_IRQn EXTI9_5_IRQn
#define RS485_OVERLOAD_FLAG_IRQHandler EXTI9_5_IRQHandler
/********************define PLC reset pin*******************************/
#define PLC_RESET_PIN GPIO_Pin_0
#define PLC_RESET_PIN_PORT GPIOB
#define PLC_RESET_PIN_CLK RCC_APB2Periph_GPIOB
#define PLC_RESET_HIGH() GPIO_SetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
#define PLC_RESET_LOW() GPIO_ResetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
/********************define overload current pin*******************************/
#define MUT_RESET_PIN GPIO_Pin_14
#define MUT_RESET_PIN_PORT GPIOB
#define MUT_RESET_PIN_CLK RCC_APB2Periph_GPIOB
#define MUT_RESET_HIGH() GPIO_SetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
#define MUT_RESET_LOW() GPIO_ResetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
#define IRDA_TPIN_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_0, GPIO_Mode_IN_FLOATING} //PA0
#define IRDA_RPIN_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_1, GPIO_Mode_IN_FLOATING} //PC1
#define RF_DOWN_TPIN_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_12, GPIO_Mode_IN_FLOATING} //PC12
#define RF_DOWN_RPIN_CFG {GPIOD, RCC_APB2Periph_GPIOD, GPIO_Pin_2, GPIO_Mode_IN_FLOATING} //PD2
#define RS485_UP_TPIN_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_4, GPIO_Mode_IN_FLOATING} //PA4
#define RS485_UP_RPIN_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_5, GPIO_Mode_IN_FLOATING} //PA5
#define PLC_RESET_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_0, GPIO_Mode_IPU} //PB0
#define MBUS_SWITCH_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_1, GPIO_Mode_IN_FLOATING} //PB1
#define MBUS_EXT_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_4, GPIO_Mode_IN_FLOATING} //PC4
#define MBUS_OVERLOAD_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_12, GPIO_Mode_IN_FLOATING} //PB12
#define RS485_CTRL_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_5, GPIO_Mode_IN_FLOATING} //PC5
#define RS485_OVERLOAD_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_7, GPIO_Mode_IN_FLOATING} //PA7
#define RS485_EXT_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_6, GPIO_Mode_IN_FLOATING} //PA6
#define MBUS_POW_LEVEL_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_13, GPIO_Mode_IN_FLOATING} //PB13
extern void add_one_list_node(st_params* params);
extern void COM_frozen_uplinkPacket_create(st_params * ptr, u8* outBuf);
extern void COM_uplinkPacket_create(st_params * ptr, u8* outBuf);
extern u16 create_queue_send_packet(u8 * buf, u16 length);
extern void DLT645_07_addr_ack(u8 *buf);
extern void DLT645_97_1F_addr_ack(u8 *buf);
extern void E5E5_uplinkPacket_create(st_params * ptr, u8* outBuf);
extern u8 get_protocl_inRAM(void);
extern bool get_readMeter_params(u8 *buf, st_params * ptr);
extern bool get_read_meter_packet(u16 meter_protcl, u8 type, u8 *meter_id, u8 *outBuf, u16 *outLen);
extern void hal_InitCOM(struct st_uart_port * port);
extern void hal_UartDMATx(struct st_uart_port* uart_port, u8 *pBuf, u16 length);
//extern void hal_UartIntTx(u8 *pBuf, u16 length);
extern void init_uart_port(struct st_uart_port * port);
extern void init_uart_tasks(void);
extern void led_process_task(void * ptr);
extern void mbus_gpio_init(void);
extern void MBUS_master_process_task(void * ptr);
extern void MBUS_mater_Tx(u8 *pBuf, u16 length);
extern void MBUS_OVERLOAD_FLAG_IRQHandler(void);
extern void MBUS_slave_process_task(void *ptr);
extern void mbus_switch_timeOut_callback_function(TimerHandle_t xTimer);
extern bool meter_ack_packet_process(u16 meter_protl, u8 *inbuf, u8 inLen, st_params * ptr, u8* outBuf);
extern void PLC_process_task(void *ptr);
extern void plc_uart_Tx(u8 *buf, u16 length);
extern void port_send(struct st_uart_port* port, u8 *buf, u16 length);
extern bool read_meter_process(u8 meter_protcl, st_params *read_params, u8 *outbuf);
extern bool read_power_level(void);
extern void read_standard_elcMeter(u8 *buf, u8 length);
extern void saved_meter_process(bool success, struct st_meter_temp_value *saved_ptr, st_params * ptr);
extern void set_curent_protocl(u8 config);
extern void set_mbus_master_params(u32 baud, u16 check);
extern void set_PLC_UART_baud(u32 baud);
extern void set_port_prams(u16 meter_protcl);
extern void set_power_level(bool high);
extern void simulate_mbus_plc_rx(u8 *buf, u8 len);
extern void temp_saved_task(void *ptr);
extern void UART5_IRQHandler(void);
extern void uarts_process_task(void * ptr);
extern void uart_dma_tx_callback(struct st_uart_port* uartPort);
extern void uart_int_rx_frame(struct st_uart_port* uartPort);
extern void uplinkPacket_create(st_params * ptr, u8* outBuf);
extern void uplink_ack_send(u8 uplink, u8 *buf, u16 length);
extern void WHSF_uplinkPacket_create(st_params * ptr, u8* outBuf);
extern void auto_sync_list_meters(void);
extern void RS485_gpio_init(void);
void RS4852_SendDataPacket(u8 *buf, u16 length);
void up_485_Tx(u8 *buf, u16 length);
#endif