Files
433_STM32/Core/Inc/multi_uart_router.h

98 lines
2.3 KiB
C
Raw Permalink Normal View History

/**
******************************************************************************
* @file multi_uart_router.h
* @brief UART统一路由核心模块头文件
* @author Application Layer
* @version 1.0
******************************************************************************
* @attention
* UART端口的统一管理
* -
* -
* -
* -
*
* 3.13.33.5A
******************************************************************************
*/
#ifndef __MULTI_UART_ROUTER_H
#define __MULTI_UART_ROUTER_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdbool.h>
#include "usart.h"
#define UART_RX_BUFFER_SIZE 128
#define UART_TX_BUFFER_SIZE 256
typedef enum {
PORT_UART1 = 0,
PORT_UART2 = 1,
PORT_UART3 = 2,
PORT_COUNT
} port_id_t;
typedef struct {
uint8_t buffer[UART_RX_BUFFER_SIZE];
volatile uint16_t head;
volatile uint16_t tail;
volatile uint16_t count;
volatile uint16_t overflow_count;
} uart_rx_ring_t;
typedef struct {
uint8_t buffer[UART_TX_BUFFER_SIZE];
volatile uint16_t head;
volatile uint16_t tail;
volatile uint16_t count;
volatile bool is_sending;
volatile uint16_t overflow_count;
} uart_tx_ring_t;
typedef struct {
UART_HandleTypeDef *huart;
const char *name;
uart_rx_ring_t rx_ring;
uart_tx_ring_t tx_ring;
uint8_t rx_tmp;
uint32_t rx_count;
uint32_t tx_count;
uint32_t error_count;
bool initialized;
} uart_port_context_t;
void MultiUART_Init(void);
void MultiUART_FeedByte(port_id_t port_id, uint8_t byte);
void MultiUART_Task(void);
void MultiUART_Send(port_id_t port_id, const uint8_t *data, uint16_t len);
void MultiUART_SendString(port_id_t port_id, const char *str);
void MultiUART_SendFmt(port_id_t port_id, const char *fmt, ...);
void MultiUART_TxCpltCallback(port_id_t port_id);
const char *MultiUART_GetPortName(port_id_t port_id);
uint16_t MultiUART_GetRxCount(port_id_t port_id);
uint16_t MultiUART_ReadByte(port_id_t port_id, uint8_t *byte);
uint16_t MultiUART_GetTxAvailable(port_id_t port_id);
uint32_t MultiUART_GetOverflowCount(port_id_t port_id);
#ifdef __cplusplus
}
#endif
#endif