Получение модемных бит RTS/CTS, DTR/DSR по прерванию

Модератор: Модераторы разделов

vds
Сообщения: 3
ОС: Mandrake 7, Red Hat 9

Получение модемных бит RTS/CTS, DTR/DSR по прерванию

Сообщение vds »

Начну с того, что пишу на С++ прогу работы с одной железкой, обмен осуществляется с использованием сигналов RTS/CTS, DTR/DSR. Как известно ioctl() позволяет извлечь состояния этих сигналов, но только по опросу. Мне необходимо как можно скорее получеть состояния этих сигналов после их изменения. В книге Михаила Гука Аппаратные ср-ва ПК говорится о изменении состяния региста MSR UARTа - регистр состояния модема.
Назначение бит регистра MSR: :unsure:
Бит 7 - DCD (Data Carrier Detect) - состояние линии DCD.
Бит 6 - Rl(Ring Indicator) - состояние линии Rl.
Бит 5 - DSR(Data Set Ready) - состояние линии DSR.
Бит 4 - CTS(Clear To Send) - состояние линии CTS.
[b] Бит 3 - DDCD(Delta Data Carrier Detect) - изменение состояния DCD.
Бит 2 - TERI(Trailing Edge OfRing Indicator) -спад огибающей Rl (окончание звонка).
Бит 1 - DDSR (Delta Data Set Ready) - изменение состояния DSR.
Бит 0 - DCTS (Delta Clear To Send) - изменение состояния CTS.
Меня в данном случае интересуют биты 0,1,3. Нет ли в системных вызовах функций позволяющих получить сигнал(в смысле SIGALRM или SIGUSR) при изменении состояния этих трех бит регистра.
java script:emoticon(':unsure:', 'smid_14')
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Получение модемных бит RTS/CTS, DTR/DSR по прерванию

Сообщение d_Sun »

Linux Device Drivers -> 10 глава
Моя подпись сильно длинная :)
Спасибо сказали:
vds
Сообщения: 3
ОС: Mandrake 7, Red Hat 9

Re: Получение модемных бит RTS/CTS, DTR/DSR по прерванию

Сообщение vds »

d_Sun писал(а):
31.08.2006 12:54
Linux Device Drivers -> 10 глава

В том то вся и фишка, что я не хочу писать новый драйвер,а воспользоваться стандартным.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Получение модемных бит RTS/CTS, DTR/DSR по прерванию

Сообщение d_Sun »

Я бы сделал так: написал бы модуль ядра где повесил бы оработчик на необходимое прерывание, а пользовательский процесс уведомлял о событии сигналом, например SIGUSR1... Я правда не знаю на сколько это решение кривое :D Но вот прийдет flook или elide поправят, если что не так :)
Моя подпись сильно длинная :)
Спасибо сказали:
Kirill Frolov
Сообщения: 6
ОС: Debian

Re: Получение модемных бит RTS/CTS, DTR/DSR по прерванию

Сообщение Kirill Frolov »

vds писал(а):
31.08.2006 08:58
Начну с того, что пишу на С++ прогу работы с одной железкой, обмен осуществляется с использованием сигналов RTS/CTS, DTR/DSR.


Ну и сам себе буратино. Изобретение нестандартных интерфейсов и протоколов
рано или поздно карается геморроем немерянных размеров. Объяснять почему -- сил
и времени уже нет, надоело, каждый раз одно и то же.

Как известно ioctl() позволяет извлечь состояния этих сигналов, но только по опросу. Мне необходимо как можно скорее получеть состояния этих сигналов после их изменения.
В книге Михаила Гука Аппаратные ср-ва ПК говорится о изменении состяния региста


Бугага. Номер раз. В книге гука может говориться что угодно. А практически
имеют значения интерфейсов ОС, а не конкретная аппаратная реализация
(в мультипортовой плате, или USB-COM конвертере -- /не сомневайся/ --
она совсем более другая и такие вольности так просто не позволит).

MSR UARTа - регистр состояния модема.


Выкрасить и выбросить. Он на*** не нужен. Ибо -- см. выше. И регистра такого
не будет в следующий раз.

Последовательный канал только обеспечивает передачу *ПОТОКА* символов
в установленном формате, а также ряд "внеполосных" сигналов и/или сигналов
управления. Остальное, в т.ч. жёсткий реалтайм, непосредственное управление
какими-то регистрами или битами -- никто не обещал (или покажите пальцем,
только Гука этого, сразу лучше по-дальше засуньте. Я не скажу, что Гук он совсем
не годный, но какое-то осмысление прочитанного должно быть).
Спасибо сказали: