Свежее чертово вуду с /dev/ttyS*
Apr. 23rd, 2012 11:15 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Есть несколько прог, работающих с ком-портом:
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.
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.
no subject
Date: 2012-04-23 08:20 am (UTC)no subject
Date: 2012-04-23 08:25 am (UTC)Т.е., я же еще с портом ничего не делаю, я только хочу его открыть и далее уже менять настройки через tcsetattr
Но при этом настройки влияют на возможность открыть порт вообще.
no subject
Date: 2012-04-23 08:29 am (UTC)no subject
Date: 2012-04-23 08:34 am (UTC)no subject
Date: 2012-04-23 08:35 am (UTC)no subject
Date: 2012-04-23 08:43 am (UTC)CLOCAL Ignore modem control lines.
man stty
[-]clocal
disable modem control signals
все :)
no subject
Date: 2012-04-23 08:46 am (UTC)Ясно, объяснение все таки есть.
no subject
Date: 2012-04-23 09:11 am (UTC)возможно, что два раза по паре -- две по юниксу и две по RT-11/VMS.
очень многое терминальное пошло из RT-11 (и в тамошних юзер-гайдах хорошо документированно), но вот где оно документированно в современной документации -- я даже не представляю. например, Control-O.
у меня-то пальцы и спинной мозг помнит, а остальным как?
no subject
Date: 2012-04-23 08:54 am (UTC)У System.Hardware.Serialport унутре колхоз "10 лет без урожая", а какие ещё языки подходят для быстрого прототипирования, я нифкурси.
no subject
Date: 2012-04-23 09:04 am (UTC)но: никаких выдерживаний задержек и нестандартных дерганий линиями - это настолько погибельное решение, что лучше даже не связываться. Надо стараться жыдь в идеологии обычного терминала.
no subject
Date: 2012-04-23 09:13 am (UTC)Настоящие джедаи взяли бы микроконтроллер и сваяли на нём переходник "обычный компортовый терминал <-> синхронный протокол", но для моей недозадачки это будет оверкилл.
no subject
Date: 2012-04-23 09:37 am (UTC)no subject
Date: 2012-04-23 12:17 pm (UTC)Либо административно утрясти перенастройку на что-то более современное на обоих концах канала. Этот вариант решения не проходит, потому что слишком медленно. Масква, блин.
no subject
Date: 2012-04-23 12:23 pm (UTC)no subject
Date: 2012-04-23 10:23 am (UTC)no subject
Date: 2012-04-23 12:10 pm (UTC)Подземные стуки не настолько сильны, чтоб 100 мс такт поломать, ящетаю.
no subject
Date: 2012-04-23 12:11 pm (UTC)no subject
Date: 2012-04-23 12:12 pm (UTC)no subject
Date: 2012-04-23 12:52 pm (UTC)А с NMI,ACPI и аппаратной виртуализацией что делать будете? Вот померещится вашему биосу перегрев, всё заморозится на пару секунд.
ненене. Весь реалтайм - в отдельной железке, без винды и (анти)вирусов. И желательно без прочих прелестей современной х86 инфраструктуры.
no subject
Date: 2012-04-23 02:29 pm (UTC)померещится вашему биосу перегрев
А ещё метеорит упадёт, ага. Положу в холодильник на полчаса. Задача-то одноразовая.
no subject
Date: 2012-04-23 04:47 pm (UTC)Вы про честный 8250/16550, или как там его?
Или про любую хрень, которая видится компортом, включая pl2303?
Вам надо быстрый (быстрее килогерца) битбанг, или вы хотите этот rts/cts дергать синхронно с потоком байтов?
если одноразовая - то можно. Но у меня пролетающая помеха помешала перешить, пришлось еще два раза по нескольку часов ждать. Хотя, если уар не через УПШ, то для одноразовой работы нормально. Но я бы тогда вообще на ЛПТ завязался.
no subject
Date: 2012-04-24 03:21 pm (UTC)100 мс - это быстрее килогерца?
Но я бы тогда вообще на ЛПТ завязался.
Я бы завязался на LPT с самого начала, и сейчас всё бы уже работало готовое, если бы этот LPT был.
no subject
Date: 2012-04-23 02:30 pm (UTC)Я знаю устройство 586+ инфраструктуры, и потому не боюсь её.
no subject
Date: 2012-04-23 04:48 pm (UTC)у х86 практически только один плюс - порог вхождения.
no subject
Date: 2012-04-24 03:23 pm (UTC)no subject
Date: 2012-04-24 03:58 pm (UTC)можно всякие затейливые битбанги делать.
и стоит рупь пучок.
no subject
Date: 2012-04-23 10:32 am (UTC)стандартный RS232 на персоналке не умеет быть синхронным.
там, вообще-то, пропадают старт-стоп биты и появляются клоки на rx и tx.
кстати, парелельный порт найти проще, чем последовательный, если хоть что-то есть.
и джедаи ваяли бы не компорт-синхронный, а usb-синхронный, поскольку rs232 практически извели.
no subject
Date: 2012-04-23 09:08 am (UTC)no subject
Date: 2012-04-23 09:34 am (UTC)no subject
Date: 2012-04-23 09:36 am (UTC)что там разного? posix? select?
no subject
Date: 2012-04-23 09:43 am (UTC)no subject
Date: 2012-04-23 10:39 am (UTC)no subject
Date: 2012-04-23 10:42 am (UTC)no subject
Date: 2012-04-23 11:06 am (UTC)no subject
Date: 2012-04-23 12:12 pm (UTC)SRSLY?? Что курили авторы?
no subject
Date: 2012-04-23 12:21 pm (UTC)no subject
Date: 2012-04-23 12:33 pm (UTC)Мне кажется, это даже от школьников не защитит. Вероятно, начальнег ActiveState очень хотел высказаться на политическую тему, и вот, демонстрация.
no subject
Date: 2012-04-23 12:44 pm (UTC)no subject
Date: 2012-04-23 10:42 am (UTC)Такие вещи надо не в man искать а в info.
no subject
Date: 2012-04-24 08:41 am (UTC)