mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-16 11:21:18 +03:00
HW Serial swap and pin setting work only on a few pins, return false on failure.
This commit is contained in:
@ -760,11 +760,11 @@ uart_uninit(uart_t* uart)
|
||||
free(uart);
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
uart_swap(uart_t* uart, int tx_pin)
|
||||
{
|
||||
if(uart == NULL)
|
||||
return;
|
||||
return false;
|
||||
|
||||
switch(uart->uart_nr)
|
||||
{
|
||||
@ -788,6 +788,7 @@ uart_swap(uart_t* uart, int tx_pin)
|
||||
pinMode(uart->rx_pin, FUNCTION_4); //RX
|
||||
|
||||
IOSWAP |= (1 << IOSWAPU0);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -808,6 +809,7 @@ uart_swap(uart_t* uart, int tx_pin)
|
||||
pinMode(3, SPECIAL); //RX
|
||||
|
||||
IOSWAP &= ~(1 << IOSWAPU0);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case UART1:
|
||||
@ -816,13 +818,14 @@ uart_swap(uart_t* uart, int tx_pin)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
uart_set_tx(uart_t* uart, int tx_pin)
|
||||
{
|
||||
if(uart == NULL)
|
||||
return;
|
||||
return false;
|
||||
|
||||
switch(uart->uart_nr)
|
||||
{
|
||||
@ -834,12 +837,14 @@ uart_set_tx(uart_t* uart, int tx_pin)
|
||||
pinMode(uart->tx_pin, INPUT);
|
||||
uart->tx_pin = 2;
|
||||
pinMode(uart->tx_pin, FUNCTION_4);
|
||||
return true;
|
||||
}
|
||||
else if (uart->tx_pin == 2 && tx_pin != 2)
|
||||
{
|
||||
pinMode(uart->tx_pin, INPUT);
|
||||
uart->tx_pin = 1;
|
||||
pinMode(uart->tx_pin, SPECIAL);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -850,33 +855,54 @@ uart_set_tx(uart_t* uart, int tx_pin)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
uart_set_pins(uart_t* uart, int tx, int rx)
|
||||
{
|
||||
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)
|
||||
uart_swap(uart, tx);
|
||||
else
|
||||
uart_set_tx(uart, tx);
|
||||
if (!uart_set_tx(uart, tx))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(uart->rx_enabled && uart->rx_pin != rx && rx == 13 && tx == 15)
|
||||
uart_swap(uart, 15);
|
||||
else
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user