[Megoldva] Hogyan lehet karakter device-ról olvasni?

Fórumok

Ne nevessetek ki, de elbizonytalanodtam. Ugye home office, nálam van a hardware, amelyikkel USB fölötti virtuális soros porton lehet kommunikálni, tehát CDC class. Elküldöm a parancsot, a hardware végre is hajtja, mindenféle LED-eken ezt látom, tehát odafelé megy a kommunikáció. Valami olyasmi, hogy

echo -en 'itt egy bináris stream' >/dev/ttyACM0

Viszont a szerkezet küld egy választ is, amihez nem tudok hozzájutni. Ezzel próbálkoztam:

od -An -tx1 </dev/ttyACM0

Gyanítom, az a probléma, hogy a kernel bufferel, nekem meg alig néhány byte-os válaszom van. Hogyan juthatok hozzá a válaszhoz? Lényegében olyasmi hiányzik - bár az kimenetnél van -, mint amit az awk fflush() csinál. De ez csak megérzés, mert nem tudom, hol akad el az adat. A dialout csoportnak van rw joga a ttyACM0-ra, s benne vagyok a dialout csoportban.

Megoldás

echo -ne 'itt van egy parancs' | socat - file:/dev/ttyACM0,nonblock,raw,echo=0,b115200 | od -An -tx1

Hozzászólások

Most egy moserial nevű terminállal próbálkozom. Vicces, mert ezen a küldött parancs nem hajtódik végre, jön valami error a válaszban. Ugyanakkor shellből egy sima echo-val küldött parancsot végrehajtja, csak a válaszhoz nem jutok hozzá. Azért nem akartam terminált, mert scriptet írnék rá. Illetve jó lenne C-ben is, csak picit macerásabb.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Én ilyen parancsot használok valahol, ezt lehet figurázni:

$ socat - file:/dev/tts/1,nonblock,raw,echo=0,b9600

Ugyan a Háború és béke rövidebb, mint a man socat, ennek ellenére abból, amit írtál, bele tudtam pipe-olni, amit akartam, a választ is visszaadta, így meg már vidáman scriptelhetem ezt.

Köszönöm szépen! :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

elvileg a screen parancs is tud serialba irni/olvasni. 

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Ha van rá mód, akkor expect , de a ppp chat programja is megfelelő lehet erre.

Végül awk-ban írtam meg. Egyedül annyi kinézés van a shell-re, hogy összeállítom a parancssort egy stringben, aztán ezt végrehajtatom awk-ból, aki visszahívja a shellt, az outputot meg getline-ba pipe-olom. A feldolgozás mehet tovább awk-ban.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE