Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] Работа с библиотекой libusb, Работа с библиотекой libusb 
:(
    Опции темы
ISerg1986
Дата 14.1.2014, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Решил начать новую тему. Буду задавать свои вопросы тут, по мере их появления. Надеюсь, что тема будет многим полезна т.к. в сети крайне мало информации по работе с libusb.
А на русском всего пару статей.

Сейчас я пытаюсь написать простейшую программу, для работы с USB устройством, используя libusb. Ну и попутно, лучше разобраться в Qt.

Из предыдущей темы
Цитата(ISerg1986 @  13.1.2014,  21:25 Найти цитируемый пост)
Тут проблема в libusb.h или настройках компилятора?

Ни то, ни то.
Судя по ошибке "undefined reference" компилятор уже закончил работу, а ошибку выдал линковщик, который не видит библиотеки libusb. Для того, чтобы он увидел добавь в .pro файл следующее
Код
unix:LIBS += -L/usr/local/lib -llibusb
win32:LIBS += c:/path/to/libs/libusb.lib

Если тебе не нужна кроссплатформенность, и нужен только linux, то можешь добавить просто
Код
LIBS += -L/usr/local/lib -llibusb

Вы написали libusb.lib. Но в архиве http://www.libusb.org/ (libusb-1.0.9 (2012-04-20)) такой библиотеки нет. Есть файлы с расширениями in, sub, ac, c, h, rc, def. Файлов с расширением lib нет.
Может я не оттуда качал?
PM MAIL   Вверх
borisbn
Дата 14.1.2014, 11:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



ISerg1986, Для начала укажи ОС. К сожалению, кроссплатформенность не распространяется на библиотеки - только на исходники.

Цитата(ISerg1986 @  14.1.2014,  11:28 Найти цитируемый пост)
 Есть файлы с расширениями in, sub, ac, c, h, rc, def. Файлов с расширением lib нет.

Всё правильно. Ты скачал исходники. Теперь их нужно скомпилировать в библиотеку (linux way).
Если у тебя linux, то перейди в каталог, в который ты распаковал архив и набери
Код
configure
make
make install

Если Windows - то в подкаталоге msvc есть проекты для 6-й, 2005-й и 2010-й студии. Открывай их и компилируй.


Цитата(ISerg1986 @  14.1.2014,  11:28 Найти цитируемый пост)
А на русском всего пару статей.

А чем официальная документация не устраивает ? Зачем на русском ? Учи английский. Без этого в программировании делать просто нечего.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ISerg1986
Дата 14.1.2014, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата

А чем официальная документация не устраивает ? Зачем на русском ? Учи английский. Без этого в программировании делать просто нечего. 

Очень мало примеров для новичков. Хотелось бы увидеть пошаговую статью.
А английский я знаю, причём довольно не плохо. И технический тоже. 4 года спецкурсов.

Цитата

Если Windows - то в подкаталоге msvc есть проекты для 6-й, 2005-й и 2010-й студии. Открывай их и компилируй.

Сделал. Получил библиотеку. Подключил. Но посыпались ошибки (
user posted image


Это сообщение отредактировал(а) ISerg1986 - 14.1.2014, 12:34
PM MAIL   Вверх
borisbn
Дата 14.1.2014, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Кажется ясно.
Дело в том, что линковщик MinGW (а именно его запускает QtCreator) не понимает формата библиотек MSVC.
Тебе нужно собрать libusb при помощи MinGW. Как именно сейчас не подскажу (я не знаю, и сейчас нет времени).
Погугли "MinGW libusb" или "MinGW howto link library from linux configure make" или наподобие


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
kuzulis
Дата 14.1.2014, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
ISerg1986
Дата 14.1.2014, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 (ну а вдруг), не помогло.

user posted image

Цитата(kuzulis @  14.1.2014,  15:52 Найти цитируемый пост)
Для серьезных вещей лучше всего сделать собственный драйвер и работать через него.   

Я новичек. Мне до драйвера-как до Луны. Хоть бы это заработало )

Цитата(kuzulis @  14.1.2014,  15:52 Найти цитируемый пост)
Вообще то в Windows есть стандартный драйвер WinUSB который позволяет работать с USB девайсами 

Хочется просто, быстро и на Линукс. В идеале. Но и на Виндовс тоже интересно. Вот и выбрал libusb.

Это сообщение отредактировал(а) ISerg1986 - 14.1.2014, 16:13
PM MAIL   Вверх
borisbn
Дата 14.1.2014, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(ISerg1986 @  14.1.2014,  16:08 Найти цитируемый пост)
Вы уверены в правильности написанного вами пути?

Абсолютно не уверен т.к.
1) Линукса вообще не знаю
2) Насколько, всё же, я знаю, в разных линуксах оно может лежать в разных местах и в проекте нужно писать не полный путь, а через переменную окружения (что-то типа $$LIBS или $$LIBPATH)
3) Опять же - предположение - у тебя установлен не SDK для libusb, а сама dll-ка (ну... so-шка в линуксе). Тебе же нужен пакет для разработчиков (SDK). Что-то типа libusb-dev


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ISerg1986
Дата 14.1.2014, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(borisbn @  14.1.2014,  16:15 Найти цитируемый пост)
Абсолютно не уверен т.к.

