Свежая информация железнодорожное оборудование сцб у нас. Jaecoo официальный сайт официальныи саи jaecoo.
Класс и протоколы принтеров с интерфейсом USB определены документом «Universal Serial Bus Device Class Definition for Printing Devices», первая версия которого появилась в 1997 году, версия 1.1 — в 2000 г. Протоколы определены с учетом обеспечения легкого перехода от традиционных интерфейсов принтера: последовательного (RS-232, RS-422) и параллельного (однонаправленного Centronics или двунаправленного IEEE 1284). Подключение принтера USB эмулирует его подключение к LPT-порту в режиме SPP или двунаправленном (IEEE 1284). Классовое определение USB принтера не затрагивает данные, передаваемые принтеру: это может быть любой язык описания страниц (PDL — Page Descriptor Language). Принтеры могут работать только на скоростях FS или HS (на низкой скорости в USB нет передач массивов).
Принтер имеет все стандартные дескрипторы устройства USB, специфических классовых дескрипторов нет. В дескрипторе устройства принтер сообщает нулевые коды класса, подкласса и протокола. Принтер имеет по крайней мере одну конфигурацию; в конфигурации имеется один интерфейс. На уровне интерфейса для принтеров определен класс 07 подкласс 01. Код протокола определяется выбранной альтернатиной установки интерфейса:
В принтере используется (кроме нулевой) только одна конечная точка для вывода данных (Bulk-OUT), для двунаправленного интерфейса — еще и Bulk-IN для получения данных обратного канала (состояния).
Принтер поддерживает стандартные запросы к устройствам USB, кроме установки метки времени (у принтера нет изохронных точек). Кроме того, он должен поддерживать классовые запросы (см. таблицу).
По запросу Get_Device_Id принтер возвращает строку данных (Capabilities String), описывающих его в формате и синтаксисе, определенном в IEEE-1284. В запросе в поле wValue указывается номер интересующей конфигурации, старший байт wIndex задает номер интерфейса (0), младший — номер альтернативной установки. Возвращаемая строка начинается с 2-байтного поля длины всей строки (старший байт — первый), за которой идет собственно идентификатор.
Запрос | bmRequestType | bRequest |
Get_Device_Id | 10100001b | 0 |
Get_Port_Status | 10100001b | 1 |
Soft_Reset | 00100011b | 2 |
По запросу Get_Port_Status принтер возвращает байт состояния, аналогичный байту состояния LPT-порта. Здесь значимы только 3 бита (остальные — нули):
По запросу Soft_Reset принтер очищает свой буфер данных, переходит в исходное состояние, переводит в исходное состояние и разблокирует (если они были остановлены) конечные точки. На его состояние в плане интерфейса USB (адресован, сконфигурирован) этот сброс не влияет.
Для работы с USB-принтером следует считать дескриптор устройства и дескрипторы всех возможных конфигураций, выбрать конфигурацию и требуемую альтернативную установку интерфейса. При работе с двунаправленным интерфейсом некоторое неудобство вызывает тип конечной точки обратного канала (Bulk): запрос данных о состоянии принтера, который делает драйвер, будет «висеть» до срабатывания тайм-аута драйвера, если принтеру «нечего сказать». Формальное определение результатов запроса Get_Port_Status (по крайней мере, согласно спецификации версии 1.1) не позволяет судить о наличии данных в обратном канале. Однако, вспоминая работу LPT-порта, которую эмулирует подключение по USB, можно предположить, что признаком наличия данных обратного канала будет бит 3 (Not Error). В LPT-порту этот бит представляет текущее состояние сигнала Error#, который во всех режимах IEEE 1284 (исключая режим совместимости с SPP) используется для сигнализации наличия данных обратного канала.