Russian Qt Forum
Ноябрь 24, 2024, 15:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Работа с устройствами USB HID с использованием HID API  (Прочитано 15540 раз)
KPN
Гость
« : Октябрь 07, 2016, 10:09 »

Доброго времени суток!!! делаю тестовый проект с использованием USB HID, в качестве устройства использую F3Discovery, сделал прошивку для управления светодиодами, из тестовой программки HID API TestGui (брал с github https://github.com/signal11/hidapi) светодиодами могу управлять. Сейчас пишу свою, использую Qt (проект во вложении).
Проблема следующая: не могу открыть устройство.
В качестве операционки использую Linux Mint 18.
Не могу понять почему не открывается устройство, в тестовой программе все работает, в чём затык?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Октябрь 07, 2016, 10:28 »

А где вы hid_init() вызываете?
Записан
KPN
Гость
« Ответ #2 : Октябрь 07, 2016, 10:35 »

я делал опираясь на исходник тестовой утилиты, там её нет.
Хорошо, как её правильно вызывать, я сделал вызов hid_init() по нажатию на кнопку "Re-Scan Devices".
не помогло.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Октябрь 07, 2016, 10:40 »

я делал опираясь на исходник тестовой утилиты, там её нет.
Хорошо, как её правильно вызывать, я сделал вызов hid_init() по нажатию на кнопку "Re-Scan Devices".
не помогло.
Я смотрю на тестовый пример в описании библиотеки.
Я правильно понимаю, что на том же компьютере собранная вами TestGui открывает Дискавери, а ваша программа собранная с той-же библиотекой - нет?
Обе программы запускаете от root или от своего пользователя?
Записан
KPN
Гость
« Ответ #4 : Октябрь 07, 2016, 10:47 »

все собрано на одном и том же компьютере, обе запускаю от обычного пользователя.
сделал правила для udev:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5750", MODE="0666"

из тестовой передаются и принимаются данные.
Записан
KPN
Гость
« Ответ #5 : Октябрь 07, 2016, 10:50 »

нашел, hid_init() вызывается в функции hid_open_path, которая в hid.c
Но проблемы это не решило...
« Последнее редактирование: Октябрь 07, 2016, 11:00 от KPN » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Октябрь 07, 2016, 11:08 »

нашел, hid_init() вызывается в функции hid_open_path, которая в hid.c
Но проблемы это не решило...
Посмотрите в отладчике, чему равно cur_dev перед открытием. Улыбающийся
Записан
KPN
Гость
« Ответ #7 : Октябрь 07, 2016, 11:14 »

вот, это?
с отладчиком не работал пока, правильно сделал?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Октябрь 07, 2016, 11:20 »

А после отработки цикла там будет 0. Улыбающийся
Записан
KPN
Гость
« Ответ #9 : Октябрь 07, 2016, 11:29 »

что-то не совсем понимаю почему так...
« Последнее редактирование: Октябрь 07, 2016, 11:31 от KPN » Записан
KPN
Гость
« Ответ #10 : Октябрь 07, 2016, 11:32 »

а вот тут уже 0
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Октябрь 07, 2016, 11:44 »

А что у вас в цикле while происходит вы понимаете? Подмигивающий
Записан
KPN
Гость
« Ответ #12 : Октябрь 07, 2016, 12:05 »

перечесление списка подключенных устройств, и вывод их VID,PID,SerialNumber.
cur_dev это я так понимаю какое-то текущее устройство.
next - указатель на следующее устройство.
« Последнее редактирование: Октябрь 07, 2016, 12:09 от KPN » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Октябрь 07, 2016, 12:11 »

перечесление списка подключеных устройств, и вывод их VID,PID,SerialNumber.
cur_dev это я так понимаю какое-то текущее устройство.
И оно меняется в цикле до тех пор, пока не стенет равно 0 - тогда мы выходим из цикла. Дальше идет проверка этой переменной перед открытием, а она по любому уже 0.
До вызова hid_open_path дело даже не доходит.
Записан
KPN
Гость
« Ответ #14 : Октябрь 07, 2016, 12:19 »

хорошо, а как тогда сделать чтобы в hid_open_path передавать не нулевое значение cur_dev?

в тестовой программе сделано так:
Код:
1	struct hid_device_info *device_info = (struct hid_device_info*) item->getData();
2 if (!device_info)
3 return -1;
4
5 connected_device =  hid_open_path(device_info->path);

мне не понятна 1-я строка.
в магии с указателями не очень пока силен, на простых примерах понятно, а тут как-то не очень Грустный
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.