This repository has been archived on 2024-01-25. You can view files and clone it, but cannot push or open issues or pull requests.
2023-09-19 15:59:49 +02:00

67 lines
1.7 KiB
C++

#ifndef HAL_UART_H
#define HAL_UART_H
#include "config/uart-config.h"
#include "cassert"
#ifndef UART_TX_DMA_BUFFER_SIZE
#define UART_TX_DMA_BUFFER_SIZE 128
#endif
/**
* @brief Provides general access to the microcontrollers UART peripheral.
*/
class Uart
{
friend class Factory;
public:
Uart(const unsigned char uartNbr, UART_HandleTypeDef * uartHandle, bool bTxDMA = false);
virtual ~Uart();
bool initialize();
bool enable();
bool disable();
void write(const char * str, unsigned int length = 0);
/**
* Static accessor to the instances of UART. Used by the factory.
* You should not use this method directly. Use the factory to
* access an UART instead.
*/
static inline Uart & uart(const unsigned char uartNbr)
{
assert(uartNbr < UART_COUNT);
return *_sUart[uartNbr];
}
/**
* Checks if UART is present and initialized
*/
static inline bool present(const unsigned char uartNbr)
{
return (uartNbr < UART_COUNT &&
_sInitialized[uartNbr]) ? true : false;
}
protected:
void writeUsingDMA(const uint8_t * str, uint32_t length);
protected:
static const unsigned char UART_COUNT = 3; ///< Constant indicating how many USART the MCU has
unsigned char _uartNbr; ///< Number of UART. Index starting at 0
UART_HandleTypeDef * _pUartHandle; ///< Reference to the USART structure
static Uart * _sUart[UART_COUNT]; ///< Array to check if USB device was created already
static bool _sInitialized[UART_COUNT]; ///< Indicates if the UART has been initialized
const bool _bTxDMA; ///< Use DMA for transmission
uint8_t _pTxDmaBuffer[UART_TX_DMA_BUFFER_SIZE]; ///< Buffer used by DMA for transmission
};
#endif // HAL_UART_H