![]() |
|
![]() ![]() ![]() |
|
ISerg1986 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Решил начать новую тему. Буду задавать свои вопросы тут, по мере их появления. Надеюсь, что тема будет многим полезна т.к. в сети крайне мало информации по работе с libusb.
А на русском всего пару статей. Сейчас я пытаюсь написать простейшую программу, для работы с USB устройством, используя libusb. Ну и попутно, лучше разобраться в Qt. Из предыдущей темы Ни то, ни то. Судя по ошибке "undefined reference" компилятор уже закончил работу, а ошибку выдал линковщик, который не видит библиотеки libusb. Для того, чтобы он увидел добавь в .pro файл следующее
Если тебе не нужна кроссплатформенность, и нужен только linux, то можешь добавить просто
Вы написали libusb.lib. Но в архиве http://www.libusb.org/ (libusb-1.0.9 (2012-04-20)) такой библиотеки нет. Есть файлы с расширениями in, sub, ac, c, h, rc, def. Файлов с расширением lib нет. Может я не оттуда качал? |
||||
|
|||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
ISerg1986, Для начала укажи ОС. К сожалению, кроссплатформенность не распространяется на библиотеки - только на исходники.
Всё правильно. Ты скачал исходники. Теперь их нужно скомпилировать в библиотеку (linux way). Если у тебя linux, то перейди в каталог, в который ты распаковал архив и набери
Если Windows - то в подкаталоге msvc есть проекты для 6-й, 2005-й и 2010-й студии. Открывай их и компилируй. А чем официальная документация не устраивает ? Зачем на русском ? Учи английский. Без этого в программировании делать просто нечего. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
ISerg1986 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Очень мало примеров для новичков. Хотелось бы увидеть пошаговую статью. А английский я знаю, причём довольно не плохо. И технический тоже. 4 года спецкурсов.
Сделал. Получил библиотеку. Подключил. Но посыпались ошибки ( ![]() Это сообщение отредактировал(а) ISerg1986 - 14.1.2014, 12:34 |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Кажется ясно.
Дело в том, что линковщик MinGW (а именно его запускает QtCreator) не понимает формата библиотек MSVC. Тебе нужно собрать libusb при помощи MinGW. Как именно сейчас не подскажу (я не знаю, и сейчас нет времени). Погугли "MinGW libusb" или "MinGW howto link library from linux configure make" или наподобие -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Эмм..
Вообще то в Windows есть стандартный драйвер WinUSB который позволяет работать с USB девайсами (гугл в помощь). Но с ограничением: невозможно иметь доступ к изохронным конечным точкам (по крайней мере вроде бы в Windows 8.1 это можно - там добавили эту фичу). И не нужно ничего компилить и libusb вообще не нужен (т.е. не удивлюсь если libusb работает через winusb, но я не уверен, нужно глянуть сорцы)... В Linux же достаточно установить пакет libusb из репозиториев.. и также не нужно ничего компилировать. Еще 5 копеек: работать с USB через libusb - это не очень хорошая идея, потому что большие накладные расходы и пр. фейлы. Это годится только для чего нить простого.. Для серьезных вещей лучше всего сделать собственный драйвер и работать через него. Это сообщение отредактировал(а) kuzulis - 14.1.2014, 15:55 |
|||
|
||||
ISerg1986 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Конечно, не хорошо "скакать" с одной ОС на другую, но всё же...
Ради эксперимента перенёс проект на Linux Debian. Добавил LIBS += -L/usr/local/lib -llibusb Снова ошибка ( не может найти llibusb Вы уверены в правильности написанного вами пути? Там, вроде, ничего нет. Но в установке/удалении программ этот пакет (пакеты) установлены. Или следует скачать и установить deb пакет вручную? (http://packages.debian.org/ru/sid/i386/libusb-1.0-0/download) Путь пробовал менять на /usr/local/lib -llibusb (ну а вдруг), не помогло. ![]()
Я новичек. Мне до драйвера-как до Луны. Хоть бы это заработало )
Хочется просто, быстро и на Линукс. В идеале. Но и на Виндовс тоже интересно. Вот и выбрал libusb. Это сообщение отредактировал(а) ISerg1986 - 14.1.2014, 16:13 |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Абсолютно не уверен т.к. 1) Линукса вообще не знаю 2) Насколько, всё же, я знаю, в разных линуксах оно может лежать в разных местах и в проекте нужно писать не полный путь, а через переменную окружения (что-то типа $$LIBS или $$LIBPATH) 3) Опять же - предположение - у тебя установлен не SDK для libusb, а сама dll-ка (ну... so-шка в линуксе). Тебе же нужен пакет для разработчиков (SDK). Что-то типа libusb-dev -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Жаль. Буду пробовать методом научного тыка. Команда sudo apt-get install libusb-dev говорит, что "Уже установлена самая новая версия libusb-dev". |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Для Linux ключ -L указывать не надо, если библиотека поставляется разработчиком дистрибутива (твой случай), находится в стандартном месте или указан полный путь к ней. Ключу же -l нужно передавать только часть названия библиотеки - без приставки lib и всех расширений. В твоем случае должно выглядеть так: LIBS += -lusb
Добавлено через 2 минуты и 40 секунд
|
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
||||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Исправил. Ошибка http://s017.radikal.ru/i435/1401/a9/cd42bb054bc8.jpg Дело в том, что линковщик GCC не понимает формата библиотек? Следует сменить линковщик? http://i023.radikal.ru/1401/0a/afc11a3bd458.jpg
Ок. Я это делал для удобства. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
ISerg1986, на приведенном тобой скриншоте всего лишь есть ошибка отсутствия функции libusb_init, а не неверного формата библиотеки. Неверный формат бывает тогда, когда ты пытаешься прилинковать 32-х битную библиотеку к 64-х битной программе.
|
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
||||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
1) Зачем Вам библиотеки в /usr/local? libusb ужэ много лет лежыт во всех дистрибутивах линукса.
Если Вы не девелопер библиотеки libusb или хотя бы не экспериментируете с экспериментальными возможностями библиотеки -- то берите дистрибутивный вариант. 2) Указания на самые базовые примеры идут с оригинальной документацыей. libusb developers guide, раздел IV называется "Examples". |
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Мне так посоветовали прописать путь. Сейчас изменил на LIBS += -lusb
Там совсем немного. http://libusb.sourceforge.net/doc/examples-code.html Я пытаюсь сделать следующее. http://clck.ru/92UeH Считать данные с устройства, зная vid и pid. Но на первой-же команде "libusb_init(NULL);", возникает ошибка. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Ты используешь версию библиотеки 1.0. Она несовместима с 0.1, которая у тебя установлена в системе. Тебе необходимо установить пакет libusb-1.0.0-dev. А библиотеку задавать так: LIBS += -lusb-1.0
|
|||
|
||||
tzirechnoy |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Как раз на следующей страницэ указано, где взять пример, который можэт просканировать все устройства и прочитать их дескрипторы (включая vid/pic/class/etc )
Как несложно заметить, в примере -- usb_init(), а не libusb_init(). Впрочем, действительно есть у libusb такая проблема: приличный developers guide -- под libusb-0.1, а сейчас типа стабильная версия -- libusb-1.0 Я бы для начала посоветовал именно на -0.1 и разрабатывать -- ну, она вполне работает, притом написано под неё большэ и кода и документацыи. Да, в Debian они присутствуют обе, -0.1 -- под именем просто libusb, а -1.0 -- под именем libusb-1.0 и libusb-1.0-0-dev. И собирать под -1.0 надо с -lusb-1.0 |
||||
|
|||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Спасибо, bsa за ваш ответ. Правда я это уже сделал раньше. Кроме того, до установки libusb-1.0.0-dev, мне пришлось поудалять всё, установленное из репозиториев. А я считал, что лучше всё ставить оттуда. Теперь команда libusb_init(NULL); не выдаёт ошибки. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
|
|||
|
||||
ISerg1986 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Ну не знаю. Я всё поставил - ничего не работало. Всё удалил, поставил вручную - заработало. Правда теперь не знаю что делать. ![]() В примере приводят вот такой код
А это мой код
У меня посылка составляет 64 байта. EP_IN=0x00 -точка входа, но я не уверен т.к. до конца не понимаю что это &ret - непонятно что это Пишет ошибку &ret was not declared in this scope. Смотрю функцию libusb_interrupt_transfer (libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int lenght, int actual_lenght, unsigned int timeout) Понимаю это так Смотрю функцию libusb_interrupt_transfer (экземпляр(обработчик?) устройства, конечная точка чтения,размер читаемого буфера, размер данных, размер данных, период повторения чтения(пауза?) ) |
||||
|
|||||
tzirechnoy |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Прочитайте описание протокола USB. Да, это очень тяжёлое чтение довольно глупого документа -- но без этого достаточно безсмысленно пытаться самому написать обмен по USB -- хоть в драйвере хоть в устройстве. Кстати, насколько я помню, вроде бы endpoint 0 зарезервировано для control transfers. И почему-то input/output endpoints начинаются с 1 (хотя вроде ничего не мешает и по 0 передать interrupt transfer).
Так ret должна быть твоей переменной. Вообще, это очевидно для сишника: всё, что не описано как константы, переменные или функцыи библиотеки -- это твои переменные.
Нет, Вы в корне неправильно понимаете, а как правильно -- описано в документацыи. Кстати, у Вас опечатка дажэ при копировании прототипа функцыи. |
||||||
|
|||||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Оставил эту функцию (libusb_interrupt_transfer) пока в покое. Не всё понимаю - трогать пока не буду
![]() А в этой libusb_open_device_with_vid_pid(NULL, DEV_VID, DEV_PID); ошибиться уже сложно. Пытаюсь найти (открыть) устройство, зная его VID и PID. ![]() ![]() Мой код
Результат - программа завершилась с кодом 1. То есть return 1 - не видит устройство. VID 0x0483, PID 0x3748 - вроде правильные. В линуксе устройство видно. Других ошибок нет. Вывод компилятора -всё ок Process /usr/bin/make exited normaly. Я правильно указал VID и PID? Это сообщение отредактировал(а) ISerg1986 - 26.1.2014, 20:19 |
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
А ты сначала проверь что возвращает libusb_init(), затем посмотри исходники утилиты QStLink (о которой ты писал на другом форуме), проверь права доступа и пр. Если ничего не выйдет - значит не судьба, брось это.
![]() |
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Посмотрю, хотя странно всё это. Я уже систему переустановил - Линукс Дебиан последней версии, поставил только необходимые пакеты. QT из репозитория. Всё "чистое", по инструкции -а не работает ![]() Можно, но это в крайнем случае. В самом крайнем есть рабочий(? поверю на слово) проект для eclipse, но ведь тут речь про QT? Проверял. Я и так дал пользователю привилегии рута, и через судо запускал. Похоже, что дело не в правах. Так не интересно. Надо довести эксперимент до логического финала. |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
УМВР -- ну, после того, как удалил обе ссылки на mainwindow, который Вы не привели. В смысле -- возвращает 2.
Так что проверяйте детали: что запускаете от рута, что собирается именно ваш проект, что он вообще пересобирается (удалите бинарник), что вы код возврата правильно читаете. |
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Похоже, понял в чём дело. Я не правильно указал VID и PID. Заместо 0х там был другой символ - не русская х, а что-то другое(?). Дело в кодировке.
Заработало. Код завершения 0. Но выдаёт странные ошибки в Aplication Output во время работы т.к. непонятно что происходит. А именно - неизвестно, что это за "точка" EP_IN 0x81 и какое у меня должно быть её значение. ![]() Код
|
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Переподключил устройство - нашлось ещё несколько usb
![]() Пытаюсь подключится к 0xffff 0xbad Выдаёт ошибку permission denied. Нет прав доступа к устройству. Причём к 002 033. Добавил правила ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="0bad", MODE="0666" и ещё одно ATTRS{idVendor}=="002", ATTRS{idProduct}=="0bad", MODE="0666" Сделал reload rules - ошибка не исчезла. ![]() Это сообщение отредактировал(а) ISerg1986 - 27.1.2014, 16:51 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
ISerg1986, как у тебя с английским? Что в переводе на русский значит слово "bad"?
![]() |
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
С отличием школа+институт+спецподготовка 4 года+технический английский ![]() Тут bad оно 0xbad т.е обозначение в шестнадцатеричной системе PID устройства. Его так задал мне программист платы. Шина 002 устройство 033 VID 0xffff PID 0xbad. Никакого криминала ![]() Сейчас "грешу" на виртуалку. Похоже что система блокирует порты. Устройство подключено к Windows 7 а там VMWare c Linux. Буду покупать отдельный компьютер подешовке т.к. нужно исключить все глюки и ошибки. А так - что ни система, то новые ошибки. А код то один и тот-же. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
||||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Ну ещё бы. В man udevadm (--reload-rules) -- дажэ описано, почему она не могла от такого исчезнуть. |
|||
|
||||
ISerg1986 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.1.2014 Репутация: нет Всего: нет |
Вы уверены в этом? Просто моя плата "общается" с HIDterminal'ом в Windows. для этого нужно было установить драйверы. Разобрался. Приложение запускается от root. Говорят, что это не есть хорошо. Это сообщение отредактировал(а) ISerg1986 - 7.2.2014, 11:55 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |