LINUX.ORG.RU

Работа с COM-портом


0

1

Есть некоторое устройство, подключаемое к COM-порту. Это устройство шлёт данные, которые я должен считать. С этим проблем нет. Также это устройство иногда дёргает провод DCD. Задача: необходимо различать принятые данные по тому, пришли они вместе с DCD или без него.

С этим начались проблемы, DCD может изменяться с периодом 12 мс или реже, опрос его состояния в цикле с помощью ioctl не успевает. Заранее известно, что если DCD поднят, то придет ровно 24 байта, если опущен, то данные могут (но не обязательно) придти в виде короткой посылки длинной в несколько байт.

Может кто-нибудь знает, как обработать прерывание по изменению DCD или какой нибудь другой способ или литературу.


Ответ на: комментарий от Led

Linux при том, что программа работает в Linux.

GSA
() автор топика

Лучше его RS-232 обзывать.

Обработчиков прерываний в пространстве пользователя нет. Поэтому лучше непрерывно в отдельном потоке опрашивать порт на наличие принятых сообщений (man 2 select) и генерировать какие-нибудь сигналы для родительского потока.

// P.S. «по-полной программе» RS-232 я никогда не использовал, только RX/TX. И вообще, лучше так и делать, т.к. в современных компьютерах все меньше шансов найти 232-й, а переходнички USB<->RS-232 чаще всего полноценный 232-й не поддерживают, только RX/TX.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

а переходнички USB<->RS-232 чаще всего полноценный 232-й не поддерживают, только RX/TX.

быгыгы. То-то pl2303 и всякие там FT232* имеют полный разведённый порт из коробки. Откуда там быть полному RS-232 действительно?...

adriano32 ★★★
()
Ответ на: комментарий от Eddy_Em

Я бы рад использовать только RX/TX, но железка готовая и трогать ее нельзя.

Помучаю select, по результатам отпишусь

GSA
() автор топика
Ответ на: комментарий от anonymous

Те же яйца, только в профиль: это что-то вроде демона, постоянно выполняющего select и отправляющего клиенту сигнал при поступлении события (думаю так, по ссылке не читал).

Eddy_Em ☆☆☆☆☆
()

ты же сам сказал, что если пришло 24 байта, то DCD поднят, а если нет, но немного байт
так вот их так и отличай )
а еще скажи разработчику этой железки, что он неправ

x905 ★★★★★
()
Ответ на: комментарий от Eddy_Em

Не знаю какие яйца и в каком профиле, но написал ты какую-то ерунду - к uio даже близко не лежит. uio - это возможность писать полноценные драйверы в юзерспейс, включая обработку прерываний.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.