реклама на сайте
подробности

 
 
> Нюансы драйверов USB (Windows)
Dr.Alex
сообщение Jun 22 2017, 22:13
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Постараюсь сразу к делу::

Есть WinDriver.
Работает так (в моём понимании):
При инициализации я задаю размер буфера для IN пакетов, он может быть хоть гигабайт.
Ядрёная (kernel) часть драйвера выгребает заданный BULK ендпойнт САМА, без пинков от медленной юзерской программы.
А когда я в юзерской программе делаю чтение, то оно происходит уже из ядрёного буфера.

Есть libusb.
Работает так (в моём понимании):
Когда я вызываю чтение, то только тогда на шине инициируется IN-транзакция. Никаких буферов нет.
Поэтому когда прога работает, а я давлю "обновить" в браузере на каком-нить тяжёлом сайте,
то чтение прекращается на сотню миллисекунд, и не слишком длинный буфер в моём устройстве переполняется.

Вопросы::
- верно ли я понимаю ситуацию?
- может быть я неправильно использую libusb?
- может быть надо использовать libusbK или ещё что? Пробовать все существующие дрова самому в облом.

Виндрайвер использовать не хочется.
Хоть он и хорошо работает, но у юзеров инсталится и деинсталится с проблемами.
Тот же libusb в этом смысле образцовый.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dr.Alex
сообщение Jun 24 2017, 11:45
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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) *
Меньше знать трудно. 1111493779.gif

Но тебе-то удалось.
Go to the top of the page
 
+Quote Post
UniSoft
сообщение Jun 24 2017, 12:45
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jun 24 2017, 13:00
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 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 функции.

Да? Можете предъявить пример такого прожекта, который компилится без сдк и без выдранного из него мусора, если даже в доке на винусб об этом сказано? Мне не удалось.

Да и вообще проблема не в этих мелочах.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 18:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016