Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 136

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

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 130 131 132 133 134 135 < 136 > 137 138 139 140 141 142 .. 168 >> Следующая

If Driver.Open(SpinEditl.Value) then MessageDlg('Драйвер открыт успешно',
mtConfirmation, [mbOK], 0) else MessageDlg('Ошибка открытия драйвера',
mtError, [mbOK], 0); end;
// Закрытие драйвера
procedure TForml.btnCloseClick(Sender: TObj ect); begin Driver.Close;
end;
// Выполнение DeviceloControl($800)
procedure TForml.btnFunclClick(Sender: TObject);
begin
EOutput.Text: = IntToStr (Driver.Fund); end;
// Чтение данных
procedure TForml.ButtonlClick(Sender: TObject); begin
EOutput.Text:= Driver.Read; end;
438
Часть IV. Создание USB-устройств
| I bugView on \\H0ME (local) bfie!
Pile Edit Capture Options Computer Help
|lc$esi 4|3-Hi?i & & t Ъ 1 ^ f !
19 19 19 19 19 19 19 19 19 19 19
шНЮШ
12 19
0
1 2
3
4
5
6
7
8
9
10
¦Загрузить
Открыть
Выгрузить
START 1HD lRT
ze=4096
Закрыть
FUNC (800Н)
Read
13
14
15
16
17
18
19
20 21 22
23
24
25
19
19
19
19
19
19
19
19
19
19
19
19
19
|37 25 52 54 55 56 57 58
46:57 ATDriverDevice::Read START
46:57 READ: Requested18 MaxSize=4096
46:57 Read SUCCESS 8 bytes
46:57 55
46:57 37
46:57 82
46:57 84
46:57 85
46:57 86
46:57 87
46:57 88
46:57 ATDriverDevice::Read EHD
Рис. 14.24. Результат чтения данных с USB-устройства
14.2.9. Чтение данных с конечных точек других типов
В предыдущем разделе мы пользовались конечной точкой типа interrupt. При
необходимости можно легко заменить тип конечной точки. Листинг 14.10
показывает константы для дескриптора конфигурации конечной точки типа
bulk, а листинг 14.11 - изменения в коде драйвера.
Пстинг. 14.10. Константы для конечной точки типа bulk
. /. .. ' ' V. . ................
/* первая конечная точка */
•define EP_l_CONFIG (BULK|EP_CONFIG_IN) /* конфигурация */
•define EP_1_ADDRESS (1|EP_DIRECT_IN). /* адрес */
•define ЕР 1 ATTRIBUTES BULK /* атрибуты */
Глава 14. Создание и В-устроиства на основе AT ELAT89C5131
439
Листинг 14.11. Изменение в коде драйвера для чтения конечной точк
гипа j
NTSTATUS ATDriverDevice::Read(KIrp I) <
PURB pUrb - m_EndpointlIN.BuildBulkTransfer( pBuffer, // Буфер
dwTotalSize, // Сколько байт читать
TRUE, II Направление (TRUE - IN)
NULL,
FALSE, // Разрешить короткие чтения
NULL
);
pU rb->U rbBulkOrInte rruptTrans fe r.TransferFlags -
(USBD TRANSFER DIRECTION IN | USBD SHORT_TRANSFER_OK);
dwBytesRead = pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;
}
Для использования конечных точек типа control достаточно изменить метод
формирования пакета запроса:
PURB pUrb = m_EndpointlIN.BuildControlTransfer( pBuffer, // Буфер
dwTotalSize, // Сколько данных читать?
TRUE // Направление (TRUE - IN)
);
14.2.10. "Чистый" USB-драйвер
Использование Driver Studio избавило нас от множества рутинной работы,
однако не стоит забывать, что эта программа стоит довольно существенных
денег, в то время как использование Windows DDK доступно всем
разработчикам.
Основную структуру WDM-драйвера мы уже описали в главе 9. В этом разделе
мы приведем схему разработки такого драйвера для шины USB.
Общий "план" драйвера показан на рис. 14.25.
440
Часть IV. Создание USB-устройств
DriverEntry
MinorFunction
DriverObject->MajorFunction[IRP_MJ_PNP] = OnDispatchPnp - DriverObject-
>MajorFunction{IRP_MJ_CREATE] = OnCreate
DrivefObject*>MajorFunction[IRP_MJ_CLOSE] = OnClose D riverObject->
MajorF unctionfIR P_MJ_READ] = OnDevlceRead DriverOb|ect*>DriverUnload =
OnUnload DriverObject->DriverExtension->AddDevice = OnAddDevice
DnvecObiect*>MajorFunction[lRP_MJ_POWERl = OnDispatchPower
IRP_MN_START_DEVICE: OnstartDevice IRP_MN"STOP_DEVICE: OnStopDevice
IRP_MN"REMOVE_DEVICE: OnRemoveDevice
MinorFunction
IRP_MN_SET_POWER
IRP_MN_QUERY_POWER
Рис. 14.25. Общий "план" USB-драйвера
Основными обработчиками драйвера являются:
? DriverEntry - точка входа в драйвер;
? OnAddDevice - вызывается при добавлении нового устройства;
? OnCreate - вызывается при создании устройства;
? Onciose - вызывается при закрытии устройства;
? OnUnload - вызывается при выгрузке драйвера;
? onDispatchPower - диспетчер управления энергопотреблением;
? OnDispatchPnp - диспетчер для обработки командами РпР:
• OnstartDevice - старт устройства;
• OnStopDevice - останов устройства;
• OnRemoveDevice - удаление устройства;
? OnDeviceRead - вызывается При обработке функции ReadFile.
Регистрация ОСНОВНЫХ обработчиков производится В Процедуре DriverEntry
(листинг 14.12).
NTSTATUS DriverEntry(
IN PDRIVERjOBJECT DriverObject,
IN PUNICODE_STRING RegiatryPath . )
{
NTSTATUS ntstatus - STATUS SUCCESS;
Глава 14. Создание USB-устройства на основе ATMEL АТ89С5131
441
11 Основные обработчики драйвера
DriverObj ect->Maj orFunction[IRP_MJ_CREATE]= OnCreate ;
DriverObject->MajorFunction[IRP_MJ_CLOSE ]= OnClose;
DriverObject->MajorFunction[IRP_MJ_READ ]= OnDeviceRead;
DriverObject->MajorFunction[IRP_MJ_PNP ]= OnDispatchPnp;
DriverObject->MajorFunction[IRP_MJ_POWER ]= OnDispatchPower;
DriverObject->DriverUnload = OnUnload;
DriverObject->DriverExtension->AddDevice = OnAddDevice;
Предыдущая << 1 .. 130 131 132 133 134 135 < 136 > 137 138 139 140 141 142 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.