44
55// Constructors ////////////////////////////////////////////////////////////////
66
7- Uart::Uart (XMC_UART_t *xmc_uart_config){
8- _XMC_UART_config = xmc_uart_config;
9- }
7+ Uart::Uart (XMC_UART_t *xmc_uart_config) { _XMC_UART_config = xmc_uart_config; }
8+
109// Public Methods //////////////////////////////////////////////////////////////
1110
1211void Uart::begin (unsigned long baud) { begin (baud, SERIAL_8N1); }
@@ -68,6 +67,7 @@ void Uart::begin(unsigned long baud, XMC_UART_MODE_t config) {
6867
6968 XMC_GPIO_Init (_XMC_UART_config->rx .port , _XMC_UART_config->rx .pin ,
7069 &(_XMC_UART_config->rx_config ));
70+ serial_ready = true ;
7171}
7272
7373void Uart::end (void ) {
@@ -77,6 +77,7 @@ void Uart::end(void) {
7777 NVIC_DisableIRQ (_XMC_UART_config->irq_num );
7878 // Clear any received data after stopping interrupts
7979 _rx_buffer.clear ();
80+ serial_ready = false ;
8081}
8182
8283void Uart::setInterruptPriority (uint32_t priority) {
@@ -108,6 +109,20 @@ size_t Uart::write(const uint8_t uc_data) {
108109 return 1 ;
109110}
110111
112+ size_t Uart::write (const uint8_t *buffer, size_t size) {
113+ // Check if the length is valid
114+ if ((size == 0 ) || (buffer == nullptr )) {
115+ return 0 ;
116+ }
117+ // For sending, write immediately
118+ for (size_t i = 0 ; i < size; i++) {
119+ XMC_UART_CH_Transmit (_XMC_UART_config->channel , buffer[i]);
120+ }
121+ return size;
122+ }
123+
124+ Uart::operator bool () { return serial_ready; }
125+
111126void Uart::IrqHandler (void ) {
112127 // Receive data Interrupt handler
113128 uint32_t status = XMC_UART_CH_GetStatusFlag (_XMC_UART_config->channel );
0 commit comments