Жаль. Буду пробовать методом научного тыка.

Цитата(borisbn @  14.1.2014,  16:15 Найти цитируемый пост)
Опять же - предположение - у тебя установлен не SDK для libusb, а сама dll-ка (ну... so-шка в линуксе). Тебе же нужен пакет для разработчиков (SDK). Что-то типа libusb-dev 

Команда sudo apt-get install libusb-dev говорит, что "Уже установлена самая новая версия libusb-dev".
PM MAIL   Вверх
bsa
Дата 14.1.2014, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Для Linux ключ -L указывать не надо, если библиотека поставляется разработчиком дистрибутива (твой случай), находится в стандартном месте или указан полный путь к ней. Ключу же -l нужно передавать только часть названия библиотеки - без приставки lib и всех расширений. В твоем случае должно выглядеть так: LIBS += -lusb

Добавлено через 2 минуты и 40 секунд

 ! 
bsa
пожалуйста не встраивай такие большие картинки, выкладывай их на хостинг и давай ссылки, а то форматирование форума страдает

PM   Вверх
Amp
Дата 14.1.2014, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Цитата(ISerg1986 @  14.1.2014,  16:32 Найти цитируемый пост)
Буду пробовать методом научного тыка.

Предлагаю попробовать методом поиска по файловой системе. Хотя результат будет немного предсказуем.
PM MAIL   Вверх
ISerg1986
Дата 14.1.2014, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(bsa @  14.1.2014,  16:42 Найти цитируемый пост)
В твоем случае должно выглядеть так: LIBS += -lusb

Исправил. Ошибка
http://s017.radikal.ru/i435/1401/a9/cd42bb054bc8.jpg
Дело в том, что линковщик GCC не понимает формата библиотек? Следует сменить линковщик?
http://i023.radikal.ru/1401/0a/afc11a3bd458.jpg

Цитата(bsa @  14.1.2014,  16:42 Найти цитируемый пост)
пожалуйста не встраивай такие большие картинки, выкладывай их на хостинг и давай ссылки, а то форматирование форума страдает

Ок. 
Я это делал для удобства. 

PM MAIL   Вверх
bsa
Дата 14.1.2014, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



ISerg1986, на приведенном тобой скриншоте всего лишь есть ошибка отсутствия функции libusb_init, а не неверного формата библиотеки. Неверный формат бывает тогда, когда ты пытаешься прилинковать 32-х битную библиотеку к 64-х битной программе.
PM   Вверх
ISerg1986
Дата 14.1.2014, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(bsa @  14.1.2014,  17:54 Найти цитируемый пост)
 ошибка отсутствия функции libusb_init

Сейчас, при вводе в Qt " libusb_ " появляется выпадающий список, с множеством функций.
Там есть libusb_init 
Такое может быть, при отсутствии функции  libusb_init? И как это исправить?
PM MAIL   Вверх
tzirechnoy
Дата 14.1.2014, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



1) Зачем Вам библиотеки в /usr/local? libusb ужэ много лет лежыт во всех дистрибутивах линукса.
Если Вы не девелопер библиотеки libusb или хотя бы не экспериментируете с экспериментальными возможностями библиотеки -- то берите дистрибутивный вариант.
2) Указания на самые базовые примеры идут с оригинальной документацыей. 

