Форум: "Потрепаться";
Текущий архив: 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.037 c