это называется драйвер-фильтр.
ставится между двумя драйверами (например драйвером шины и драйвером функционального устройства) и фильтрует все пакеты.
честно говоря сам такие никогда не писал...так что навскидку не подскажу.
а вообще если у вас есть исходный код Сайпресовского драйвера - логичнее будет переделать прям его. впрочем вопрос насколько он различается с тем, что вы уже используете.
если там кроме Bulk режима ничего не надо - может имеет смысл написать свой драйвер?)
Я использую CyUSB.sys от Cypress. Это коммерческий драйвер, но позволяется использовать его бесплатно при условии применения их же микросхемы. Однако, исходного текста этого драйвера нет.
А режим работы у нас только Bulk.
PS а к аппаратномоу прерыванию подключатася не надо) это совершенно лишнее) да и гемороя больше.
Да, я тоже подумал, что это "штука коническая" (С) :-) Только мне пока непонятно, как построить алгоритм работы своего драйвера...
PPS да, правда не уверен что фильтр тут поможет... зависит от интерфейса.
в общем я бы наверное переписал свой драйвер.... Bulk - это просто. а вот с чем OHCI кушать - это я не знаю...наверянка он там используется?
если нет - однозначно свой драйвер)
Наверное стоит кроме исходников драйвера ezusbsys.c посмотреть еще и примеры из DDK, верно?
В принципе мне представляется, что мой драйвер должен работать примерно так:
1. При запуске приложения драйвер инициализируется и запускает внутренний поток на считывание входных пакетов (с помощью PsCreateSystemThread). Для хранения поступающих данных заводятся два буфера (мне нужно сортировать входящие пакеты на две группы). Буфера - двойные: один заполняется, другой отдается приложению.
2. Поток постоянно клянчит у нижестоящего драйвера очередной пакет. Поток просматривает каждый полученный пакет и помещает его в один из двух буферов хранения (т.е. входные пакеты сортируются по двум группам).
3. Когда в одной или другой группе накапливается необходимое число пакетов, поток вырабатывает Event, уведомляющий приложение о готовности входных данных. При этом драйвер переключается на накопление следующего буфера, пока приложение будет читать заполненный.
4. Приложение получает один из Event'ов и читает требуемые данные обычной командой чтения данных.
5. По завершению приложения все ресурсы освобождаются.
Я правильно понимаю примерный порядок действий? Ведь с помощью потока считывания я смогу избежать использования аппаратных прерываний?