Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

У кого опыт 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.032 c
3-1080233227
Avenger[NhT]
2004-03-25 19:47
2004.04.25
Коннект к базе через ODBC драйвер


1-1081091132
er
2004-04-04 19:05
2004.04.25
Алгоритм для составления комбинаций массива.


14-1081240265
icWasya
2004-04-06 12:31
2004.04.25
Goblins.exe


9-1067554824
MrAngel
2003-10-31 02:00
2004.04.25
Написание игры на движке Half-Life 2 - это реальность ?


4-1077311732
Leoton
2004-02-21 00:15
2004.04.25
Помогите советом по DebugAPI и архитектуре Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский