Windows - статьи



         

ШАГ - часть 3


Вот возможные значения этих переменных:

const NONE = $0000;

// SPP modes CENTRONICS = $0001; // Только для записи IEEE_COMPATIBILITY = $0002; // Только для записи NIBBLE = $0004; // Только для чтения CHANNEL_NIBBLE = $0008; // Только для чтения BYTE_BIDIR = $0010; // Только для чтения

// EPP modes EPP_HW = $0020; // Аппаратный EPP EPP_SW = $0040; // Программный EPP

// ECP modes BOUNDED_ECP = $0080; // Упрощенный ECP ECP_HW_NOIRQ = $0100; // Аппаратный ECP без IRQ ECP_HW_IRQ = $0200; // Аппаратный ECP с IRQ ECP_SW = $0400; // Программный ECP

Сразу после того, как порт открыт, он устанавливается в режим CENTRONICS по записи и NIBBLE по чтению.

Код операции IOCTL_IEEE1284_NEGOTIATE предназначен для согласования режима работы порта и устройства:

const IOCTL_IEEE1284_NEGOTIATE = $160018;

var ReqMode, LptMode: PARCLASS_NEGOTIATION_MASK;

ReqMode. usReadMask:= $7FF; // Тестировать все режимы для чтения ReqMode. usWriteMask:= $7FF; // Тестировать все режимы для записи DeviceIoControl(hLpt, IOCTL_IEEE1284_NEGOTIATE, @ReqMode, sizeof(PARCLASS_NEGOTIATION_MASK), @LptMode, sizeof(PARCLASS_NEGOTIATION_MASK), ret, lpOverlapped);

@ReqMode указывает на структуру PARCLASS_NEGOTIATION_MASK, которая содержит маску тестирования режимов для работы с устройством. Маска представляет собой произвольную сумму, указанных выше констант.

Драйвер выполняет с устройством для каждого указанного в маске режима в соответствии со спецификацией IEEE 1284. Если соответствующий бит в маске выставлен в 1, то данный режим проверяется на возможность его применения при работе с подключенным устройством, а затем выбирается режим с максимальной пропускной способностью. Этот режим устанавливается в качестве текущего, а соответствующие ему значения драйвер возвращает в структуре LptMode. Кроме указанных выше констант, однозначно обозначающих режимы, Windows определяет еще две маски для запроса:

EPP_ANY = $0060; // любой из EPP ECP_ANY = $0780; // любой из ECP

Чтобы запросить проверку всех режимов, нужно указать $7FF.

После согласования режима драйвер не переводит выходные линии порта в состояние, соответствующее выбранному режиму! Он оставляет их в состоянии инициализации:




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