libusb developers guide, раздел IV называется "Examples".
PM MAIL   Вверх
ISerg1986
Дата 14.1.2014, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  14.1.2014,  19:08 Найти цитируемый пост)
Зачем Вам библиотеки в /usr/local

Мне так посоветовали прописать путь.
Сейчас изменил на LIBS += -lusb

Цитата(tzirechnoy @  14.1.2014,  19:08 Найти цитируемый пост)
Указания на самые базовые примеры идут с оригинальной документацией

Там совсем немного.
http://libusb.sourceforge.net/doc/examples-code.html

Я пытаюсь сделать следующее. 
http://clck.ru/92UeH
Считать данные с устройства, зная vid и pid.

Но на первой-же команде "libusb_init(NULL);", возникает ошибка.
PM MAIL   Вверх
bsa
Дата 14.1.2014, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Ты используешь версию библиотеки 1.0. Она несовместима с 0.1, которая у тебя установлена в системе. Тебе необходимо установить пакет libusb-1.0.0-dev. А библиотеку задавать так: LIBS += -lusb-1.0
PM   Вверх
tzirechnoy
Дата 14.1.2014, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
Считать данные с устройства, зная vid и pid.


Как раз на следующей страницэ указано, где взять пример, который можэт просканировать все устройства и прочитать их дескрипторы (включая vid/pic/class/etc )

Цитата
Но на первой-же команде "libusb_init(NULL);", возникает ошибка. 


Как несложно заметить, в примере -- 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

PM MAIL   Вверх
ISerg1986
Дата 20.1.2014, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(bsa @  14.1.2014,  23:17 Найти цитируемый пост)
Ты используешь версию библиотеки 1.0. Она несовместима с 0.1

Спасибо, bsa за ваш ответ. Правда я это уже сделал раньше. Кроме того, до установки  libusb-1.0.0-dev, мне пришлось поудалять всё, установленное из репозиториев. 
А я считал, что лучше всё ставить оттуда.
Теперь команда libusb_init(NULL); не выдаёт ошибки.
PM MAIL   Вверх
bsa
Дата 20.1.2014, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(ISerg1986 @  20.1.2014,  20:17 Найти цитируемый пост)
Кроме того, до установки  libusb-1.0.0-dev, мне пришлось поудалять всё, установленное из репозиториев. 
А я считал, что лучше всё ставить оттуда.
все лучше ставить из репозиториев. Если же у тебя система не поддерживает данную библиотеку, то тогда можно ставить и из исходников. Но, например, в Ubuntu libusb-1.0.0-dev имеется штатная.

PM   Вверх
ISerg1986
Дата 22.1.2014, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(bsa @  20.1.2014,  19:56 Найти цитируемый пост)
все лучше ставить из репозиториев.

Ну не знаю. Я всё поставил - ничего не работало. Всё удалил, поставил вручную - заработало.

Правда теперь не знаю что делать. smile 


В примере приводят вот такой код
Код

int returned = libusb_interrupt_transfer(handle, EP_IN, buf, DATA_SIZE, &ret, 1000);


А это мой код
Код

unsigned char buf[64];

int returned = libusb_interrupt_transfer(handle, EP_IN, 64, 64, &ret, 1000);
       if (returned >= 0) {
int My_buf=(int)buf[0];
}


У меня посылка составляет 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 (экземпляр(обработчик?) устройства, конечная точка чтения,размер читаемого буфера, размер данных, размер данных,  период повторения чтения(пауза?)  )
PM MAIL   Вверх
tzirechnoy
Дата 22.1.2014, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
EP_IN=0x00 -точка входа, но я не уверен т.к. до конца не понимаю что это


Прочитайте описание протокола USB. Да, это очень тяжёлое чтение довольно глупого документа -- но без этого достаточно безсмысленно пытаться самому написать обмен по USB -- хоть в драйвере хоть в устройстве.
Кстати, насколько я помню, вроде бы endpoint 0 зарезервировано для control transfers. И почему-то input/output endpoints начинаются с 1 (хотя вроде ничего не мешает и по 0 передать interrupt transfer).

Цитата
Пишет ошибку &ret was not declared in this scope.


Так ret должна быть твоей переменной. Вообще, это очевидно для сишника: всё, что не описано как константы, переменные или функцыи библиотеки -- это твои переменные.

Цитата
Понимаю это так


