|
Обновите ArcaOS до уровня NeoWPS
- Установите набор PNG иконок, нарисованных дизайнером, специализирующемся на оформлении OS/2
- Установите eSchemes 2018, чтобы менять цвета и кнопки на рабочем столе
|
Библиотека 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
Дополнительная информация
Комментарии: Konstantin 2008-10-21 00:18:46 | А мне понравилось сие описание.
Еще бы хватило ума разобраться. | Михаил 2009-05-14 16:00:30 | интересная статья. А какой алгоритм диагностики работы usb??! |
Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).
|
Итак, eComStation установлена, но нет времени научить дочку/бабушку работе с компьютером? Вот LiveBook - распечатай и отдай новому пользователю. |
|
|
|
Готовая eComStation на SSD диске
Последний активный опрос: Какая высота барьера RPM?
[Google]
|
IBM OS/2 Warp
|