Название: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 10:09 Доброго времени суток!!! делаю тестовый проект с использованием USB HID, в качестве устройства использую F3Discovery, сделал прошивку для управления светодиодами, из тестовой программки HID API TestGui (брал с github https://github.com/signal11/hidapi) светодиодами могу управлять. Сейчас пишу свою, использую Qt (проект во вложении).
Проблема следующая: не могу открыть устройство. В качестве операционки использую Linux Mint 18. Не могу понять почему не открывается устройство, в тестовой программе все работает, в чём затык? Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 10:28 А где вы hid_init() вызываете?
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 10:35 я делал опираясь на исходник тестовой утилиты, там её нет.
Хорошо, как её правильно вызывать, я сделал вызов hid_init() по нажатию на кнопку "Re-Scan Devices". не помогло. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 10:40 я делал опираясь на исходник тестовой утилиты, там её нет. Я смотрю на тестовый пример в описании библиотеки.Хорошо, как её правильно вызывать, я сделал вызов hid_init() по нажатию на кнопку "Re-Scan Devices". не помогло. Я правильно понимаю, что на том же компьютере собранная вами TestGui открывает Дискавери, а ваша программа собранная с той-же библиотекой - нет? Обе программы запускаете от root или от своего пользователя? Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 10:47 все собрано на одном и том же компьютере, обе запускаю от обычного пользователя.
сделал правила для udev: SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5750", MODE="0666" из тестовой передаются и принимаются данные. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 10:50 нашел, hid_init() вызывается в функции hid_open_path, которая в hid.c
Но проблемы это не решило... Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 11:08 нашел, hid_init() вызывается в функции hid_open_path, которая в hid.c Посмотрите в отладчике, чему равно cur_dev перед открытием. :)Но проблемы это не решило... Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 11:14 вот, это?
с отладчиком не работал пока, правильно сделал? Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 11:20 А после отработки цикла там будет 0. :)
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 11:29 что-то не совсем понимаю почему так...
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 11:32 а вот тут уже 0
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 11:44 А что у вас в цикле while происходит вы понимаете? ;)
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 12:05 перечесление списка подключенных устройств, и вывод их VID,PID,SerialNumber.
cur_dev это я так понимаю какое-то текущее устройство. next - указатель на следующее устройство. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 12:11 перечесление списка подключеных устройств, и вывод их VID,PID,SerialNumber. И оно меняется в цикле до тех пор, пока не стенет равно 0 - тогда мы выходим из цикла. Дальше идет проверка этой переменной перед открытием, а она по любому уже 0.cur_dev это я так понимаю какое-то текущее устройство. До вызова hid_open_path дело даже не доходит. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 12:19 хорошо, а как тогда сделать чтобы в hid_open_path передавать не нулевое значение cur_dev?
в тестовой программе сделано так: Код: 1 struct hid_device_info *device_info = (struct hid_device_info*) item->getData(); мне не понятна 1-я строка. в магии с указателями не очень пока силен, на простых примерах понятно, а тут как-то не очень :( Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 12:26 У вас devs указывает на первое устройство или содержит 0.
Используйте его: Код
Или выбирайте нужно устройство, если их несколько. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 12:33 сделал вот так:
Код: void MainWindow::ReScanDevices(){ всё равно qDebug выводит "error open" :( Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 07, 2016, 13:05 Проверьте устройство /dev/hidraw2 присутствует?
Попробуйте открыть по константному пути: Код
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 13:13 так я пробовал с самого начала, результат отрицательный :(
в папке /dev при подключении платы появляется файлик hidraw2, и когда я пытался мега примитивно открыть девайс (прям по пути) так и не удалось мне этого сделать, по VID и PID тоже не получается :( Вообще не понятный момент, ведь тестовая программа использующая эту же библиотеку открывает устройство и дает работать с ним, а вот моя нет :( Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 14:08 В чем еще может быть косяк?
вроде в теории все понятно, подключаем устройство -> открываем его -> передаем/принимаем данные -> поюзали девайс, закрыли его. но в моей ситуации проблема уже на этапе открытия устройства. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 07, 2016, 15:29 ага, я как понял видимо у меня библиотека вообще не подключена....
у меня в папке с проектом hid.c и hidapi.h но надо видимо еще и библиотеку как-то подключить. в папке на github /hidapi/linux лежит libhidapi-hidraw.so , как его правильно подключить в Qt? я попробовал так сделать: LIBS += /home/develop/PROJECTS/Qt/DESKTOP/F3Discovery_USB_HID/libhidapi-hidraw.so не помогло :( и почему если просто написать: LIBS += libhidapi-hidraw.so то говорит что файл не найден? Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Авварон от Октябрь 07, 2016, 17:46 Кажется, LIBS += -L/home/develop/PROJECTS/Qt/DESKTOP/F3Discovery_USB_HID/ -lhidapi-hidraw
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Bepec от Октябрь 07, 2016, 21:30 Код ошибки посмотрите... Если такое есть в библиотеке (должно быть) :D
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 11:26 видимо всё дело в сборке...
открыл makefile.linux а там вот что: Код: all: testgui я так понимаю флаги компилятору задаются "Настройки -> Сборка и запуск -> Компиляторы" выбираю компилятор, там есть строка "Platform codegen flags: " как их туда правильно написать? Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Bepec от Октябрь 08, 2016, 12:09 Если бы у вас была бы НЕ ПОДКЛЮЧЕНА библиотека, приложение у вас бы не собралось. И функции не вызывались бы. Следовательно дело в чем то другом.
Посмотрите уже код ошибки, который выводит библиотека... Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 12:27 как его посмотреть?
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Bepec от Октябрь 08, 2016, 12:32 Ну в Windows есть GetLastError().
PS вроде errno в linux. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 12:51 балииин, под рутом открылось....
хорошо, а как тогда сделать чтобы доступ к устройству был под обычным пользователем? Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 08, 2016, 13:04 ls -l /dev/hidraw*
Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 13:06 crw------- 1 root root 248, 0 Oct 8 14:25 /dev/hidraw0
crw------- 1 root root 248, 1 Oct 8 14:25 /dev/hidraw1 crw------- 1 root root 248, 2 Oct 8 17:05 /dev/hidraw2 Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 08, 2016, 13:07 crw------- 1 root root 248, 0 Oct 8 14:25 /dev/hidraw0 Ну и что вам не понятно? :)crw------- 1 root root 248, 1 Oct 8 14:25 /dev/hidraw1 crw------- 1 root root 248, 2 Oct 8 17:05 /dev/hidraw2 Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 13:19 так как мне сделать чтобы я запустил свою программу от обычного пользователя и мог работать с устройством.
сейчас он доступен же только под рутом. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 08, 2016, 13:21 так как мне сделать чтобы я запустил свою программу от обычного пользователя и мог работать с устройством. Настроить правило udev, что бы оно нормально работало.сейчас он доступен же только под рутом. Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 13:25 я написал вот так, не работает.
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5750", MODE="0666" Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: Old от Октябрь 08, 2016, 13:55 я написал вот так, не работает. Но оно не срабатывает. Разберитесь почему.SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5750", MODE="0666" Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 08, 2016, 13:55 проблему решил,
вот так: KERNEL=="hidraw*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5750", MODE="0666" блин делал же так... не работало, думаю в спешке забыл правила перезагрузить Название: Re: Работа с устройствами USB HID с использованием HID API Отправлено: KPN от Октябрь 10, 2016, 05:24 всем спасибо за помощь :)
|