[megoldva]Soros kommunikáció - stty beállítások

Fórumok

Egy roppant egyszerű relé panelt kellene vezérelnem, soros porton, binárisan. Ha "minicom" -mal állítom be a portot, akkor működik (19200 Baud, 8 bit, nincs paritás és egy stop bit). Ha az stty -t használom akkor, valamiért lenyeli az utolsó karaktert (egy wines gépen, binterm programocskával nézem a kimenetet):


$stty -F /ev/ttyS1 19200 cs8 -parenb -cstopb
# a küldés így néz ki
$echo -en "\x01\x02\x03\x04" > /dev/ttyS1
# ezt kapom: x01 x02 x03
# ha "megnyújtom"
$echo -en "\x01\x02\x03\x04\xFF" > /dev/ttyS1
# ezt kapom: x01 x02 x03 x04

Mit kellene még beállítani?

Hozzászólások

A Wines terminal emulatorban a sorvegjelet Unixosra, vagy a Linuxon Winesre.
DOS-on a sorvegjel \x0D\x0A, a Unixos csak \x0A. Elkepzelheto, hogy ha rosszul van beallitva, a fogado levagja a \x0A elottit akkor is, ha az nem \x0D.

--
The programmers of tomorrow are the wizards of the future. You know, you're going to look like you have magic powers compared to everybody else. -Gabe Newell

Ez egyre érdekesebb!
Először a "házi szerveremen" próbálkoztam. Ott egy a "Brainboxes" által forgalmazott BB16PCI958 chip csinál 4 soros portot, ami (valahol találtam a neten) 16750 -es UART -nak van fel állítva (setserial -g) - jelenleg egy portja van használatban - FAX modem - jól működik :) Az lspci kimenete "Multiport serial controller: Brain Boxes Device 0d21 (rev 01)".

Most "átnyergeltem" a munkaállomásomon feltelepített 2 portos cuccra, ami 166550A UART -nak van felkonfigurálva (setserial -g) - lspci kimenete "Serial Controller: Timedia Technology Co Ltd PCI25550 (Dual 16550 UART) (rev 01).
Ez nem csinálja ezt a hibát, ugyanezekkel a beállításokkal.

Ahova készül az - lspci: "Serial controller: NetMos Technology PCI 9835 Multi-I/O Controller (rev 01)" és UART 16550A -nak van felhúzva.

Úgy tűnik, nem a port beállításokkal van a gond, hanem a driverrel?

* Én egy indián vagyok. Minden indián hazudik.

Még valami. Nem tudtok valami netcat jellegű programról, a soros port számára?
(ad/vesz és paraméterez)

* Én egy indián vagyok. Minden indián hazudik.

Egyszer csak megjavult :( Azaz most már kimegy mind a négy bájt - mondjuk többször kiadtam az stty parancsot.
$stty -F /dev/ttyS1 19200 cs8 -parenb -cstopb raw
Így most nem igazán tudom, mitől is javult meg?
Viszont a vétel nem áll össze :(
$od -x < /dev/ttyS1
A BinTerm egy olyan kis progi amivel egy másik gép két soros portját használva, megnézheted mind az adás mind a vételi oldalt. Az "od -x" köszönő viszonyban sincs a válaszokkal - szintén 4 bájt - helyette 8x2 bájt hexa (pl. 01f7 ami valójában FD 01 01 FD).
Mi van?

* Én egy indián vagyok. Minden indián hazudik.

Született egy megoldás. Arra lettem figyelmes, ha a minicom -mal nézek rá a cuccra akkor jó! Ha az én inicializációmat használom, akkor csúszik szét - szóval én állítok valamit rosszul.
Mivel a minicom jól állítja be, ha utána Quit -ek (és nem resetelek, akkor működik a dolog - ezt az állapotot rögzítem az "stty -g -F /dev/ttySx" parancsal, majd ezt visszatáplálom:


SETUP_DEV=1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
/bin/stty $SETUP_DEV -F $CTRL_DEV 

És így már konzekvensen szépen kiadja a négy bájtomat:
bin/echo -en "\x01\x01\x00\x00" > $CTRL_DEV
Persze, az ssty -a kapcsolójával "human readable" formátumot kapok, de nincs most kedvem ezt dekódolni.

* Én egy indián vagyok. Minden indián hazudik.

Ez azért valójában nincs megoldva ám...:-)

A workaround az nem megoldás csak megkerülés!