- •Лабораторная работа
- •Структура usb.
- •Физический интерфейс.
- •Модель передачи данных.
- •Типы передачи данных.
- •Протокол.
- •Форматы пакетов.
- •Работа с мышью.
- •Листинг программы для работы с мышью через интерфейс usb (ос Dos):
- •Блок-схема алгоритма:
- •Работа с принтером.
- •Листинг программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb.
- •Блок-схема алгоритма программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb
- •Листинг программы для работы с принтером (ос Windows хр) через интерфейс usb.
- •Блок-схема алгоритма:
- •Результат работы программы:
- •Контрольные вопросы:
- •1. Опиши те все, что вы знаете о хост-контроллерах.
- •3. Опишите четыре базовых типа передачи данных, предусмотренных протоколом usb.
- •4. Опишите реализацию запросов к usb устройствам.
- •5. Что такое Human Interface Devices?
- •6. Опишите все, что вы знаете о рапортах.
- •7. Опишите разряды слова состояния конечной точки.
- •8. Опишите модель передачи данных.
- •9. Перечислите и опишите основные операции при работе с интерфейсом usb.
- •10. Опишите формат пакетов передаваемых данных.
- •11. Что вы знаете об однонаправленном и двунаправленном интерфейсах?
- •12. Как проверить принадлежность устройства к классу принтеров?
- •13. Опишите особенности и принцип работы с принтером через usb интерфейс.
- •14. Какие командные языки используются для управления процессом печати?
- •15. Как производится программный сброс принтера?
- •16. Опишите назначение полей bDeviceClass, bDeviceSubClass, bDeviceProtocol в дескрипторе устройства.
- •17. Что происходит по запросу Get Port Status?
- •18. Что происходит по запросу Get Device id?
Блок-схема алгоритма:
Работа с принтером.
В процессе стандартизации периферийного оборудования с интерфейсом 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.