Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб11_ЮСБ.doc
Скачиваний:
13
Добавлен:
21.12.2018
Размер:
1.78 Mб
Скачать

Блок-схема алгоритма:

Работа с принтером.

В процессе стандартизации периферийного оборудования с интерфейсом USB постоянно возникают проблемы, связанные с несогласованностью действий разработчиков, а часто — и с явным нежеланием следовать каким-либо стандартам. Некоторые классы устройств описаны настолько расплывчато, что создание для них универсальных драйверов в принципе невозможно: для разработки программного обеспечения требуется запрашивать у изготовителя документацию на конкретное устройство.

Принтеры являются счастливым исключением из общего правила: интерфейс USB для принтеров разработан таким образом, чтобы имитировать работу с принтером через параллельный порт, и полностью стандартизирован. Описание интерфейса принтеров приводится в спецификации Universal Serial Bus Device Class Definition for Printing Devices.

Для управления процессом печати используются командные языки фирм-изготовителей принтеров, поэтому создать единый универсальный драйвер практически невозможно. Существуют, однако, достаточно крупные группы изделий, для которых можно создать специфические драйверы, используя открытые (опубликованные) спецификации на командные языки. Например, как уже было указано в главе «Принтеры: печать в растровом режиме», для лазерных принтеров фактическим стандартом является язык HP PCL, а все струйные принтеры EPSON поддерживают язык Epson raster. Многие модели лазерных принтеров поддерживают также язык PostScript.

В обязательном порядке принтер имеет, по крайней мере, одну выходную точку, работающую в режиме передачи массивов данных (Bulk OUT). Эта точка служит для передачи данных (печатаемого текста или изображения) с хоста на принтер. Принтер может иметь также входную точку, работающую в режиме передачи массивов данных (Bulk IN) и предназначенную для передачи хосту информации об устройстве (например, о наличии бумаги в лотке подачи и тонера в картридже) и текущем состоянии процесса печати документа (например, об используемом разрешении, режиме печати, применяемых шрифтах).

Любой принтер с интерфейсом USB должен поддерживать, по крайней мере, один из двух возможных интерфейсов:

- однонаправленный интерфейс (Unidirectional Interface) поддерживает только передачу данных с хоста на принтер через выходную точку. Данные о состоянии принтера передаются через Основной канал сообщений по запросу GET_PORT_STATUS;

- двунаправленный интерфейс (Bi-directional Interface) поддерживает передачу данных с хоста на принтер через выходную точку и позволяет хосту получать информацию о принтере и состоянии процесса печати через входную точку. Данные о текущем состоянии принтера можно также получить через Основной канал сообщений по запросу GET_PQRT_STATUS.

Обычно используется только двунаправленный интерфейс. Если принтер поддерживает одновременно оба интерфейса, они должны быть реализованы как альтернативные. Тип интерфейса указывается в поле протокола дескриптора интерфейса: однонаправленному интерфейсу соответствует код 01 h, двунаправленному — код 02h.

Принтеры поддерживают все стандартные запросы к устройству USB, а также несколько специфических (для своего класса) запросов:

- Get Device ID - получить идентификатор устройства;

- Get Port Status - получить информацию о текущем состоянии принтера;

- Soft Reset - произвести программный сброс принтера.

Запрос Get Device ID позволяет получить строку-идентификатор принтера. Запрос имеет следующие параметры:

- bmRequestType = 10100001 b;

- bRequest = 0;

- wValue — индекс конфигурации (нумерация конфигураций начинается с нуля);

- wIndex — код интерфейса (в старшем байте — индекс интерфейса, в младшем байте — индекс варианта настройки; индексация начинается с нуля);

- wLength — предельная длина возвращаемой строки в байтах (ограничитель на длину строки).

По запросу Get Device ID принтер передает хосту строку-идентификатор (Device ID) в формате, соответствующем стандарту IEEE- 1284: первые два байта содержат 16-разрядное слово, задающее общую длину идентификатора в байтах, а вслед за ними размещается собственно строка-идентификатор в коде ASCII.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]