Нет, Вы в корне неправильно понимаете, а как правильно -- описано в документацыи. Кстати, у Вас опечатка дажэ при копировании прототипа функцыи. 
PM MAIL   Вверх
ISerg1986
Дата 26.1.2014, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Оставил эту функцию (libusb_interrupt_transfer) пока в покое. Не всё понимаю - трогать пока не буду  smile 

А в этой libusb_open_device_with_vid_pid(NULL, DEV_VID, DEV_PID); ошибиться уже сложно.

Пытаюсь найти (открыть) устройство, зная его VID и PID.
user posted image
user posted image

Мой код
Код

#include <QApplication>
#include "mainwindow.h"
#include "libusb.h"

#define DEV_VID 0x0483
#define DEV_PID 0x3748 
#define DEV_CONFIG 1
#define DEV_INTF 0
#define EP_IN 0x81
#define USB_DEBUG_LEVEL 0


int main(int argc, char *argv[])
{


libusb_init(NULL);
libusb_set_debug(NULL, USB_DEBUG_LEVEL);  // уровень вывода отладочных сообщений
libusb_device_handle *handle = libusb_open_device_with_vid_pid(NULL, DEV_VID, DEV_PID);

if (handle == NULL) {
return 1;
}
else
return 2;



QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}




Результат - программа завершилась с кодом 1. То есть return 1 - не видит устройство.
VID 0x0483, PID 0x3748 - вроде правильные. В линуксе устройство видно. Других ошибок нет. Вывод компилятора -всё ок Process /usr/bin/make exited normaly.
Я правильно указал VID и PID?


Это сообщение отредактировал(а) ISerg1986 - 26.1.2014, 20:19
PM MAIL   Вверх
kuzulis
Дата 26.1.2014, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



А ты сначала проверь что возвращает libusb_init(), затем посмотри исходники утилиты QStLink (о которой ты писал на другом форуме), проверь права доступа и пр. Если ничего не выйдет - значит не судьба, брось это. smile
PM MAIL   Вверх
ISerg1986
Дата 26.1.2014, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(kuzulis @  26.1.2014,  21:17 Найти цитируемый пост)
А ты сначала проверь что возвращает libusb_init()

Посмотрю, хотя странно всё это. Я уже систему переустановил - Линукс Дебиан последней версии, поставил только необходимые пакеты.
QT из репозитория. Всё "чистое", по инструкции -а не работает  smile 

Цитата(kuzulis @  26.1.2014,  21:17 Найти цитируемый пост)
затем посмотри исходники утилиты QStLink

Можно, но это в крайнем случае. В самом крайнем есть рабочий(? поверю на слово) проект для eclipse, но ведь тут речь про QT?

Цитата(kuzulis @  26.1.2014,  21:17 Найти цитируемый пост)
 проверь права доступа и пр

Проверял. Я и так дал пользователю привилегии рута, и через судо запускал. Похоже, что дело не в правах.

Цитата(kuzulis @  26.1.2014,  21:17 Найти цитируемый пост)
 Если ничего не выйдет - значит не судьба, брось это

Так не интересно. Надо довести эксперимент до логического финала.
PM MAIL   Вверх
tzirechnoy
Дата 27.1.2014, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



УМВР -- ну, после того, как удалил обе ссылки на mainwindow, который Вы не привели. В смысле -- возвращает 2.

Так что проверяйте детали: что запускаете от рута, что собирается именно ваш проект, что он вообще пересобирается (удалите бинарник), что вы код возврата правильно читаете.
PM MAIL   Вверх
ISerg1986
Дата 27.1.2014, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Похоже, понял в чём дело. Я не правильно указал VID и PID. Заместо 0х там был другой символ - не русская х, а что-то другое(?). Дело в кодировке.
Заработало. Код завершения 0. Но выдаёт странные ошибки в Aplication Output во время работы т.к. непонятно что происходит.
А именно - неизвестно, что это за "точка" EP_IN 0x81 и какое у меня должно быть её значение.

user posted image

Код
Код

#include <QApplication>
#include "mainwindow.h"
#include "libusb.h"

#define DEV_VID 0x483//0x5824
#define DEV_PID 0x3748 //0x1503
#define DEV_CONFIG 1
#define DEV_INTF 0//0
#define EP_IN 0x81 //хз какое это у меня значение
#define USB_DEBUG_LEVEL 1
//#define EP_OUT 0x01
#define DATA_SIZE 64


