metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-04-23 11:15 am

Свежее чертово вуду с /dev/ttyS*

Есть несколько прог, работающих с ком-портом:
minicom - полноценный терминал, понимает модемы, куча настроек и прочая.
microcom - тупой минимизированный терминал.
stty - родная прога для управления параметрами терминала
cat /dev/ttyS0 и echo -e "CHERVIE\r" >/dev/ttyS0
и моя софтина для управления железом.

И имеется такой симптом: иногда после запуска minicom порт превращается в такую тыкву, что open("/dev/ttyS0", O_RDWR) виснет. Соответственно, microcom, cat и моя прога виснут. minicom и stty - нет.
Если поменять настройки порта с помощью stty - начинают работать опять:
stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 -echo -parenb cs8 -crtscts -ixon -ixoff clocal cread icanon icrnl ignpar
Похоже, что основная проблема в настройке clocal - если этот флаг установлен, все работает, иначе открытие виснет.
Заглянул в исходники minicom - делают чертовейшее вуду. Открывают порт с O_NDELAY, затем сбрасывают этот флаг. И далее, получив рабочий дескриптор файла - меняют его настройки.

PS: И вот как бы это следующее найти в мане, а не в гугле:
The O_NDELAY flag tells UNIX that this program doesn't care what state the DCD signal line is in - whether the other end of the port is up and running. If you do not specify this flag, your process will be put to sleep until the DCD signal line is the space voltage.

[identity profile] skif-by.livejournal.com 2012-04-23 09:34 am (UTC)(link)
Кроссплатформенно весьма условно - под linux & windows разные модули, причём под win его без бубна и пол-литры собрать сложно. Я лично использую python + pyserial, полёт нормальный.

[identity profile] http://users.livejournal.com/_slw/ 2012-04-23 09:36 am (UTC)(link)
зачем собирать, если есть активперл?
что там разного? posix? select?

[identity profile] skif-by.livejournal.com 2012-04-23 09:43 am (UTC)(link)
Хм. А вот сейчас поставил - завелось. Пару-тройку лет назад оно упорно не взлетало именно на этапе установки модуля. Хотя м.б. ручки кривые.

[identity profile] black-angel-by.livejournal.com 2012-04-23 10:39 am (UTC)(link)
Скачал активперл и нарушил закон, ограничивающий экспорт активперла и активпитона в нашу стану ?

[identity profile] skif-by.livejournal.com 2012-04-23 10:42 am (UTC)(link)
Не, активперл я скачал ещё раньше, сегодня только модуль поставил :) Кстати, запрет по IP у них забавный - помнится, пол-года назад bas-net рубило, а byfly пропускало.

[identity profile] eternal-leave.livejournal.com 2012-04-23 11:06 am (UTC)(link)
Это активстейт нарушил, а не ты.

[identity profile] nealar.livejournal.com 2012-04-23 12:12 pm (UTC)(link)
закон, ограничивающий экспорт активперла и активпитона
SRSLY?? Что курили авторы?

[identity profile] metaclass.livejournal.com 2012-04-23 12:21 pm (UTC)(link)
РБ забанена по IP у них, серьезно :)

[identity profile] nealar.livejournal.com 2012-04-23 12:33 pm (UTC)(link)
забанена по IP
Мне кажется, это даже от школьников не защитит. Вероятно, начальнег ActiveState очень хотел высказаться на политическую тему, и вот, демонстрация.

[identity profile] metaclass.livejournal.com 2012-04-23 12:44 pm (UTC)(link)
Так главное продемонстрировать, а обход перекладывает ответственность на обходящих.