#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <inttypes.h>

#define BAUDRATE B115200
#define UART "/dev/ttyACM0"

int UART_Init()
  {
  int FD;
  struct termios options = {};

  FD = open(UART, O_RDONLY | O_NOCTTY);
  if (FD < 0)
    {
    printf("Fehler beim Oeffnen von %s\n", UART);
    exit(-1);
    }
  memset(&options, 0, sizeof(options));
  options.c_cflag &= ~PARENB;         /* kein Paritybit */
  options.c_cflag &= ~CSTOPB;         /* 1 Stoppbit */
  options.c_cflag &= ~CSIZE;          /* 8 Datenbits */
  options.c_cflag = CS8 | CLOCAL | CREAD;
  options.c_iflag = IGNPAR;
  options.c_oflag = 0;
  options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
  options.c_cc[VTIME] = 10;
  options.c_cc[VMIN] = 1;
  cfsetspeed(&options, BAUDRATE);
  tcflush(FD, TCIFLUSH);
  tcsetattr(FD, TCSAFLUSH, &options);
  return FD;
  }

int main(int argc, char** argv)
  {
  unsigned char Zeichen;
  int FD, Laenge, Anz;
  unsigned char Puffer[4000] = "";

  FD = UART_Init();
  Laenge = 0;

  while (1)
    {
    Anz = read(FD, &Zeichen, 1);
    if (Anz > 0)
      {
      if(Zeichen == '\n')
        {
        Puffer[Laenge] = '\0';
        puts(Puffer);
        Laenge = 0;
        }
      else if(Zeichen != '\r')
        {
        Puffer[Laenge] = Zeichen;
        Laenge++;
        }
      }
    }

  close (FD);
  return 0;
  }
