Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

У кого опыт driver development есть, помогите!   Найти похожие ветки 

 
Ega23 ©   (2004-03-29 14:25) [0]

А то каша какая-то в голове образовалась.
Вводная:
Имеестя некое USB-устройство (конкретно - считыватель магнитных карт). Нужно с него читать буфер.
Это, собственно, вся задача.
Проблема:
Непонятны некоторые идеологические моменты.
1. Этот драйвер должен быть обязательно PnP, или нет?
2. Насколько я понимаю, при включении устройства, оно (устройство) генерит Device Descriptor и посылает его системе. Опять же, насколько я понимаю, драйвер в этот момент находится в стеке драйверов и у него уже должна быть прописана реакция на данный дескриптор. Вопрос: где этот дескриптор прописывается? В AddDevice процедуре?


 
Ihor Osov'yak ©   (2004-03-29 18:12) [1]

1. Для usb - да.
2. На момент подключения устройства драйвер может быть не загружен. Момент подключения устройства должен распознать драйвер шины (в данном случае - хост юсб контроллер, по Device Descriptor он (более корректно – vendor ID and device ID) определяет, зарегистрирован ли в системе соотв. драйвер (регистрация делается при установке драйвера). Если зарегистрирован - начинает загрузку его, если еще не был загружен. Если не зарегистрирован – то инициализируется процесс установки нового драйвера.  ЮСБ устройства они умные, и кроме vendor ID and device ID должны сказать, как их зовут, чтобы пользователю в процессе установки система могла дать вразумительное сообщение с именем устройства.

.  Собственно "привязка" драйвера к соотв. дескриптору - задача времени установки драйвера. Более конкретно ответить не могу, так как работал только с наследоваными драйверами, и то на уровне начинающего, PNP и USB немного читал...
Зы  В WDM модели (если PNP – то WDM однозначно)  AddDevice вызывается тогда, когда соотв. драйвер шины обнаруживает подключение или включение соотв. устройства. Основная задача  AddDevice – подключение к стеку устройства, и в случае необходимости – создание символического имени.  Вот с этим символическим именем Вы и будете работать из win32 программы.


 
Ihor Osov'yak ©   (2004-03-29 18:18) [2]

зы
> Зы  В WDM модели ... AddDevice вызывается тогда, когда соотв. драйвер шины обнаруживает подключение или включение соотв. устройства

естественно, если загрузка драйвера произошла упешно...
Вообще-то, DDK читать - это не гири пилить... (моментами похлеще :-()


 
Ega23 ©   (2004-03-29 18:32) [3]

Спасибо за ответ, в общем я всё так себе и представлял.
Но вопрос был несколько в другом: есть устройство, оно генерит DevDescriptor, коды этого дескриптора мне известны.
AddDevice регистрирует драйвер в стеке драйверов и создаёт образ устройства. Так вот, где именно мне надо задать реакцию на DevDescriptor, т.е. прописать, что VendorID=1, DeviceID=2 и т.п.
Может это какая-то функция, может где-то структуру эту надо прописать. Действительно DDK читать - это не гири пилить...
Насколько я понимаю, когда драйвер запущен и находится в стеке драйверов, он должен вызываться ПО КОНКРЕТНОМУ DevDescriptor"у.
Так вот где именно его прописывать?


 
Ihor Osov'yak ©   (2004-03-29 19:03) [4]

Не совсем так. Да и реплику Вашу я не совсем понял. Но попытаюсь вокруг да около, может немного подскажу..

Во первых, что такое "вызываться"?
Если имеется ввиду через операции ввода вывода с win32 задач (fileread, filewrite, DeviceIOControl), то это уже после открытия символического имени через CreateFile. Символическое имя, как правило, создается в том же AddDevice для pnp или DriveEntry для наследовыных.. На это уже завершение песни. А начало - это тогда, собствено драйвер грузится. Этот вопрос в компетенции менеджера ввода вывода и драйвера соотв. шины (драйвер шины распознает факт подключения устройства). Задача разработчика драйвера - создать скрипт inf файл или программу инсталяции, которые учат менеджер ввода-вывода делать соотв. связку. То есть задача "сопоставления" - это не дело кода драйвера..

Если имеется ввиду под "вызовом" - реакция на соотв. аппаратные прерывания - то это в случае с драйверами для юсб устройств - немного не так. Для шины USB нестоящего механизма прерываний не предусмотрено. Разработчикам  драйверов юсб устройст следует использовать интерфейс к системным вдм драйверам. Снова более конкретно не могу - это за пределами моих интересов на настоящий момент времени.

Зы. В принцыпе, вполне возможно для решения конкретной задачи и не нужно создавать лрайвер режима ядра - так как в win 32 существуют некий набор функций для работы с usb. Вот только можно ли с их помощью организовать обмен данными - не уверен.  Это снова не моя область.

Зы2. Поспрашивайте в более тематически подходящих конференциях. Но поначалу почитайте еще белетристику - ибо, кажется, в этом вопросе у Вас еще большая каша в голове, чем у меня.


 
Ega23 ©   (2004-03-30 10:03) [5]

Спасибо за ответ, всё так как я и предпологал.
Это как собака - всё понимаю, но объяснить не могу :-))



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
14-1079985969
Andreykom
2004-03-22 23:06
2004.04.25
Memory


1-1081334577
}|{yk
2004-04-07 14:42
2004.04.25
Об интернационализации


7-1077888718
AlexNx
2004-02-27 16:31
2004.04.25
Активность главного меню


14-1080818393
Sergo
2004-04-01 15:19
2004.04.25
Рассылка по доскам объявлений


1-1081415231
Vovas
2004-04-08 13:07
2004.04.25
Как привести форму-предок к типу формы-потомка?