#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <cstring>

int main() {
    const char* device = "/dev/ttyUSB0";

    // UART nur zum Schreiben öffnen
    int fd = open(device, O_WRONLY | O_NOCTTY);
    if (fd < 0) {
        std::cerr << "Fehler beim Öffnen von " << device << ": "
                  << strerror(errno) << "\n";
        return 1;
    }

    // Terminal-Attribute holen
    termios tty{};
    if (tcgetattr(fd, &tty) != 0) {
        std::cerr << "tcgetattr fehlgeschlagen: " << strerror(errno) << "\n";
        close(fd);
        return 1;
    }

    // Terminal konfigurieren (RAW-Modus)
    cfmakeraw(&tty);

    // Baudrate setzen (115200 Beispiel)
    cfsetospeed(&tty, B115200);
    cfsetispeed(&tty, B115200);

    // Einstellungen übernehmen
    if (tcsetattr(fd, TCSANOW, &tty) != 0) {
        std::cerr << "tcsetattr fehlgeschlagen: " << strerror(errno) << "\n";
        close(fd);
        return 1;
    }

    std::cout << "UART geöffnet. Sende Daten...\n";

    // Beispiel: alle 2 Sekunden einen Befehl senden
    while (true) {
        const char* cmd = "STATUS?\r\n";
        ssize_t written = write(fd, cmd, strlen(cmd));

        if (written < 0) {
            std::cerr << "Fehler beim Schreiben: " << strerror(errno) << "\n";
        } else {
            std::cout << "Gesendet: " << cmd;
        }

        usleep(2'000'000); // 2 Sekunden warten
    }

    close(fd);
    return 0;
}
