Получение модемных бит RTS/CTS, DTR/DSR по прерванию
Назначение бит регистра MSR:
Бит 7 - DCD (Data Carrier Detect) - состояние линии DCD.
Бит 6 - Rl(Ring Indicator) - состояние линии Rl.
Бит 5 - DSR(Data Set Ready) - состояние линии DSR.
Бит 4 - CTS(Clear To Send) - состояние линии CTS.
Бит 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) при изменении состояния этих трех бит регистра.
а вы хотите, чтобы порт вас уведомлял о событии? ИМХО, это невозможно. только проверять состояние нужных битов вручную
Глянул Гука - именно COM.
Последовательному порту можно сказать, чтобы он вызывал аппаратное прерывание в случае тех или иных событий:
- Получен байт
- Отправлен байт (трансмиттер пуст)
- Изменен статус линии (ошибка или разрыв)
- Изменен статус модема (CTS, DSR, RI или RLSD)
Как именно это делается ... передо мной вот текст открыт, но прочесть я его сейчас не в силах. Так или иначе - см документацию по биосу и конкретно по асинхронным портам.
Смысл в том чтобы на использовать проверку состояния по опросу ioctl. Хочу попробовать создать модуль ядра который будет делать тоже самое, проверку состояния по опросу ioctl, но в режиме ядра должно выполняться быстрее. т.е. мой прикладной процесс сможет раньше отреагировать на него.