void interrupt_transfer_loop(libusb_device_handle *handle);



int main(int argc, char *argv[])
{


libusb_init(NULL);



libusb_set_debug(NULL, USB_DEBUG_LEVEL);  // уровень вывода отладочных сообщений


libusb_device_handle *handle = libusb_open_device_with_vid_pid(NULL, DEV_VID, DEV_PID);


if (handle == NULL) {
return 2;
}
//else
//return 1;

if (libusb_kernel_driver_active(handle,DEV_INTF))
      libusb_detach_kernel_driver(handle, DEV_INTF);



if (libusb_claim_interface(handle,  DEV_INTF) < 0){
//       printf("Ошибка интерфейса\n");
    return 2;
   }


interrupt_transfer_loop(handle);

libusb_attach_kernel_driver(handle, DEV_INTF);
libusb_close(handle);
libusb_exit(NULL);






    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}





void interrupt_transfer_loop(libusb_device_handle *handle) {
    unsigned char buf[DATA_SIZE];
    int ret;

    while (1) {

        int returned = libusb_interrupt_transfer(handle, EP_IN, buf, DATA_SIZE, &ret, 1000);

        if (returned >= 0) {
            buf[0] = (int)buf[0];
            buf[1] = (int)buf[1];
        }
    }
}

void bulk_transfer_loop(libusb_device_handle *handle) {
//  libusb_bulk_transfer() хз что тут писать

}



PM MAIL   Вверх
ISerg1986
Дата 27.1.2014, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Переподключил устройство - нашлось ещё несколько usb  smile 
Пытаюсь подключится к 0xffff 0xbad
Выдаёт ошибку permission denied. Нет прав доступа к устройству. Причём к 002 033.

Добавил правила
ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="0bad", MODE="0666"
и ещё одно
ATTRS{idVendor}=="002", ATTRS{idProduct}=="0bad", MODE="0666"

Сделал reload rules - ошибка не исчезла.
user posted image


Это сообщение отредактировал(а) ISerg1986 - 27.1.2014, 16:51
PM MAIL   Вверх
bsa
Дата 28.1.2014, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



ISerg1986, как у тебя с английским? Что в переводе на русский значит слово "bad"?  smile 
PM   Вверх
ISerg1986
Дата 29.1.2014, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(bsa @  28.1.2014,  10:19 Найти цитируемый пост)
ISerg1986, как у тебя с английским? 

С отличием школа+институт+спецподготовка 4 года+технический английский smile 

Тут bad оно 0xbad т.е обозначение в шестнадцатеричной системе PID устройства. Его так задал мне программист платы.
Шина 002 устройство 033 VID 0xffff PID 0xbad. Никакого криминала  smile 

Сейчас "грешу" на виртуалку. Похоже что система блокирует порты. Устройство подключено к Windows 7 а там VMWare c Linux.
Буду покупать отдельный компьютер подешовке т.к. нужно исключить все глюки и ошибки. А так - что ни система, то новые ошибки. А код то один и тот-же.
PM MAIL   Вверх
bsa
Дата 31.1.2014, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(ISerg1986 @  29.1.2014,  14:27 Найти цитируемый пост)
Его так задал мне программист платы.
Шина 002 устройство 033 VID 0xffff PID 0xbad. Никакого криминала
Шутник ваш программист. Обычно, такие значения имеют невалидные идентификаторы.

PM   Вверх
tzirechnoy
Дата 1.2.2014, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
Сделал reload rules - ошибка не исчезла.


Ну ещё бы. В man udevadm (--reload-rules) -- дажэ описано, почему она не могла от такого исчезнуть.
PM MAIL   Вверх
ISerg1986
Дата 3.2.2014, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата(bsa @  31.1.2014,  11:29 Найти цитируемый пост)
Шутник ваш программист. Обычно, такие значения имеют невалидные идентификаторы.

Вы уверены в этом? Просто моя плата "общается" с HIDterminal'ом в Windows. для этого нужно было установить драйверы.
Разобрался. Приложение запускается от root. Говорят, что это не есть хорошо.

Это сообщение отредактировал(а) ISerg1986 - 7.2.2014, 11:55
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1532 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.