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

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

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

>bDeviceSubClass); Ох%х", deviceDescriptor->bDeviceProtocol); Ох%х",
deviceDescriptor->bMaxPacketSizeO); Ox%x", deviceDescriptor->idVendor);
Ox%x", deviceDescriptor->idProduct);
Ox%x", deviceDescriptor->bcdDevice);
Ox%x", deviceDescriptor->iManufacturer); Ox%x", deviceDescriptor-
>iProduct);
Ox%x", deviceDescriptor->iSerialNumber);
Глава 14. Создание USB7ycTpoHcTBa на основе ATMEL АТ89С5131 451
liTSTATUS
OnConfigureDevice(
IN PDEVICE_OBJECT fdo
)
{
PDEVICE_EXTENSION pdx;
NTSTATUS ntstatus;
PURB urb = NULL;
ULONG size;
PUSB_CONFIGURATION_DESCRXPTOR configurationDescriptor = NULL; UCHAR
alternateSetting, MylnterfaceNumber; PUSBD_INTERFACE_INFORMATION
interfaceObject; USBD_INTERFACE_LIST_ENTRY interfaceList;
pdx = fdo->DeviceExtension;
// Память для URB urb = ExAllocatePool(NonPagedPool,
sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));
// Получить только дескриптор конфигурации size =
sizeof(USB_CONFIGURATION_DESCRIPTOR) + 16; configurationDescriptor =
ExAllocatePool(NonPagedPool, size);
UsbBuildGetDescriptorRequest(urb,
(USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_CONFXGURATION_DESCRIPTOR_TYPE,
0, 0,
configurationDescriptor,
NULL,
sizeof (USB_CONFIGURATION_DESCRIPTOR),
NULL
);
ntstatus = DoCallUSBD(fdo, urb);
452
Часть IV. Создание USB-устройств
II Определение нужного размера буфера size = configurationDescriptor-
>wTotalLength + 16;
// Освободить старый буфер и отвести новый, нужного размера
ExFreePool(configurationDescriptor); configurationDescriptor = NULL;
configurationDescriptor = ExAllocatePool(NonPagedPool, size);
// Получение полного дескриптора конфигурации
UsbBuildGetDescriptorRequest(urb,
(USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
U SB_CON FIGURATION_DESCRIPTOR_TYPE,
0,
0,
configurationDescriptor,
NULL,
size,
NULL
>;
ntStatus = DoCallUSBD(fdo, urb) ;
// Получение конфигурации interfaceList.InterfaceDescriptor =
USBD_ParseConfigurationDescriptorEx( ConfigurationDescriptor,
ConfigurationDescriptor,
-1, -1, -1, -1, -1
>;
// Создание запроса для получения конфигурации urb =
USBD_CreateConfigurationRequestEx(
ConfigurationDescriptor, SinterfaceList
>;
// Получение указателя на буфер описания интерфейса interfaceObject =
(PUSBD__INTERFACE_INFORMATION)
(&(urb->UrbSelectConfiguration.Interface));
Глава 14. Создание USB-устройства на основе ATMEL AT89CS131
453
II Конфигурирование конечных точек интерфейса for (j=0;
j<interfaceList[0].InterfaceDescriptor->bNumEndpoints; з++)
PUSBD_PIPE_INFORMATION pipe; pipe = &interfaceObject->Pipes[j];
pipe->MaximumTransferSize = 1024; // установить при необходимости
DbgPrint{"PipeType 0x%x\n", pipe->PipeType);
DbgPrint{"EndpointAddress 0x%x\n", pipe ->EndpointAddress);
DbgPrint{"MaxPacketSize 0x%x\n", pipe ->MaximumPacketSize);
DbgPrint{"Interval 0x%x\n", pipe ->Interval);
DbgPrint{"Handle 0x%x\n", pipe ->PipeHandle);
DbgPrint("MaximumTransferSize 0x%x\n", pipe ->MaximumTransferSize);
ntStatus = DoCallOSBD{fdo, urb);
ExFreePool(urb);
ExFreePool(configurationDescriptor); return ntStatus;
)
В обработчике OnstopDevice производится передача запроса
set_configuration с нулевым номером конфигурации, т. е. сброс
конфигурации (листинг 14.21).
NTSTATUS OnStopDevice{
IN PDEVICE_OBJECT fdo )
{
PDEVICE_EXTENSION pdx;
NTSTATUS ntStatus = STATUS_SUCCESS; PURB urb;
ULONG size;
ivxce'
Я
: -Ш
..
pdx = fdo->DeviceExtension;
454
Часть IV. Создание USB-устройств
size= sizeof{struct _URB_SELECT_CONFIGURATION);
urb = ExAllocatePool{NonPagedPool, size); '
if (urb)
{
NTSTATUS status;
UsbBuildSelectConfigurationRequest{urb, (USHORT) size, NULL); status =
DoCallUSBD{fdo, urb);
ExFreePool(urb);
} else {
ntstatus = STATU S_NO_MEMORY;
}
return ntstatus;
}
Обработчик OnRemoveDevice содержит КОД, "обратный" КОДУ OnAddDevice. В
этом обработчике удаляется символьное имя устройства и освобождается
объект устройства (листинг 14.22).
6oT4MK,OnKospveDev^ce - 1 j 1 . _ t v
NTSTATUS OnRemoveDevice{
IN PDEVICE_OBJECT fdo,
IN PIRP Irp )
{
NTSTATUS ntstatus;
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
ULONG i;
WCHAR NameBuffer[] = L"\\Device\\" DEVICE_NAME_STRING;
WCHAR DOSNameBuffer[] = L"\\DosDevices\\" DEVICE_NAME_STRING;
UNICODE_STRING uniNameString, uniDOSString;
// Создание буферов для имен
RtllnitUnicodeString{iuniNameString, NameBuffer);
Глава 14. Создание USB-устройства на основе ATMEL АТ89С5131
455
RtllnitUnicodeStnng (SuniDOSStnng , DOSNameBuffer) ;
I/ Удаление символьного имени драйвера fcitStatus =
ioDeleteSymbolicLink(SumNameString);
JoDetachDevice(pdx->StackDeviceObject);
IoDeieteDevice(fdo);
IoSkipCurrentlrpStackLocation(Irp);
ntStatus = IoCallDriver(pdx->StackDeviceObject, Irp); return ntStatus;
}
Чтение данных производится в обработчике onDeviceRead (листинг 14.23).
NTSTATUS OnDeviceRead(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP plrp )
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PUSBD_PIPE_INFORMATION pipelnfo = NULL;
Предыдущая << 1 .. 133 134 135 136 137 138 < 139 > 140 141 142 143 144 145 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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