#include <stdio.h>
#include <sys/types.h>
#include <termios.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

#define SERIAL_DEVICE	"/dev/ttyUSB1"

int main()
{
	struct termios serial_port_settings;
	int fd;
	int retval;
	char *buf = NULL;
	int bufsize = 0;

	fd = open(SERIAL_DEVICE, O_RDWR);
	if (fd < 0) {
		perror("Failed to open SERIAL_DEVICE");
		exit(1);
	}
	
	retval = tcgetattr(fd, &serial_port_settings);
	if (retval < 0) {
		perror("Failed to get termios structure");
		exit(2);
	}

	//setting baud rate to B38400
	retval = cfsetospeed(&serial_port_settings, B38400);
	if (retval < 0) {
		perror("Failed to set 38400 output baud rate");
		exit(3);
	}
	retval = cfsetispeed(&serial_port_settings, B38400);
	if (retval < 0) {
		perror("Failed to set 38400 input baud rate");
		exit(4);
	}
	serial_port_settings.c_lflag |= ICANON; 
	serial_port_settings.c_oflag |= OCRNL;
	serial_port_settings.c_oflag |= OLCUC;
	retval = tcsetattr(fd, TCSANOW, &serial_port_settings);
	if (retval < 0) {
		perror("Failed to set serial attributes");
		exit(5);
	}
	printf("/dev/ttyUSB1:Successfully set the baud rate\n");
loop:	
	printf("/dev/ttyUSB1:Enter size of the buffer:");
	scanf("%d", &bufsize);
	if (bufsize <= 0) {
		printf("Buffer size should be greater > 0\n");
		goto loop;
	}
	buf = malloc(bufsize);
	if (!buf) {
		perror("Failed to allocate buffer\n");
		exit(6);
	}
	memset(buf, 'A', bufsize);
	buf[bufsize-2] = '\n';
	buf[bufsize-1] = '\0';
	retval = write(fd, buf, bufsize);
	if (retval < 0) {
		perror("write on SERIAL_DEVICE failed");
		exit(7);
	}
	tcflush(fd, TCOFLUSH);
	printf("/dev/ttyUSB1: Flushing output buffer\n");
	free(buf);
	close(fd);
	return 0;
}