Kirjoittaja Aihe: [Ratkaistu?!]Mikä olisi /dev/ttyUSB0 loggeri/toistin-ohjelma ?  (Luettu 2073 kertaa)

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Elikkä siis haluaisin aluksi ottaa tty-laitteelta ottaa talteen logia, ja tallentaa sen tiedostoon.

Sen jälkeen haluaisin lähettää tty-laitteelle samaisen login ja samoilla aika-arvoilla.

En oikein keksinyt googlaukseen sopivaa hakusanaa, joten niitäkin voi ehdotella.

Toki tällaisen voisi tehdä itsekin, mutta mieluummin käyttäisin valmista softaa.

Tällaisen löysin googlaamalla, mutta tästä puuttuu login toistaminen comporttiin.
https://elinux.org/Grabserial

Välttämättä ohjelman ei tarvitse lähettää binääri-muodossa.

Elikkä siis se ottaa vastaan com-tietoa aikaleimoilla, muttei käsittääkseni lähetä samaa testidataa comporttiin samoilla viiveillä.
« Viimeksi muokattu: 07.04.22 - klo:12.17 kirjoittanut kamara »

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Mikä olisi /dev/ttyUSB0 loggeri/toistin-ohjelma ?
« Vastaus #1 : 06.04.22 - klo:20.04 »
Koodasin itsellen todennäköisesti riittävän (purkka)ratkaisun.

koodaus.cpp
Koodia: [Valitse]
#include <iostream>
#include <ctime>
#include <iomanip>
#include <chrono>


#include <unistd.h>

inline uint64_t get_timestamp()
{
    std::chrono::time_point<std::chrono::steady_clock> ts = std::chrono::steady_clock::now();
    return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}

int main()
{
    std::string s=std::string("");
    uint64_t delaytime=get_timestamp();
    while (1) {
        //usleep(1000);
        s="";
        getline(std::cin, s);
        if (s!="") {
            std::cout << ( get_timestamp()-delaytime)
              << "\n"<< s << "\n";
        }
        delaytime=get_timestamp();
    }
             
}

dekoodaus.cpp
Koodia: [Valitse]
#include <iostream>
#include <ctime>
#include <iomanip>
#include <chrono>

#include <unistd.h>

inline uint64_t get_timestamp()
{
    std::chrono::time_point<std::chrono::steady_clock> ts = std::chrono::steady_clock::now();
    return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}

int main()
{
    std::string s="";
    uint64_t delaytime; // = atol(&(s[0]));
    while (1) {
        getline(std::cin,s);
        delaytime=atol(&(s[0]));
        if(delaytime==0)
            return 1;
        usleep(delaytime);
        getline(std::cin,s);
        //std::cout << delaytime << "\n";
        std::cout << s << "\n";
        s="";
    }             
}