Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Основные принципы системной разработки > Разработка драйверов и драйверные библиотеки > Драйверные библиотеки > Библиотека разработки драйверов символьных устройств (libio-char) > Библиотека libio-char.a > TTYDEV



TTYDEV

Структура для устройства tty

Прототип:

#include <sys/io-char.h>
typedef struct ttydev_entry {
iofunc_attr_t attr;
iofunc_mount_t mount;
TTYPOWER power;
TTYWAIT *waiting_read;
TTYWAIT *waiting_write;
TTYWAIT *waiting_drain;
TTYWAIT *waiting_devctl;
int c_cflag;
int c_iflag;
int c_lflag;
int c_oflag;
volatile unsigned flags;
volatile unsigned xflags;
volatile unsigned eflags;
volatile unsigned lflags;
unsigned int bcnt;
unsigned int fwdcnt;
struct ttydev_entry *timer;
int timeout;
int timeout_reset;
union {
uint64_t tmrs;
struct {
char drn_tmr;
char tx_tmr;
char brk_tmr;
char dtr_tmr;
char spare_tmr;
char rsvd1;
char rsvd2;
char rsvd3;
} s;
} un;
pid_t brkpgrp;
pid_t huppid;
cc_t c_cc[NCCS];
unsigned char fifo;
unsigned char fwd;
unsigned char prefix_cnt;
unsigned char oband_data;
int highwater;
int baud;
struct winsize winsize;
TTYBUF obuf;
TTYBUF ibuf;
TTYBUF cbuf;
iofunc_notify_t notify[3];
struct ttydev_entry *extra;
TTYWAIT *waiting_open;
int linkid;
void *reserved2;
int (*io_devctlext)(resmgr_context_t *ctp, io_devctl_t *msg, iofunc_ocb_t *ocb);
char name[TTY_NAME_MAX];
} TTYDEV;

Библиотека:

libio-char

Описание:

Структура TTYDEV используется для обработки устройств, общих между драйвером и библиотекой io-char. Поля структуры включают:

