НОВОЕ: OS/2 GURU - Вопросы и ответы

Reviews / articles about OS/2

Operating systems:
ArcaOS, eComStation, IBM OS/2 Warp
Мифы о eComStation 

Unsorted

 

 

ArcaOS 5.0 Русская версия
Пакет русификации ArcaOS 5.0 OS/2 давно доступен. Поддерживается любая версия: 5.0, 5.0.1, 5.0.2.

eCo Software может выпустить и другие пакеты (Немецкий, Голландский, Бразильский Португальский, Испанский, Шведский и т.д.)

Библиотека USBCALLS для eComStation


TITLE: Библиотека USBCALLS для eComStation

DATE: 2006-04-28 17:27:53

AUTHOR: Frolov Dmitry

Введение

Большинство современных периферийных устройств подключаются к компьютеру через USB-порт, постепенно вытесняя COM- и SCSI-устройства. Их поддержка со стороны программного обеспечения сейчас востребована как никогда. Библиотека USBCALLS предлагает разработчикам удобный программный интерфейс для работы с USB-устройствами, который может значительно упростить разработку приложений. При использовании USBCALLS разработчику не нужно писать драйвер для управления USB-устройством. Он пишет обычное Ring-3 приложение, которое обращается к драйверу USBCALLS, благодаря чему отладка кода заметно упрощается. USBCALLS позволяет взаимодействоать с устройствами, присоединенными к контроллеру любого типа, поскольку он не работает напрямую с USB-контроллером, а обращается к драйверу USBD.

USBCALLS позволяет управлять устройствами, подключенными через любой USB-контроллер:

Программы, использующие USBCALLS:

  • GPhoto2 - управление цифровыми фотокамерами
  • ptppro - управление цифровыми камерами по протоколу PTP (Sony, Kodak и т.п.)
  • Sane - управление сканерами
  • Coolfm - управление USB FM-приемниками
  • Программа просмотра подключенных USB устройств - USBRES.EXE
  • Программа управления Palm
  • Программа управления мультимедийными кнопками на USB-клавиатурах
  • Программа определения подключения USBMSD-накопителя
  • Программа управления web-камерами (Logitech QuickCam 4000 Pro и совместимыми)

Библиотека USBCALLS была разработана Markus Montkowski. В настоящее время, разработку ведет Dmitry Froloff.

Управление USB-устройствами, краткий обзор endpoints

Любое USB-устройство обязано поддерживать USB Control Transfer. С помощью этого протокола производится распознавание и конфигурирование USB-устройств, сброс ошибок, перезапуск и т. п. Соотвествующие типы Control Transfer отвечают за передачу различных дескрипторов устройства, из которых, в свою очередь, можно узнать об устройстве все, что оно может сообщить о себе: Device Class/Subclass, Vendor Product Id, Serial Number, количество и типы endpoints и прочее.

  • Bulk - endpoint через который производится передача данных из/в устройство. Практически все устройства, за исключеним самых простых, имеют его. Примеры: mass storage, флеш-накопители, MP3-плееры, кардридеры, сканеры, фотокамеры и т.д.
  • Irq - это Interrupt endpoint. Через него устройство оповещает о каких-то событиях. Например событием является то, что устройство готово к передаче данных или произошла какая-то ошибка. Многие из вышеперечисленных устройств имеют interrupt endpoint. Отдельно стоят т.н. HID - Human Interface Devices. Для них Interrupt endpoint является основным. Это USB-клавиатуры, мыши, составные устройства, джойстики и т.д.
  • Iso - Isochronous endpoint. Предназначен для передачи видео (webcam) или audio (USB sound), т.е. для тех видов трансферов, в которых требуется иместь постоянную полосу пропускания для передачи непрерывных данных.

Interrupt-протокол - это обычное чтение из USB endpoint, с той лишь разницей, что данные реально передаются лишь тогда, когда USB-устройство готово к их передаче, т.е. хост контроллер периодически (с заданным интервалом) опрашивает устройство. Содержимое самих данных полностью зависит от типа и протокола работы устройства.

