#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xuartns550.h"
#include "xparameters.h"


XUartNs550_Config *uart_config;
XUartNs550 uart;



void uart_init(){
	uart_config = XUartNs550_LookupConfig(XPAR_AXI_UART16550_0_DEVICE_ID);
	XUartNs550_CfgInitialize(&uart,uart_config,uart_config->BaseAddress );


}

int main()
{
	u32 baudRate = 115200;
	u16 option;

	u8 Tx[] = "Hello World";
	u8 Rx[11];

	uart_init();
	//XUartNs550_SetBaudRate(&uart,baudRate);

	XUartNs550_SetBaud(XPAR_AXI_UART16550_0_BASEADDR, XPAR_AXI_UART16550_0_CLOCK_FREQ_HZ, baudRate);

	option = XUartNs550_GetOptions(&uart);
	XUartNs550_SetOptions(&uart, option | XUN_OPTION_LOOPBACK | XUN_OPTION_FIFOS_ENABLE);


	XUartNs550_Send(&uart,Tx, 11);

	while(XUartNs550_IsSending(&uart));



	int byteRcvd  = 0;
	while(byteRcvd != 11)
	{
		byteRcvd = byteRcvd + XUartNs550_Recv(&uart, &Rx[byteRcvd], 11);
	}


	option = XUartNs550_GetOptions(&uart);

    XUartNs550_SetOptions(&uart, option & ~XUN_OPTION_LOOPBACK);

    for(int i= 0; i < 11; i++) {
    xil_printf("%c",Rx[i]);
    }


    return 0;
}