attr
Атрибут менеджера ресурсов.
mount
Связано с информацией о менеджере ресурсов.
power
Атрибут управления питанием TTYPOWER.
waiting_read
Очередь TTYWAIT для хранения заблокированных клиентов, ожидающих чтения.
waiting_write
Очередь TTYWAIT для хранения заблокированных клиентов, ожидающих записи.
waiting_drain
Очередь TTYWAIT для хранения заблокированных клиентов, ожидающих опустошения.
c_cflag
Флаг termios, описывающий аппаратное управление терминалом.
c_iflag
Флаг termios, описывающий основные управляющие флаги ввода терминала.
c_lflag
Флаг termios, используемый для управления различными функциями терминала.
c_oflag
Флаг termios, описывающий основные управляющие флаги вывода терминала.
flags
В настоящее время определены следующие флаги:
OHW_PAGED
аппаратное управление потоком вывода (устанавливается io-char и используется драйвером).
IHW_PAGED
аппаратное управление потоком ввода включено; уровень заполнения буфера устройства достигнут, и устройство не хочет больше получать данные. Этот флаг также подает сигнал на линию RTS.
OSW_PAGED
программное управление потоком вывода включено; устройство не должно передавать данные (устанавливается io-char и используется драйвером).
ISW_PAGED
программное управление потоком ввода; уровень заполнения буфера устройства достигнут, и устройство не хочет больше принимать данные. Этот флаг также передает VSTOP.
EDIT_INSERT
для режима редактирования. Режим вставки или набора зачеркнутого текста.
EDIT_PREFIX
для режима редактирования. Ищит клавиши редактирования, которые начинаются с фиксированного префикса
OBAND_DATA
указывает на доступность данных вне основного канала.
LOSES_TX_INTR
сообщает библиотеке символьных устройств (io-char), что устройство иногда не генерирует прерывания TX. Зная о недостатках аппаратуры, библиотека io-char будет принимать дополнительные меры предосторожности при передаче данных, используя внутренний таймер обратного отсчета для отслеживания времени между прерываниями TX. Если таймер истекает до того, как поступит следующее прерывание TX, библиотека io-char предполагает, что аппаратное обеспечение не смогло сгенерировать прерывание, и пытается передать больше данных, вызывая tto(). Если данные больше не передаются, таймер обратного отсчета не перезапускается.
TIMER_ACTIVE
используется io-char.
TIMER_KEEP
используется io-char.
NOTTY
используется PTY.
NL_INSERT
используется для уведомления приложения, если \n был заменен на \r.
ISAPTY
используется PTY.
PTY_MASTER_ONLY
используется PTY.
LITERAL
используется io-char.
FIRST_TIME_ALONE
используется io-char.
Флаги указывают, какое событие произошло. Затем драйвер отправляет событие в io-char.
В настоящее время определены следующие события:
EVENT_QUEUED
присутствует событие, поставленное в очередь.
EVENT_SIGINT
был получен символ прерывания или событие "break".
EVENT_SIGHUP
управление задачами POSIX, TTI_HANGUP.
EVENT_SIGBRK
управление задачами POSIX для SIGBRK отправляет SIGINT. Это событие вызывается TTI_BREAK, поэтому драйвер, вероятно, не нуждается в его обработке.
EVENT_TTO
используется для вызова функции tto() в контексте потока для передачи данных. Обработчик прерываний может вернуть это событие вместо прямого вызова tto().
EVENT_READ
используется io-char.
EVENT_WRITE
вызывается драйвером. Разблокирует приложение, ожидающее записи, когда в выходном буфере есть место для приема символов.
EVENT_DRAIN
вызывается драйвером. Выходной буфер опустошён (разблокирует того, кто ожидает освобождения буфера устройства).
EVENT_TIMEOUT
используется io-char.
EVENT_NOTIFY_INPUT
уведомление о вводе (используется io-char). См. notify в TTYDEV.
EVENT_NOTIFY_OUTPUT
уведомление о выводе (используется io-char). См. notify в TTYDEV.
EVENT_NOTIFY_OBAND
драйвер уведомляет io-char, если доступны данные вне основного канала.
EVENT_CARRIER
генерируется TTI_CARRIER.
EVENT_SIGQUIT
управление заданием, генерируется TTI_QUIT, чтобы уведомить о получении символа QUIT.
EVENT_SIGSUP
управление заданием, генерируемое TTI_SUSP, чтобы уведомить о получении символа SUSP.
xflags
OSW_PAGED_OVERRIDE
переопределяет OSW_PAGED, чтобы разрешить передачу управляемых символов в состоянии приостановки программного управления потоком. Этот флаг устанавливается функцией io-char, используется и очищается драйвером.
eflags
Флаг событий, расширение для флагов из переменной flags.
lflags
Флаг логирования.
bcnt
Внутренняя переменная io-char, используемая для определения количества байтов, необходимых для уведомления клиента о чтении.
fwdcnt
Внутренняя переменная io-char, используемая для определения количества "перенаправлений" (forward counts).
timer
timeout
timeout_reset
Используется io-char.
tmrs
Один из доступных таймеров, которые могут использоваться io-char.
drn_tmr
Таймер опустошения (drain timer).
tx_tmr
Таймер потери прерываний передачи. Включается с помощью LOSES_TX_INTR. Этот таймер вызывает tto(), чтобы обойти проблему с оборудованием, которое теряет прерывания передачи.
brk_tmr
Break таймер. Используется только io-char для отправки "break"; вызывает tto(TTO_CTRL, dtrchg).
dtr_tmr
Таймер линии DTR. Используется io-char для установки линии DTR, т.е. генерирует SIGHUP и вызывает tto(TTO_CTRL, dtrchg).
spare_tmr
Резервный таймер для использования только драйвером.
dsr_tmr
Таймер для драйвера на стороне устройства, где DSR является выходом.
dcd_tmr
Таймер для драйвера на стороне устройства, где DCD является выходом.
rsvd3
Зарезервировано для добавления дополнительных таймеров.
brkpgrp
huppid
Используется io-char.
c_cc
Специальные управляющие символы POSIX.
fifo
Используется только драйвером.
fwd
Перенаправляющий символ, используемый io-char. Применяется с fwdcnt для реализации перенаправления, описанного в readcond().
prefix_cnt
Используется только io-char.
oband_data
Данные вне основного канала, устанавливаемые драйвером в intr.c. Приложение получает их из io-char через devctl().
highwater
Устанавливается драйвером и используется io-char для определения момента, когда нужно включить управление потоком. (Убедитесь, что это значение меньше размера входного буфера).
baud
Скорость передачи данных устройства (baud rate).
winsize
Используется только io-char.
obuf
Выходной буфер.
ibuf
Входной буфер.
cbuf
Канонический буфер.
notify
Массив из трех структур iofunc_notify_t, которые представляют (по порядку) список уведомлений для ввода, вывода и данные вне основного канала.
  • notify[0] - уведомление для ввода, используемого io-char
  • notify[1] - уведомления для вывода данных драйверу, используются в tto.c.
  • notify[2] - уведомления для данных вне основного канала для драйвера, используются в intr.c.
extra
Используется для PTY.
waiting_open
Очередь TTYWAIT для заблокированных клиентов, ожидающих открытия.
linkid
Идентификатор, возвращаемый функцией resmgr_attach().
reserved2
Зарезервировано для использования io-char.
io_devctlext
Пользовательская команда devctl().
name
Имя устройства, например, /dev/ser1.

Классификация:

ЗОСРВ «Нейтрино»

Тематические ссылки:

TTYCTRL, TTI_*




Предыдущий раздел: Библиотека разработки драйверов символьных устройсв