#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/uart.h"

#define UART0_ID uart0
#define UART1_ID uart1
#define UART0_TX_PIN 0
#define UART0_RX_PIN 1
#define UART1_TX_PIN 4
#define UART1_RX_PIN 5

void clear_uart_buffer(uart_inst_t *uart) {
    while (uart_is_readable(uart)) {
        uart_getc(uart);  // Descarta qualquer caractere residual
    }
}

int main() {
    stdio_init_all();

    // Inicializa UART0
    uart_init(UART0_ID, 115200);
    gpio_set_function(UART0_TX_PIN, GPIO_FUNC_UART);
    gpio_set_function(UART0_RX_PIN, GPIO_FUNC_UART);
    
    // Inicializa UART1
    uart_init(UART1_ID, 115200);
    gpio_set_function(UART1_TX_PIN, GPIO_FUNC_UART);
    gpio_set_function(UART1_RX_PIN, GPIO_FUNC_UART);

    // Garante que o stdin não bufferize entrada
    setbuf(stdin, NULL);

    while (1) {
        printf("Digite um caractere: ");

        // Limpa qualquer entrada residual antes de pedir novo caractere
        clear_uart_buffer(UART0_ID);

        // Aguarda e lê um caractere da UART (substituindo scanf())
        char input_char = uart_getc(UART0_ID);

        // Exibe o caractere digitado
        printf("\nVocê digitou: %c", input_char);

        // Envia caractere de UART0 para UART1
        uart_putc(UART0_ID, input_char);

        // Aguarda até que um caractere seja recebido pela UART1
        while (!uart_is_readable(UART1_ID));
        char received_char = uart_getc(UART1_ID);

        // Exibe o caractere recebido
        printf("\nCaractere recebido: %c\n", received_char);
    }
}