|
Нюансы драйверов USB (Windows) |
|
|
|
Jun 22 2017, 22:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Постараюсь сразу к делу::
Есть WinDriver. Работает так (в моём понимании): При инициализации я задаю размер буфера для IN пакетов, он может быть хоть гигабайт. Ядрёная (kernel) часть драйвера выгребает заданный BULK ендпойнт САМА, без пинков от медленной юзерской программы. А когда я в юзерской программе делаю чтение, то оно происходит уже из ядрёного буфера.
Есть libusb. Работает так (в моём понимании): Когда я вызываю чтение, то только тогда на шине инициируется IN-транзакция. Никаких буферов нет. Поэтому когда прога работает, а я давлю "обновить" в браузере на каком-нить тяжёлом сайте, то чтение прекращается на сотню миллисекунд, и не слишком длинный буфер в моём устройстве переполняется.
Вопросы:: - верно ли я понимаю ситуацию? - может быть я неправильно использую libusb? - может быть надо использовать libusbK или ещё что? Пробовать все существующие дрова самому в облом.
Виндрайвер использовать не хочется. Хоть он и хорошо работает, но у юзеров инсталится и деинсталится с проблемами. Тот же libusb в этом смысле образцовый.
|
|
|
|
|
 |
Ответов
|
Jun 24 2017, 11:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(Raven @ Jun 24 2017, 10:34)  Раз уж речь идет о USB в Windows, то почему у вас не фигурирует WinUSB (как Microsoft'овский аналог libusb, родной для OS)? OpenOCD, например, уже давно на него перешел для сборок под Windows/Cygwin. Как-то неудобно было даже упоминать его. Пробовал. Такой же примитив, как libusb, с той же проблемой что я описал, только ещё хуже. К тому же, нельзя подключить одновременно более одного устройства.А ещё libusb удобнее компилить, для WinUSB же нужно или SDK ставить, или массу всякого SDKшного мусора к себе в прожект перетаскивать. Визард у libusb удобный, опять же. Кароче, о юзере-то позаботились, тока вот драйвер нормальный написать не смогли. Тем же СвинДрайвером пользоваться гораздо НЕудобнее, но данные качает он так что от зубов отскакивает. Цитата(Olej @ Jun 24 2017, 11:06)  Меньше знать трудно.  Но тебе-то удалось.
|
|
|
|
|
Jun 24 2017, 12:45
|

Участник

Группа: Свой
Сообщений: 68
Регистрация: 7-05-05
Из: China, Shenzhen
Пользователь №: 4 812

|
Цитата(Dr.Alex @ Jun 24 2017, 19:45)  К тому же, нельзя подключить одновременно более одного устройства. Ну это не так! Подключать можно много устройств и со всеми можно работать... Ограничение лишь в монопольном доступе, т.е. только одно приложение сможет открыть устройство и работать с ним, в момент времени. А если устройство еще и WCID, то и дровишки будут автоматически устанавливаться. В win7 драйвер поставится c сервера обновлений (при наличии сети), а в win10 он уже встроен, и даже подписывать драйвер не требуется. Цитата(Dr.Alex @ Jun 24 2017, 19:45)  для WinUSB же нужно или SDK ставить, или массу всякого SDKшного мусора к себе в прожект перетаскивать. Ну это тоже не так, вся работа заключена в одной winusb.dll Если линковать статически, то да, нужен будет *.lib файл из SDK (хотя его можно и сгенерить самому). Никакого мусора в проект там не перетаскивается, чистые winAPI функции. Ну и немного добавлю про libusbОна добавляет куда больше мусора в проект ибо является надстройкой над WinUsb
|
|
|
|
|
Jun 24 2017, 13:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(UniSoft @ Jun 24 2017, 15:45)  Ну это не так! Ограничение лишь в монопольном доступе, т.е. только одно приложение сможет открыть устройство и работать с ним, в момент времени. Но именно это нормальный человек и подразумевает под одновременным подключением. Цитата(UniSoft @ Jun 24 2017, 15:45)  и даже подписывать драйвер не требуется. Ну и не верно. Нужно подписывать. Если только вы не взяли уже подписанный cat от другого устройства и заюзали его с его же видом-пидом и всем остальным. Цитата(UniSoft @ Jun 24 2017, 15:45)  Ну это тоже не так, вся работа заключена в одной winusb.dll Если линковать статически, то да, нужен будет *.lib файл из SDK (хотя его можно и сгенерить самому). Никакого мусора в проект там не перетаскивается, чистые winAPI функции. Да? Можете предъявить пример такого прожекта, который компилится без сдк и без выдранного из него мусора, если даже в доке на винусб об этом сказано? Мне не удалось. Да и вообще проблема не в этих мелочах.
|
|
|
|
|
Jun 24 2017, 13:38
|

Участник

Группа: Свой
Сообщений: 68
Регистрация: 7-05-05
Из: China, Shenzhen
Пользователь №: 4 812

|
Цитата(Dr.Alex @ Jun 24 2017, 21:00)  Но именно это нормальный человек и подразумевает под одновременным подключением. Я не могу даже представить тип устройства, где нужен именно одновременный доступ с разных приложений... Но если где это и нужно, то можно легко это обойти, при желании... Ну что-нибудь типа приложения сервера/службы, все равно же в таких устройствах нужен будет какой-то тип синхронизации, между приложениями, которые общаются с устройством. Цитата(Dr.Alex @ Jun 24 2017, 21:00)  Ну и не верно. Нужно подписывать. Если только вы не взяли уже подписанный cat от другого устройства и заюзали его с его же видом-пидом и всем остальным. Но у меня же работает (со своими VID-PID!), причем коммерческий проект... все дело в WCIDЦитата(Dr.Alex @ Jun 24 2017, 21:00)  Да? Можете предъявить пример такого прожекта, который компилится без сдк и без выдранного из него мусора, если даже в доке на винусб об этом сказано? Мне не удалось. Откройте исходник libusb, в чем проблема? libusb-1.0.21.zip\libusb-1.0.21\libusb\os\windows_winusb.c; windows_winusb.h пожалуйста, динамическая линковка winusb, так что даже родной winusb.lib не нужен... а в windows_winusb.h определение функций и структур, так что даже родной winusb.h не нужен...
|
|
|
|
Сообщений в этой теме
Dr.Alex Нюансы драйверов USB (Windows) Jun 22 2017, 22:13 gerber Цитата(Dr.Alex @ Jun 23 2017, 01:13) Есть... Jun 22 2017, 23:55 Dr.Alex Цитата(gerber @ Jun 23 2017, 02:55) Если ... Jun 23 2017, 00:31  Olej Цитата(Dr.Alex @ Jun 23 2017, 03:31) Може... Jun 23 2017, 20:58   Dr.Alex Цитата(Olej @ Jun 23 2017, 23:58) libusb ... Jun 23 2017, 23:06    Olej Цитата(Dr.Alex @ Jun 24 2017, 02:06) Рыбя... Jun 24 2017, 08:06 Raven Раз уж речь идет о USB в Windows, то почему у вас ... Jun 24 2017, 07:34    Dr.Alex Цитата(UniSoft @ Jun 24 2017, 16:38) Но у... Jun 24 2017, 14:02     UniSoft Цитата(Dr.Alex @ Jun 24 2017, 22:02) То е... Jun 24 2017, 14:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|