Руководство программиста для Linux


Программирование портов ввода/вывода


Обычно ПК имеет как минимум 2 последовательных и 1 параллельный интерфейс. Они являются специальными устройствами и отображаются следующим образом. * /dev/ttyS0 - /dev/ttySn

RS232 последовательные устройства 0 - n, где n зависит от вашего аппаратного обеспечения. * /dev/cua0 - /dev/cuan

RS232 последовательные устройства 0 - n, где n зависит от вашего аппаратного обеспечения. * /dev/lp0 - /dev/lpn

параллельные устройства 0 - n, где n зависит от вашего аппаратного обеспечения. * /dev/js0 - /dev/jsn джойстики 0 - n, где 0<= n <=1.

Разница между /dev/ttyS* и /dev/cua* в способе вызова open(). /dev/cua* предполагают использование как устройств вывода, и, как следствие, имеют другие установки по умолчанию относительно /dev/ttyS*. /dev/ttyS* инициализируются для входящих и выходящих сигналов. По умолчанию устройства являются управляющими устройствами для процесса, их открывающего. Обычно ioctl() обрабатывает все эти специальные устройства, однако POSIX предпочитает определение новых функций для асинхронных терминалов. Эти функции жестко привязаны к структуре termios. Оба варианта требуют подключения .

1) Метод ioctl:

TCSBRK, TCSBRKP, TCGETA (get attributes - получить атрибуты), TCSETA (set attributes - установить атрибуты); Запросы управления вводом/выводом терминала (terminal I/O control - TIOC): TIOCGSOFTCAR ($get soft carrier$), TIOCSSOFTCAR ($setsoftcarrier$), TIOCSCTTY (set controlling tty - установка управления tty), TIOCMGET (get modemlines), TIOCMSET, TIOCGSERIAL, TIOCSSERIAL, TIOCSERCONFIG, TIOCSERGWILD, TIOCSERGSTRUCT, TIOCMBIS, TIOCMBIC, ...

2) Метод POSIX:

tcgetattr(), tcsetattr(), tcsendbreak(), tcdrain(), tcflush(), tcflow(), tcgetpgrp(), tcsetpgrp() cfsetispeed(), fgetispeed(), cfgetospeed()

3) Другие методы:

outb, inb для нестандартных устройств, например, для использования принтерного порта не для принтера.




Начало  Назад  Вперед