Windows - статьи



         

ШАГ - часть 7


Сигнала сброса nReset как такового нет, но есть последовательность сброса, которую выполняет драйвер по соответствующему запросу (см. далее). Во-вторых, из-за ограниченности набора сигналов одни и те же линии используются как в циклах квитирования режимов, так и в цикле согласования (например, Data Strobe - AutoFeed, Write - Strobe). Поэтому если не принять определенных мер, то во время последовательности согласования будет сымитирован цикл записи, и в регистр устройства будет записан байт совместимости, что не всегда допустимо. Мало того, непосредственно перед этим имитируется чтение данных из устройства, несмотря на наличие байта на выходе LPT. Работа двух устройств на выход одновременно не сулит ничего хорошего. В моем случае внешнее устройство "перетягивало" порт, изменяя байт совместимости. В худшем случае что-нибудь может выгореть.

Последовательность согласования предусматривает возможность запроса идентификатора устройства, который представляет собой нуль-терминальную строку. Эту строку Windows выдает на экран при обнаружении нового устройства. Чтобы сделать запрос ID, придется воспользоваться кодами IOCTL_PAR_QUERY_DEVICE_ID, IOCTL_PAR_QUERY_DEVICE_ID_SIZE, IOCTL_PAR_QUERY_RAW_DEVICE_ID.

С помощью кода IOCTL_PAR_QUERY_INFORMATION у драйвера можно запросить информацию об его состоянии.

const IOCTL_PAR_QUERY_INFORMATION = $160004;

type PAR_QUERY_INFORMATION = record Status: byte; end; PPAR_QUERY_INFORMATION = ^PAR_QUERY_INFORMATION;

var ParInfo: PAR_QUERY_INFORMATION;

DeviceIoControl(hLpt, IOCTL_PAR_QUERY_INFORMATION, nil, 0, @ParInfo, sizeof(PAR_QUERY_INFORMATION), ret, lpOverlapped);

В поле ParInfo.Status драйвер возвращает байт, который может представлять собой комбинацию следующих чисел

const PARALLEL_INIT = $01; PARALLEL_AUTOFEED = $02; PARALLEL_PAPER_EMPTY = $04; PARALLEL_OFF_LINE = $08; PARALLEL_POWER_OFF = $10; PARALLEL_NOT_CONNECTED = $20; PARALLEL_BUSY = $40; PARALLEL_SELECTED = $80;

Прямого соответствия между битами ParInfo.Status и физическими регистрами параллельного порта нет, но какая-то нетривиальная взаимосвязь существует: определенные комбинации входных сигналов на разъеме порождают различное состояние поля статуса драйвера.




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