67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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
 |