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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Работа с устройствами USB HID с использованием HID API  (Прочитано 15507 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

У вас devs указывает на первое устройство или содержит 0.
Используйте его:
Код
C++ (Qt)
void MainWindow::ReScanDevices(){
 
   struct hid_device_info *devs, *cur_dev;
 
   devs = hid_enumerate(0x483, 0x5750);
   cur_dev = devs;
   while (cur_dev) {
       qDebug("Device Found\n  type: %04hx %04hx\n  path: %s\n  serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
       qDebug("  Manufacturer: %ls\n", cur_dev->manufacturer_string);
       qDebug("  Product:      %ls\n", cur_dev->product_string);
       qDebug("  Release:      %hx\n", cur_dev->release_number);
       qDebug("  Interface:    %d\n",  cur_dev->interface_number);
       cur_dev = cur_dev->next;
   }
 
   if (devs && (connected_device = hid_open_path(devs->path))) {
       qDebug("open device");
   }
   else{
       qDebug("error open");
   }
 
   hid_free_enumeration(devs);
 
}
 

Или выбирайте нужно устройство, если их несколько.
Записан
KPN
Гость
« Ответ #16 : Октябрь 07, 2016, 12:33 »

сделал вот так:
Код:
void MainWindow::ReScanDevices(){


    struct hid_device_info *devs, *cur_dev;

    devs = hid_enumerate(0x483, 0x5750);
    cur_dev = devs;
    while (cur_dev) {
        qDebug("Device Found\n  type: %04hx %04hx\n  path: %s\n  serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
        qDebug("  Manufacturer: %ls\n", cur_dev->manufacturer_string);
        qDebug("  Product:      %ls\n", cur_dev->product_string);
        qDebug("  Release:      %hx\n", cur_dev->release_number);
        qDebug("  Interface:    %d\n",  cur_dev->interface_number);
        cur_dev = cur_dev->next;
    }

    connected_device = hid_open_path(devs->path);

    if (connected_device) {
        qDebug("open device");
    }
    else{
        qDebug("error open");
    }

    hid_free_enumeration(devs);

}

всё равно qDebug выводит "error open" Грустный
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Проверьте устройство /dev/hidraw2 присутствует?

Попробуйте открыть по константному пути:
Код
C
connected_device = hid_open_path( "/dev/hidraw2" );
 
Записан
KPN
Гость
« Ответ #18 : Октябрь 07, 2016, 13:13 »

так я пробовал с самого начала, результат отрицательный Грустный
в папке /dev при подключении платы появляется файлик hidraw2, и когда я пытался мега примитивно открыть девайс (прям по пути) так и не удалось мне этого сделать, по VID и PID тоже не получается Грустный
Вообще не понятный момент, ведь тестовая программа использующая эту же библиотеку открывает устройство и дает работать с ним, а вот моя нет Грустный
Записан
KPN
Гость
« Ответ #19 : Октябрь 07, 2016, 14:08 »

В чем еще может быть косяк?
вроде в теории все понятно, подключаем устройство -> открываем его -> передаем/принимаем данные -> поюзали девайс, закрыли его.
но в моей ситуации проблема уже на этапе открытия устройства.
Записан
KPN
Гость
« Ответ #20 : Октябрь 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
то говорит что файл не найден?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


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

Кажется, LIBS += -L/home/develop/PROJECTS/Qt/DESKTOP/F3Discovery_USB_HID/ -lhidapi-hidraw
Записан
Bepec
Гость
« Ответ #22 : Октябрь 07, 2016, 21:30 »

Код ошибки посмотрите... Если такое есть в библиотеке (должно быть) Веселый
Записан
KPN
Гость
« Ответ #23 : Октябрь 08, 2016, 11:26 »

видимо всё дело в сборке...
открыл makefile.linux а там вот что:
Код:
all: testgui

CC=gcc
CXX=g++
COBJS=../libusb/hid.o
CPPOBJS=test.o
OBJS=$(COBJS) $(CPPOBJS)
CFLAGS=-I../hidapi -Wall -g -c `fox-config --cflags` `pkg-config libusb-1.0 --cflags`
LIBS=-ludev -lrt -lpthread `fox-config --libs` `pkg-config libusb-1.0 --libs`


testgui: $(OBJS)
g++ -Wall -g $^ $(LIBS) -o testgui

$(COBJS): %.o: %.c
$(CC) $(CFLAGS) $< -o $@

$(CPPOBJS): %.o: %.cpp
$(CXX) $(CFLAGS) $< -o $@

clean:
rm *.o testgui

.PHONY: clean
вопрос, как это сделать в Qt?
я так понимаю флаги компилятору задаются "Настройки -> Сборка и запуск -> Компиляторы" выбираю компилятор, там есть строка "Platform codegen flags: " как их туда правильно написать?
« Последнее редактирование: Октябрь 08, 2016, 11:32 от KPN » Записан
Bepec
Гость
« Ответ #24 : Октябрь 08, 2016, 12:09 »

Если бы у вас была бы НЕ ПОДКЛЮЧЕНА библиотека, приложение у вас бы не собралось. И функции не вызывались бы. Следовательно дело в чем то другом.
Посмотрите уже код ошибки, который выводит библиотека...
Записан
KPN
Гость
« Ответ #25 : Октябрь 08, 2016, 12:27 »

как его посмотреть?
Записан
Bepec
Гость
« Ответ #26 : Октябрь 08, 2016, 12:32 »

Ну в Windows есть GetLastError(). Аналога в линукс не знаю.

PS вроде errno в linux.
« Последнее редактирование: Октябрь 08, 2016, 12:34 от Bepec » Записан
KPN
Гость
« Ответ #27 : Октябрь 08, 2016, 12:51 »

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

Сообщений: 4350



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

ls -l /dev/hidraw*
Записан
KPN
Гость
« Ответ #29 : Октябрь 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
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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