Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

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

Sven Goldt, Sven van der Meer, Skott Burkett, Matt Welsh

Перевод: Алексей Паутов,
Russian LDP: http://www.botik.ru/~rldp, ftp://ftp.botik.ru/rented/rldp

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

Обычно ПК имеет как минимум 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 для нестандартных устройств, например, для использования принтерного порта не для принтера.

9.1. Программирование мыши

TCSBRK, TCSBRKP, TCGETA (get attributes - получить атрибуты)Мышь подключается как к последовательному порту, так и напрямую к шине. Разные типы мышек посылают разные типы данных, что немного усложняет программирование. Однако, Эндрю Хэйлет (Andrew Haylett) был так добр, что поставил общий копирайт на свою программу selection, то есть вы можете использовать его функции работы с мышью. В этом руководстве вы найдете пре-релиз selection-1.8 с пометкой COPYRIGHT. Правда, X11 уже предложили удобный мышечный API, поэтому программы Эндрю следует использовать только для не-X11 приложений. Из пакета selection вам потребуются только модули mouse.h и mouse.c.

Для получения событий от мыши вам необходимы ms_init() и get_ms_event(). ms_init() требует следующих 10 аргументов.

1) int acceleration TCSBRK, TCSBRKP, TCGETA (get attributes - получить атрибуты)Ускоряющий множитель. Если вы передвигаете курсор более, чем на delta пикселов, то движение ускоряется в зависимости от этого коэффициента.

2) int baud

bps - оценка скорости мыши (обычно 1200 bps)

3) int delta

Число пикселов, на которые сдвинется курсор, для активизации ускорения (см. 1).

4) char *device

Имя устройства (например, /dev/mouse).

5) int toggle

Выключатель DTR, RTS или и DTR и RTS каналов мыши и модема при инициализации (нормально - 0).

6) int sample

Разрешение мыши в dpi (обычно 100).

7) mouse_type mouse

Идентификатор присоединенной мыши, вроде P_MSC (Mouse Systems Corp.).

8) int slack

Если равно -1, то курсор застопоривается на границах экрана; при slack >=0 курсор выезжает с противоположной стороны, если он зашел за пределы на slack пикселов.

9) int maxx

Разрешение текущего терминала по x. Символы шрифта по умолчанию имеют ширину 10 пикселов, поэтому полный режим по x равен 10*80-1.

10) int maxy

Шрифт по умолчанию имеет символы высотой 12 пикселов, поэтому полное разрешение экрана по y 12*25-1 пиксел.

get_ms_event() нуждается только в указателе на структуру ms_event. Если get_ms_event() возвращает -1, то произошла ошибка. В случае успеха возвращается 0, а ms_event содержит текущее состояние мыши.

9.2. Программирование модема

Используйте Hayes Commands для управления модемом. Для контроля порта rs232 вам потребуется termios. Смотри пример miniterm.c.

9.3. Программирование принтера

TCSBRK, TCSBRKP, TCGETA (get attributes - получить атрибуты) Смотрите пример checklp.c. Не используйте termios для управления принтерного порта, пользуйтесь ioctl, inb/outnb, если необходимо, команды Epson, Postscript, PCL и т.д. вызовы ioctl: LPCHAR, LPTIME, LPABORT, LPSETIRQ, LPGETIRQ, LPWAIT inb и outb определяют статус и управляют портом.

9.4. Программирование джойстика

TCSBRK, TCSBRKP, TCGETA (get attributes - получить атрибуты)Смотри пример js.c в модуле для джойстика пакета ядра. вызовы ioctl: JS_SET_CAL, JS_GET_CAL, JS_SET_TIMEOUT, JS_GET_TIMEOUT, JS_SET_TIMELIMIT, JS_GET_TIMELIMIT, JS_GET_ALL, JS_SET_ALL. Операция чтения

Назад | Содержание | Вперед

 

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...