Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 128

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 122 123 124 125 126 127 < 128 > 129 130 131 132 133 134 .. 166 >> Следующая

KLowerDevice
KPnPLowerDevice
К1 394LowerDevice
—¦ KUsbLowerDevice
Рис. 14.5. Наследование классов KLowerDevice
Класс KUsbLowerDevice предоставляет основные функции для обращения к USB-интерфейсу (листинг 14.3).
* Листинг 14.3. Некоторые функции KUsbLowerDevice
class KUsbLowerDevice : public KPnpLowerDevice {
public:
Il Функция выбора конфигурации
AC_STATUS ActivateConfiguration(
UCHAR ConfigurationValue, Il номер конфигурации ULONG MaxConfigSize=1024 Il максим, размер кофигурации );
Il Получение строкового дескриптора NTSTATUS GetStringDescriptor(
UCHAR Index, Il номер строки
PWCHAR pStr, Il буфер для строки
UCHAR MaxLen, Il размер буфера
SHORT Langld = 0x109 Il код языка ) ;
11 Получение счетчика кадров ULONG GetCurrentFrameNumber(void); // Передача запроса SET FEATURE
410
Часть IV. Создание USB-устройств
NTSTATUS SetFeature(
USHORT Feature, II код функции PIOJCOMPLETIONJROUTINE CompletionRoutine-NULL, PVOID Context-NULL
);
Il Передача запроса CLEAR_FEATURE NTSTATUS ClearFeature(
USHORT Feature, Il код функции PI0_C0MPLETION_ROUTINE CompletionRoutine-NULL, PVOID Context-NULL
);
Il передача пакета запроса в/в драйверу нижнего уровня NTSTATUS SubmitUrb( PURB pUrb,
PI0_COMPLETION_ROUTINE CampletionRoutine - NULL, PVOID Context=NULL, ULONG mSecTimeOut-0 );
Параметр completionRoutine позволяет указать адрес функции, которая будет вызвана при завершении операции. Это позволяет организовать асинхронное выполнение операций в/в.
Классы USB
Мы уже описали несколько классов, относящихся к USB: класс KHidMiniDriver (наследник KDriver), класс KHidDevice (наследник KDevice) и класс KUsbLowerDevice (наследник KLowerDevice). Эти классы предоставляют предопределенную функциональность. Конечно же, библиотека DS предоставляет классы для реализации пользовательских USB-интерфейсов.
Объект класса KUsbinterface предоставляет функции для работы с USB-интерфейсами. Драйвер может создавать столько интерфейсов, сколько их описано в дескрипторе конфигурации.
Объект класса KUsbPipe предоставляет функции для работы с конечными точками. Драйвер должен создавать конечные точки только с параметрами, как они описаны в дескрипторе конфигурации. Создание несуществующих конечных точек приведет к краху системы.
Принцип работы с этими классами следующий:
? B КОНСТруКТОре Экземпляра KDriver СОЗДаеТСЯ ЭКЗеМПЛЯр Класса KPnpDevice;
Гпава 14. Создание USB-устройства на основе ATMEL АТ89С5131
411
П в конструкторе экземпляра KPnpDevice создаются:
• Экземпляр m_Lower класса KUsbLowerDevice, Предоставляющий Доступ
к функциям низкого уровня;
• один или несколько экземпляров класса интерфейса KUsbinterface;
• при необходимости создаются экземпляры классов конечных точек
KUsbpipe;
О в функции драйвера onstartDevice выполняется активизация одной из
Конфигураций C ПОМОЩЬЮ ВЫЗОВа m_Lower. ActivateConfiguration() ;
О при получении запроса в/в, например, запроса чтения, производятся следующие действия:
• с помощью методов конечной точки создается и инициализируется
Пакет PURB, например, ВЫЗОВОМ BuildBulkTransfer,
BuildControlTransfer ИЛИ BuildlnterruptTransfer;
• созданный запрос передается драйверу нижнего уровня с помощью вызова метода конечной точки submiturb;
• полученные данные (сохраненные в пакете URB) передаются пользовательской программе, инициировавшей запрос.
14.2.2. Другие классы Driver Studio
Для общности приведем несколько классов, которые могут оказаться полезными при разработке драйвера:
О KioRegister — порт в/в. Этот класс позволяет читать и записывать в порт 8, 16, и 32-битные значения;
О KioRange — диапазон адресов в/в. Практически представляет собой массив экземпляров класса KioRegister;
О KMemoryRegister представляет собой отдельную ячейку памяти в адресном пространстве устройства;
О KMemoryRange представляет собой диапазон адресов памяти;
О KEvent — объект синхронизации работы потоков;
О KTimer — объект таймера;
О KSystemThread — класс для создания нового потока в драйвере;
О KList — класс списка;
О KFiie — класс для работы с файлами;
? KUnicode — класс для работы со строками.
412
Часть IV. Создание USB-устройств
14.2.3. Создание шаблона драйвера с помощью Driver Studio
Итак, для создания драйвера все готово. Нажимаем первую кнопку меню...
Шаг 1. Задание имени и пути проекта
На первом шаге создания проекта необходимо задать имя проекта и путь, по которому будут располагаться файлы драйвера (рис. 14.6).
NT/WDM Device Driver Wizard (DriverWorks) - Step 1 of 10
DriverWoriks
Welcome to DiiverWizard!
You are just a tew mouse clicks away from creating a device driver lot Windows NT ot WDM.
Press F1 to get detailed help on any visible dialog
Note: For Windows Эх. short project names (8 characters and less) work best. ':?; ¦
Choose a Project Name and Location:
'*}¦:. Project Name: ;1 'ч'-У;.-~ _____
Location:
E:\ttUSBUestSAT89SATDriver
Hl
DriverStudio Weard Version: 2.6.0 (Build 336) \ /; Copyright ® 2001 Compuware Corporation. All rights reserved:
Предыдущая << 1 .. 122 123 124 125 126 127 < 128 > 129 130 131 132 133 134 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100