Действия программиста сводятся к следующему:

  • открыть устройство, получить от UsbResMg хэндл для последующей работы с ним: UsbOpen();
  • в цикле вызывается функция UsbIrqRead(). Если в течение указанного времени от устройства пришло прерывание, то функция возвратит прочитанные из Interrupt endpoint данные, характеризующие событие, или вернется по таймауту с соответствующим кодом завершения;
  • анализируются данные, и, в зависимости от результата, производятся определенные действия. Например, если говорить о мультимедийной клавиатуре, имитируется нажатие клавиш - посредством скан-кодов, или же просто напрямую выполняются требуемые действия: управление audio, запуск приложения;
  • по завершении работы с устройством хэндл освобождается с помощью функции UsbClose().

Следующий вариант управления USB-устройствами - Bulk endpoint.

  • открыть устройство, получить от UsbResMg хэндл для последующей работы с ним: UsbOpen();
  • далее, в цикле вызываются функции UsbBulkRead()/UsbBulkWrite(), работающие аналогично DosRead()/DosWrite(), за исключением наличия таймаута. Если в течение указанного времени устройство выполнило требуемую операцию, то функция возвратит данные, прочитанные из Bulk endpoint (передаст данные в устройство) или вернется по таймауту с соответствующим кодом завершения;
  • анализируется код завершения или принятые данные, и, в зависимости от результата, производим определенные действия. Например, для USB-накопителей читаем/пишем сектора с данными. В каждом конкретном случае алгоритм и последовательность операций определяется устройством, с которым производится обмен данными.
  • по завершении работы с устройством, хэндл освобождается с помощью функции UsbClose().

Работа с устройством через Iso endpoint.

Алгоритм работы следующий:

  • открыть устройство, получить от UsbResMg хэндл для последующей работы с ним: UsbOpen();
  • создать семафор;
  • посылается запрос к UsbCall с этим семафором на Iso transfer;
  • ожидание семафора;
  • по наполнении блока, UsbCall выставляет семафор;
  • сбрасывается семафор, выполняются действия с данными;
  • цикл к ожиданию семафора;
  • по завершении работы вызывается UsbCall с отменой Iso transfer;
  • по завершении работы с устройством освобождаются семафор и хэндл с помощью функции UsbClose().


Другие функции USBCALLS:

USBCALLS включает в себя Функцию выбора конфигурации. Конфигурация весьма важна, поскольку она определяет режим работы устройства. Например, в веб-камере, в зависимости от требуемого разрешения и цветности, устанавливается соотвествующая конфигурация. Аналогично для аудио-устройств, рабочая частота дискретизации и разрядность аудио-данных задается путем выставления конфигурации. Кроме этого, в UsbCalls есть весь необходимый набор функций для построения дерева устройств:

  • UsbQueryNumberDevices(), UsbQueryDeviceReport() для построения списка устройств;
  • UsbRegisterChangeNotification(), UsbRegisterDeviceNotification(), UsbDeregisterNotification() для получения уведомления о подключении устройства.

Подключайся к разработке управляющих программ!

Обмениваться данными можно через любые типы endpoints, а значит возможно реализовать поддержку практически любых USB-устройств из Ring3.

Поддержку каких устройств можно реализовать? Мы предлагаем вам заняться разработкой программ управления устройствами:

  • TV-тюнеры
  • UPS (бесперебойные источники питания)
  • пульты дистанционного управления
  • модемы
  • джойстики
  • сенсорные экраны
  • сканеры штрих-кодов
  • микрофоны
  • USB security keys
  • программы-детекторы подключения устройств
  • USBRES (VIO-версия)

Мы надеемся, вы убедились, что управлять USB-устройствами очень просто. Если у вас возникли вопросы по библиотеке USBCALLS, задавайте их в форуме http://forum.ecomstation.ru


Дополнительная информация

Попробуй программу:

ACPI kernel - помогает снизить энергопотребление, шум (результаты эксприментов)

Комментарии:

Konstantin
2008-10-21 00:18:46

А мне понравилось сие описание.

Еще бы хватило ума разобраться.

Михаил
2009-05-14 16:00:30

интересная статья. А какой алгоритм диагностики работы usb??!

eComStation 2.0 может быть установлена на компьютер с Windows 7. см. советы в eCSFAQ или Руководство по установке.

 


 

(C) OS2.GURU 2001-2021