4
4
5
5
// Constructors ////////////////////////////////////////////////////////////////
6
6
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
+
10
9
// Public Methods //////////////////////////////////////////////////////////////
11
10
12
11
void Uart::begin (unsigned long baud) { begin (baud, SERIAL_8N1); }
@@ -68,6 +67,7 @@ void Uart::begin(unsigned long baud, XMC_UART_MODE_t config) {
68
67
69
68
XMC_GPIO_Init (_XMC_UART_config->rx .port , _XMC_UART_config->rx .pin ,
70
69
&(_XMC_UART_config->rx_config ));
70
+ serial_ready = true ;
71
71
}
72
72
73
73
void Uart::end (void ) {
@@ -77,6 +77,7 @@ void Uart::end(void) {
77
77
NVIC_DisableIRQ (_XMC_UART_config->irq_num );
78
78
// Clear any received data after stopping interrupts
79
79
_rx_buffer.clear ();
80
+ serial_ready = false ;
80
81
}
81
82
82
83
void Uart::setInterruptPriority (uint32_t priority) {
@@ -108,6 +109,20 @@ size_t Uart::write(const uint8_t uc_data) {
108
109
return 1 ;
109
110
}
110
111
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
+
111
126
void Uart::IrqHandler (void ) {
112
127
// Receive data Interrupt handler
113
128
uint32_t status = XMC_UART_CH_GetStatusFlag (_XMC_UART_config->channel );
0 commit comments