mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
HW Serial swap and pin setting work only on a few pins, return false on failure.
This commit is contained in:
parent
eedb009c6d
commit
2cf76ba784
@ -101,31 +101,31 @@ public:
|
|||||||
return uart_get_rx_buffer_size(_uart);
|
return uart_get_rx_buffer_size(_uart);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap()
|
bool swap()
|
||||||
{
|
{
|
||||||
swap(1);
|
return swap(1);
|
||||||
}
|
}
|
||||||
void swap(uint8_t tx_pin) //toggle between use of GPIO13/GPIO15 or GPIO3/GPIO(1/2) as RX and TX
|
bool swap(uint8_t tx_pin) //toggle between use of GPIO13/GPIO15 or GPIO3/GPIO(1/2) as RX and TX
|
||||||
{
|
{
|
||||||
uart_swap(_uart, tx_pin);
|
return uart_swap(_uart, tx_pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Toggle between use of GPIO1 and GPIO2 as TX on UART 0.
|
* Toggle between use of GPIO1 and GPIO2 as TX on UART 0.
|
||||||
* Note: UART 1 can't be used if GPIO2 is used with UART 0!
|
* Note: UART 1 can't be used if GPIO2 is used with UART 0!
|
||||||
*/
|
*/
|
||||||
void set_tx(uint8_t tx_pin)
|
bool set_tx(uint8_t tx_pin)
|
||||||
{
|
{
|
||||||
uart_set_tx(_uart, tx_pin);
|
return uart_set_tx(_uart, tx_pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART 0 possible options are (1, 3), (2, 3) or (15, 13)
|
* UART 0 possible options are (1, 3), (2, 3) or (15, 13)
|
||||||
* UART 1 allows only TX on 2 if UART 0 is not (2, 3)
|
* UART 1 allows only TX on 2 if UART 0 is not (2, 3)
|
||||||
*/
|
*/
|
||||||
void pins(uint8_t tx, uint8_t rx)
|
bool pins(uint8_t tx, uint8_t rx)
|
||||||
{
|
{
|
||||||
uart_set_pins(_uart, tx, rx);
|
return uart_set_pins(_uart, tx, rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
int available(void) override;
|
int available(void) override;
|
||||||
|
@ -760,11 +760,11 @@ uart_uninit(uart_t* uart)
|
|||||||
free(uart);
|
free(uart);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
uart_swap(uart_t* uart, int tx_pin)
|
uart_swap(uart_t* uart, int tx_pin)
|
||||||
{
|
{
|
||||||
if(uart == NULL)
|
if(uart == NULL)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
switch(uart->uart_nr)
|
switch(uart->uart_nr)
|
||||||
{
|
{
|
||||||
@ -788,6 +788,7 @@ uart_swap(uart_t* uart, int tx_pin)
|
|||||||
pinMode(uart->rx_pin, FUNCTION_4); //RX
|
pinMode(uart->rx_pin, FUNCTION_4); //RX
|
||||||
|
|
||||||
IOSWAP |= (1 << IOSWAPU0);
|
IOSWAP |= (1 << IOSWAPU0);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -808,6 +809,7 @@ uart_swap(uart_t* uart, int tx_pin)
|
|||||||
pinMode(3, SPECIAL); //RX
|
pinMode(3, SPECIAL); //RX
|
||||||
|
|
||||||
IOSWAP &= ~(1 << IOSWAPU0);
|
IOSWAP &= ~(1 << IOSWAPU0);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UART1:
|
case UART1:
|
||||||
@ -816,13 +818,14 @@ uart_swap(uart_t* uart, int tx_pin)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
uart_set_tx(uart_t* uart, int tx_pin)
|
uart_set_tx(uart_t* uart, int tx_pin)
|
||||||
{
|
{
|
||||||
if(uart == NULL)
|
if(uart == NULL)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
switch(uart->uart_nr)
|
switch(uart->uart_nr)
|
||||||
{
|
{
|
||||||
@ -834,12 +837,14 @@ uart_set_tx(uart_t* uart, int tx_pin)
|
|||||||
pinMode(uart->tx_pin, INPUT);
|
pinMode(uart->tx_pin, INPUT);
|
||||||
uart->tx_pin = 2;
|
uart->tx_pin = 2;
|
||||||
pinMode(uart->tx_pin, FUNCTION_4);
|
pinMode(uart->tx_pin, FUNCTION_4);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else if (uart->tx_pin == 2 && tx_pin != 2)
|
else if (uart->tx_pin == 2 && tx_pin != 2)
|
||||||
{
|
{
|
||||||
pinMode(uart->tx_pin, INPUT);
|
pinMode(uart->tx_pin, INPUT);
|
||||||
uart->tx_pin = 1;
|
uart->tx_pin = 1;
|
||||||
pinMode(uart->tx_pin, SPECIAL);
|
pinMode(uart->tx_pin, SPECIAL);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,33 +855,54 @@ uart_set_tx(uart_t* uart, int tx_pin)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
uart_set_pins(uart_t* uart, int tx, int rx)
|
uart_set_pins(uart_t* uart, int tx, int rx)
|
||||||
{
|
{
|
||||||
if(uart == NULL)
|
if(uart == NULL)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
if(uart->uart_nr == UART0) // Only UART0 allows pin changes
|
if(uart->uart_nr != UART0) // Only UART0 allows pin changes
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(uart->tx_enabled && uart->tx_pin != tx)
|
||||||
{
|
{
|
||||||
if(uart->tx_enabled && uart->tx_pin != tx)
|
if( rx == 13 && tx == 15)
|
||||||
{
|
{
|
||||||
if( rx == 13 && tx == 15)
|
if (!uart_swap(uart, 15))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (rx == 3 && (tx == 1 || tx == 2))
|
||||||
|
{
|
||||||
|
if (uart->rx_pin != rx)
|
||||||
{
|
{
|
||||||
uart_swap(uart, 15);
|
if (!uart_swap(uart, tx))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else if (rx == 3 && (tx == 1 || tx == 2))
|
else
|
||||||
{
|
{
|
||||||
if (uart->rx_pin != rx)
|
if (!uart_set_tx(uart, tx))
|
||||||
uart_swap(uart, tx);
|
return false;
|
||||||
else
|
|
||||||
uart_set_tx(uart, tx);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(uart->rx_enabled && uart->rx_pin != rx && rx == 13 && tx == 15)
|
else
|
||||||
uart_swap(uart, 15);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (uart->rx_enabled && uart->rx_pin != rx)
|
||||||
|
{
|
||||||
|
if (rx == 13 && tx == 15)
|
||||||
|
{
|
||||||
|
if (!uart_swap(uart, 15))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -116,9 +116,9 @@ typedef struct uart_ uart_t;
|
|||||||
uart_t* uart_init(int uart_nr, int baudrate, int config, int mode, int tx_pin, size_t rx_size, bool invert);
|
uart_t* uart_init(int uart_nr, int baudrate, int config, int mode, int tx_pin, size_t rx_size, bool invert);
|
||||||
void uart_uninit(uart_t* uart);
|
void uart_uninit(uart_t* uart);
|
||||||
|
|
||||||
void uart_swap(uart_t* uart, int tx_pin);
|
bool uart_swap(uart_t* uart, int tx_pin);
|
||||||
void uart_set_tx(uart_t* uart, int tx_pin);
|
bool uart_set_tx(uart_t* uart, int tx_pin);
|
||||||
void uart_set_pins(uart_t* uart, int tx, int rx);
|
bool uart_set_pins(uart_t* uart, int tx, int rx);
|
||||||
bool uart_tx_enabled(uart_t* uart);
|
bool uart_tx_enabled(uart_t* uart);
|
||||||
bool uart_rx_enabled(uart_t* uart);
|
bool uart_rx_enabled(uart_t* uart);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user