Ran clang-format
This commit is contained in:
96
uart.cpp
96
uart.cpp
@@ -36,11 +36,10 @@ LICENSE:
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/pgmspace.h>
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
|
||||
GNU General Public License for more details.
|
||||
|
||||
|
||||
*************************************************************************/
|
||||
#include "uart.h"
|
||||
#include <avr/interrupt.h>
|
||||
@@ -57,10 +56,8 @@ LICENSE:
|
||||
|
||||
#if (UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK)
|
||||
#error RX buffer size is not a power of 2
|
||||
|
||||
#endif
|
||||
defined(__AVR_AT90S4434__) || defined(__AVR_AT90S8535__) || \
|
||||
defined(__AVR_ATmega103__)
|
||||
#if (UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK)
|
||||
#error TX buffer size is not a power of 2
|
||||
#endif
|
||||
|
||||
@@ -103,9 +100,8 @@ LICENSE:
|
||||
#define UART0_UBRRL UBRRL
|
||||
#define UART0_UBRRH UBRRH
|
||||
#define UART0_BIT_U2X U2X
|
||||
#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega8A__) || \
|
||||
defined(__AVR_ATmega16__) || defined(__AVR_ATmega16A__) || \
|
||||
defined(__AVR_ATmega32__) || defined(__AVR_ATmega32A__) || \
|
||||
#define UART0_BIT_RXCIE RXCIE
|
||||
#define UART0_BIT_RXEN RXEN
|
||||
#define UART0_BIT_TXEN TXEN
|
||||
#define UART0_BIT_UCSZ0 UCSZ0
|
||||
#define UART0_BIT_UCSZ1 UCSZ1
|
||||
@@ -210,11 +206,13 @@ LICENSE:
|
||||
#define UART0_UBRRL UBRRL
|
||||
#define UART0_UBRRH UBRRH
|
||||
#define UART0_BIT_U2X U2X
|
||||
#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega48A__) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega48PA__) || defined(__AVR_ATmega48PB__) || \
|
||||
defined(__AVR_ATmega88__) || defined(__AVR_ATmega88A__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega88PA__) || defined(__AVR_ATmega88PB__) || \
|
||||
defined(__AVR_ATmega168__) || defined(__AVR_ATmega168A__)|| defined(__AVR_ATmega168P__)|| defined(__AVR_ATmega168PA__) || defined(__AVR_ATmega168PB__) || \
|
||||
defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__) || \
|
||||
defined(__AVR_ATmega3250__) || defined(__AVR_ATmega3290__) ||defined(__AVR_ATmega6450__) || defined(__AVR_ATmega6490__)
|
||||
#define UART0_BIT_RXCIE RXCIE
|
||||
#define UART0_BIT_RXEN RXEN
|
||||
#define UART0_BIT_TXEN TXEN
|
||||
#define UART0_BIT_UCSZ0 UCSZ0
|
||||
#define UART0_BIT_UCSZ1 UCSZ1
|
||||
#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega48A__) || defined(__AVR_ATmega48P__) || \
|
||||
defined(__AVR_ATmega48PA__) || defined(__AVR_ATmega48PB__) || defined(__AVR_ATmega88__) || \
|
||||
defined(__AVR_ATmega88A__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega88PA__) || \
|
||||
defined(__AVR_ATmega88PB__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega168A__) || \
|
||||
defined(__AVR_ATmega168P__) || defined(__AVR_ATmega168PA__) || defined(__AVR_ATmega168PB__) || \
|
||||
@@ -248,15 +246,16 @@ LICENSE:
|
||||
#define UART0_UBRRL UBRRL
|
||||
#define UART0_UBRRH UBRRH
|
||||
#define UART0_BIT_U2X U2X
|
||||
#elif defined(__AVR_ATmega329__) || defined(__AVR_ATmega649__) || defined(__AVR_ATmega3290__) || defined(__AVR_ATmega6490__) ||\
|
||||
defined(__AVR_ATmega169A__) || defined(__AVR_ATmega169PA__) || \
|
||||
defined(__AVR_ATmega329A__) || defined(__AVR_ATmega329PA__) || defined(__AVR_ATmega3290A__) || defined(__AVR_ATmega3290PA__) || \
|
||||
defined(__AVR_ATmega649A__) || defined(__AVR_ATmega649P__) || defined(__AVR_ATmega6490A__) || defined(__AVR_ATmega6490P__) || \
|
||||
defined(__AVR_ATmega165__) || defined(__AVR_ATmega325__) || defined(__AVR_ATmega645__) || defined(__AVR_ATmega3250__) || defined(__AVR_ATmega6450__) || \
|
||||
defined(__AVR_ATmega165A__) || defined(__AVR_ATmega165PA__) || \
|
||||
defined(__AVR_ATmega325A__) || defined(__AVR_ATmega325PA__) || defined(__AVR_ATmega3250A__) || defined(__AVR_ATmega3250PA__) ||\
|
||||
defined(__AVR_ATmega645A__) || defined(__AVR_ATmega645PA__) || defined(__AVR_ATmega6450A__) || defined(__AVR_ATmega6450PA__) || \
|
||||
defined(__AVR_ATmega644__)
|
||||
#define UART0_BIT_RXCIE RXCIE
|
||||
#define UART0_BIT_RXEN RXEN
|
||||
#define UART0_BIT_TXEN TXEN
|
||||
#define UART0_BIT_UCSZ0 UCSZ0
|
||||
#define UART0_BIT_UCSZ1 UCSZ1
|
||||
#elif defined(__AVR_ATmega329__) || defined(__AVR_ATmega649__) || defined(__AVR_ATmega3290__) || \
|
||||
defined(__AVR_ATmega6490__) || defined(__AVR_ATmega169A__) || defined(__AVR_ATmega169PA__) || \
|
||||
defined(__AVR_ATmega329A__) || defined(__AVR_ATmega329PA__) || defined(__AVR_ATmega3290A__) || \
|
||||
defined(__AVR_ATmega3290PA__) || defined(__AVR_ATmega649A__) || defined(__AVR_ATmega649P__) || \
|
||||
defined(__AVR_ATmega6490A__) || defined(__AVR_ATmega6490P__) || defined(__AVR_ATmega165__) || \
|
||||
defined(__AVR_ATmega325__) || defined(__AVR_ATmega645__) || defined(__AVR_ATmega3250__) || \
|
||||
defined(__AVR_ATmega6450__) || defined(__AVR_ATmega165A__) || defined(__AVR_ATmega165PA__) || \
|
||||
defined(__AVR_ATmega325A__) || defined(__AVR_ATmega325PA__) || defined(__AVR_ATmega3250A__) || \
|
||||
@@ -274,11 +273,12 @@ LICENSE:
|
||||
#define UART0_UBRRH UBRR0H
|
||||
#define UART0_BIT_U2X U2X0
|
||||
#define UART0_BIT_RXCIE RXCIE0
|
||||
defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || \
|
||||
defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) || \
|
||||
defined(__AVR_ATmega164A__) || defined(__AVR_ATmega164PA__) || defined(__AVR_ATmega324A__) || defined(__AVR_ATmega324PA__) || \
|
||||
defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) ||\
|
||||
defined(__AVR_ATtiny1634__)
|
||||
#define UART0_BIT_RXEN RXEN0
|
||||
#define UART0_BIT_TXEN TXEN0
|
||||
#define UART0_BIT_UCSZ0 UCSZ00
|
||||
#define UART0_BIT_UCSZ1 UCSZ01
|
||||
#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega128A__) || \
|
||||
defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || \
|
||||
defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega164P__) || \
|
||||
defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega164A__) || \
|
||||
defined(__AVR_ATmega164PA__) || defined(__AVR_ATmega324A__) || defined(__AVR_ATmega324PA__) || \
|
||||
@@ -312,9 +312,9 @@ LICENSE:
|
||||
#define UART1_UBRRH UBRR1H
|
||||
#define UART1_BIT_U2X U2X1
|
||||
#define UART1_BIT_RXCIE RXCIE1
|
||||
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
|
||||
defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \
|
||||
defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__)
|
||||
#define UART1_BIT_RXEN RXEN1
|
||||
#define UART1_BIT_TXEN TXEN1
|
||||
#define UART1_BIT_UCSZ0 UCSZ10
|
||||
#define UART1_BIT_UCSZ1 UCSZ11
|
||||
#elif defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || \
|
||||
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB82__) || \
|
||||
@@ -334,8 +334,6 @@ LICENSE:
|
||||
#define UART0_BIT_RXEN RXEN1
|
||||
#define UART0_BIT_TXEN TXEN1
|
||||
#define UART0_BIT_UCSZ0 UCSZ10
|
||||
|
||||
|
||||
#define UART0_BIT_UCSZ1 UCSZ11
|
||||
#else
|
||||
#error "no UART definition for MCU available"
|
||||
@@ -357,8 +355,6 @@ static volatile unsigned char UART1_RxTail;
|
||||
static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART1_TxHead;
|
||||
static volatile unsigned char UART1_TxTail;
|
||||
|
||||
|
||||
static volatile unsigned char UART1_RxHead;
|
||||
static volatile unsigned char UART1_RxTail;
|
||||
static volatile unsigned char UART1_LastRxError;
|
||||
@@ -370,7 +366,6 @@ Purpose: called when the UART has received a character
|
||||
Purpose: called when the UART has received a character
|
||||
**************************************************************************/
|
||||
{
|
||||
|
||||
unsigned char tmphead;
|
||||
unsigned char data;
|
||||
unsigned char usr;
|
||||
@@ -401,7 +396,6 @@ Purpose: called when the UART has received a character
|
||||
/* store new index */
|
||||
UART_RxHead = tmphead;
|
||||
/* store received data in buffer */
|
||||
|
||||
UART_RxBuf[tmphead] = data;
|
||||
}
|
||||
UART_LastRxError |= lastRxError;
|
||||
@@ -410,7 +404,6 @@ Purpose: called when the UART is ready to transmit the next byte
|
||||
ISR(UART0_TRANSMIT_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART Data Register Empty interrupt
|
||||
|
||||
Purpose: called when the UART is ready to transmit the next byte
|
||||
**************************************************************************/
|
||||
{
|
||||
@@ -423,7 +416,6 @@ Purpose: called when the UART is ready to transmit the next byte
|
||||
/* get one byte from buffer and write it to UART */
|
||||
UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */
|
||||
} else {
|
||||
|
||||
/* tx buffer empty, disable UDRE interrupt */
|
||||
UART0_CONTROL &= ~_BV(UART0_UDRIE);
|
||||
}
|
||||
@@ -455,8 +447,7 @@ void uart_init(unsigned int baudrate)
|
||||
#if defined(URSEL) || defined(URSEL0)
|
||||
#ifndef UART0_BIT_URSEL
|
||||
#warning "UART0_BIT_URSEL not defined"
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -480,7 +471,6 @@ void uart_init(unsigned int baudrate)
|
||||
UART0_CONTROLC = (1 << UART0_BIT_URSEL) | (1 << UART0_BIT_UCSZ1) | (1 << UART0_BIT_UCSZ0);
|
||||
#else
|
||||
UART0_CONTROLC = (1 << UART0_BIT_UCSZ1) | (1 << UART0_BIT_UCSZ0);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -493,7 +483,6 @@ unsigned int uart_getc(void)
|
||||
higher byte: last receive error
|
||||
**************************************************************************/
|
||||
unsigned int uart_getc(void)
|
||||
|
||||
{
|
||||
unsigned char tmptail;
|
||||
unsigned char data;
|
||||
@@ -513,7 +502,6 @@ unsigned int uart_getc(void)
|
||||
/* store buffer index */
|
||||
UART_RxTail = tmptail;
|
||||
|
||||
|
||||
UART_LastRxError = 0;
|
||||
return (lastRxError << 8) + data;
|
||||
|
||||
@@ -524,7 +512,6 @@ void uart_putc(unsigned char data)
|
||||
Purpose: write byte to ringbuffer for transmitting via UART
|
||||
Input: byte to be transmitted
|
||||
Returns: none
|
||||
|
||||
**************************************************************************/
|
||||
void uart_putc(unsigned char data)
|
||||
{
|
||||
@@ -539,7 +526,6 @@ void uart_putc(unsigned char data)
|
||||
UART_TxBuf[tmphead] = data;
|
||||
UART_TxHead = tmphead;
|
||||
|
||||
|
||||
/* enable UDRE interrupt */
|
||||
UART0_CONTROL |= _BV(UART0_UDRIE);
|
||||
|
||||
@@ -553,7 +539,6 @@ void uart_puts(const char *s )
|
||||
**************************************************************************/
|
||||
void uart_puts(const char *s)
|
||||
{
|
||||
|
||||
while (*s)
|
||||
uart_putc(*s++);
|
||||
|
||||
@@ -569,7 +554,6 @@ void uart_puts_p(const char *progmem_s )
|
||||
{
|
||||
register char c;
|
||||
|
||||
|
||||
while ((c = pgm_read_byte(progmem_s++)))
|
||||
uart_putc(c);
|
||||
|
||||
@@ -586,7 +570,6 @@ Purpose: called when the UART1 has received a character
|
||||
Purpose: called when the UART1 has received a character
|
||||
**************************************************************************/
|
||||
{
|
||||
|
||||
unsigned char tmphead;
|
||||
unsigned char data;
|
||||
unsigned char usr;
|
||||
@@ -609,7 +592,6 @@ Purpose: called when the UART1 has received a character
|
||||
/* store new index */
|
||||
UART1_RxHead = tmphead;
|
||||
/* store received data in buffer */
|
||||
|
||||
UART1_RxBuf[tmphead] = data;
|
||||
}
|
||||
UART1_LastRxError |= lastRxError;
|
||||
@@ -618,7 +600,6 @@ Purpose: called when the UART1 is ready to transmit the next byte
|
||||
ISR(UART1_TRANSMIT_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART1 Data Register Empty interrupt
|
||||
|
||||
Purpose: called when the UART1 is ready to transmit the next byte
|
||||
**************************************************************************/
|
||||
{
|
||||
@@ -631,7 +612,6 @@ Purpose: called when the UART1 is ready to transmit the next byte
|
||||
/* get one byte from buffer and write it to UART */
|
||||
UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */
|
||||
} else {
|
||||
|
||||
/* tx buffer empty, disable UDRE interrupt */
|
||||
UART1_CONTROL &= ~_BV(UART1_UDRIE);
|
||||
}
|
||||
@@ -663,8 +643,7 @@ void uart1_init(unsigned int baudrate)
|
||||
#if defined(URSEL) || defined(URSEL1)
|
||||
#ifndef UART1_BIT_URSEL
|
||||
#warning "UART1_BIT_URSEL not defined"
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -684,7 +663,6 @@ void uart1_init(unsigned int baudrate)
|
||||
#ifdef UART1_BIT_URSEL
|
||||
UART1_CONTROLC = (1 << UART1_BIT_URSEL) | (1 << UART1_BIT_UCSZ1) | (1 << UART1_BIT_UCSZ0);
|
||||
#else
|
||||
|
||||
UART1_CONTROLC = (1 << UART1_BIT_UCSZ1) | (1 << UART1_BIT_UCSZ0);
|
||||
#endif
|
||||
|
||||
@@ -697,7 +675,6 @@ unsigned int uart1_getc(void)
|
||||
higher byte: last receive error
|
||||
**************************************************************************/
|
||||
unsigned int uart1_getc(void)
|
||||
|
||||
{
|
||||
unsigned char tmptail;
|
||||
unsigned int data;
|
||||
@@ -717,7 +694,6 @@ unsigned int uart1_getc(void)
|
||||
/* store buffer index */
|
||||
UART1_RxTail = tmptail;
|
||||
|
||||
|
||||
UART1_LastRxError = 0;
|
||||
return (lastRxError << 8) + data;
|
||||
|
||||
@@ -728,7 +704,6 @@ void uart1_putc(unsigned char data)
|
||||
Purpose: write byte to ringbuffer for transmitting via UART
|
||||
Input: byte to be transmitted
|
||||
Returns: none
|
||||
|
||||
**************************************************************************/
|
||||
void uart1_putc(unsigned char data)
|
||||
{
|
||||
@@ -743,7 +718,6 @@ void uart1_putc(unsigned char data)
|
||||
UART1_TxBuf[tmphead] = data;
|
||||
UART1_TxHead = tmphead;
|
||||
|
||||
|
||||
/* enable UDRE interrupt */
|
||||
UART1_CONTROL |= _BV(UART1_UDRIE);
|
||||
|
||||
@@ -757,7 +731,6 @@ void uart1_puts(const char *s )
|
||||
**************************************************************************/
|
||||
void uart1_puts(const char *s)
|
||||
{
|
||||
|
||||
while (*s)
|
||||
uart1_putc(*s++);
|
||||
|
||||
@@ -773,5 +746,4 @@ void uart1_puts_p(const char *progmem_s )
|
||||
{
|
||||
register char c;
|
||||
|
||||
|
||||
while ((c = pgm_read_byte(progmem_s++)))
|
||||
|
||||
19
uart.h
19
uart.h
@@ -46,22 +46,18 @@ LICENSE:
|
||||
* @copyright (C) 2015 Peter Fleury, GNU General Public License Version 3
|
||||
*/
|
||||
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 405
|
||||
#error "This library requires AVR-GCC 4.5 or later, update to newer AVR-GCC compiler !"
|
||||
#endif
|
||||
|
||||
|
||||
/**@{*/
|
||||
|
||||
|
||||
/*
|
||||
** constants and macros
|
||||
*/
|
||||
|
||||
|
||||
/** @brief UART Baudrate Expression
|
||||
* @param xtalCpu system clock in Mhz, e.g. 4000000UL for 4Mhz
|
||||
* @param baudRate baudrate in bps, e.g. 1200, 2400, 9600
|
||||
@@ -72,7 +68,8 @@ LICENSE:
|
||||
* @param xtalCpu system clock in Mhz, e.g. 4000000UL for 4Mhz
|
||||
* @param baudRate baudrate in bps, e.g. 1200, 2400, 9600
|
||||
*/
|
||||
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ( ((((xtalCpu) + 4UL * (baudRate)) / (8UL * (baudRate)) -1UL)) | 0x8000)
|
||||
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate, xtalCpu) \
|
||||
(((((xtalCpu) + 4UL * (baudRate)) / (8UL * (baudRate)) - 1UL)) | 0x8000)
|
||||
|
||||
/** @brief Size of the circular receive buffer, must be power of 2
|
||||
*
|
||||
@@ -106,7 +103,6 @@ LICENSE:
|
||||
#define UART_BUFFER_OVERFLOW 0x0200 /**< @brief receive ringbuffer overflow */
|
||||
#define UART_NO_DATA 0x0100 /**< @brief no receive data available */
|
||||
|
||||
|
||||
/*
|
||||
** function prototypes
|
||||
*/
|
||||
@@ -118,7 +114,6 @@ LICENSE:
|
||||
*/
|
||||
extern void uart_init(unsigned int baudrate);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get received byte from ringbuffer
|
||||
*
|
||||
@@ -145,7 +140,6 @@ extern void uart_init(unsigned int baudrate);
|
||||
*/
|
||||
extern unsigned int uart_getc(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put byte to ringbuffer for transmitting via UART
|
||||
* @param data byte to be transmitted
|
||||
@@ -153,7 +147,6 @@ extern unsigned int uart_getc(void);
|
||||
*/
|
||||
extern void uart_putc(unsigned char data);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put string to ringbuffer for transmitting via UART
|
||||
*
|
||||
@@ -166,7 +159,6 @@ extern void uart_putc(unsigned char data);
|
||||
*/
|
||||
extern void uart_puts(const char *s);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put string from program memory to ringbuffer for transmitting via UART.
|
||||
*
|
||||
@@ -185,8 +177,6 @@ extern void uart_puts_p(const char *s );
|
||||
*/
|
||||
#define uart_puts_P(__s) uart_puts_p(PSTR(__s))
|
||||
|
||||
|
||||
|
||||
/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */
|
||||
extern void uart1_init(unsigned int baudrate);
|
||||
/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */
|
||||
@@ -195,13 +185,12 @@ extern unsigned int uart1_getc(void);
|
||||
extern void uart1_putc(unsigned char data);
|
||||
/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */
|
||||
extern void uart1_puts(const char *s);
|
||||
/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */
|
||||
/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega)
|
||||
* @see uart_puts_p */
|
||||
extern void uart1_puts_p(const char *s);
|
||||
/** @brief Macro to automatically put a string constant into program memory */
|
||||
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
|
||||
|
||||
/**@}*/
|
||||
|
||||
|
||||
#endif // UART_H
|
||||
|
||||
|
||||
Reference in New Issue
Block a user