реклама на сайте
подробности

 
 
> Драйвер USB с помощью Driver Studio - несколько Device Object
Sevens
сообщение Sep 16 2006, 22:07
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 5-08-06
Пользователь №: 19 337



Возник такой вопрос, пишу драйвер для USB устройства с помощью книги Агурова. Требуется несколько Device Object, чтобы читать с разных конечных точек, но не знаю, как это сделать. Пробовал так в методе NTSTATUS DV2::AddDevice(PDEVICE_OBJECT Pdo) класса KDriver создаю два экземпляра объекта KPnpDevice:

DV2Device * pDevice = new (
static_cast<PCWSTR>(KUnitizedName(L"DV2Device", m_Unit)),
FILE_DEVICE_UNKNOWN,
static_cast<PCWSTR>(KUnitizedName(L"DV2Device", m_Unit)),
0,
DO_BUFFERED_IO
)
DV2Device(Pdo, m_Unit,1);

if (pDevice == NULL)
{
return STATUS_INSUFFICIENT_RESOURCES;
}

NTSTATUS status = pDevice->ConstructorStatus();

if ( !NT_SUCCESS(status) )
{
delete pDevice;
}
else
{
m_Unit++;
DbgPrint("Unit Number is %d",m_Unit);
}



DV2Device * pDeviceEP = new (
static_cast<PCWSTR>(KUnitizedName(L"DV2DeviceT", m_UnitEP)),
FILE_DEVICE_UNKNOWN,
static_cast<PCWSTR>(KUnitizedName(L"DV2DeviceT", m_UnitEP)),
0,
DO_BUFFERED_IO
)
CandDV2Device(Pdo, m_UnitEP,2);

if (pDeviceEP == NULL)
{
return STATUS_INSUFFICIENT_RESOURCES;
}

status = pDeviceEP->ConstructorStatus();

if ( !NT_SUCCESS(status) )
{
delete pDeviceEP;
}
else
{
m_UnitEP++;
DbgPrint("Unit EP Number is %d",m_UnitEP);
}

В конструкторе класса kPNPDevice есть строки
status = m_Lower.Initialize(this, Pdo);

if (status == STATUS_SUCCESS){
DbgPrint("m_Lower.Initialize OK");
} else {
DbgPrint("ERROR: m_Lower.Initialize");
}
Для DV2Device все нормально, а для DV2DeviceT - ERROR: m_Lower.Initialize

И ещё, метод OnStartDevice вызывается только для DV2Device, а для DV2DeviceT - т.е. он видимо не инициализируется, так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Седой
сообщение Sep 17 2006, 16:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Не обязательно использовать для чтения запрос read, используйте запросы ControlIo - один тип запроса для одной Endpoint.

Что вы понимаете под асинхронным чтением?

PS. Без чтения DDK не создать нормальный драйвер.

Сообщение отредактировал Седой - Sep 17 2006, 16:33
Go to the top of the page
 
+Quote Post
Sevens
сообщение Sep 17 2006, 16:54
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 5-08-06
Пользователь №: 19 337



Цитата(Седой @ Sep 17 2006, 20:23) *
Не обязательно использовать для чтения запрос read, используйте запросы ControlIo - один тип запроса для одной Endpoint.

Что вы понимаете под асинхронным чтением?

PS. Без чтения DDK не создать нормальный драйвер.


На счёт чтения DDK - согласен, просто требуется это не для серьёзной работы.

Под ассинхронным, то что после вызова BuildBulkTransfeк продолжение метода драйвера продолжается сразу, не зависимо от того, было ли произведено чтение или нет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016