Название: libUSB linux [решено] Отправлено: FalconHAM от Февраль 10, 2011, 17:15 Добрый день.
Есть такой код: Код: //------------------------------------------------------------------------ Перабрал все что знал о USB в Линуксе: команды lsof и fuser возвращают: файл /dev/bus/usb/00x/00x свободен.( (Если запросить во время останова в окне QMessageBox::critical - пишут занят моим приложением) strace возвращает: Код: open("/dev/bus/usb/004/004", O_RDWR) = 14 usbview выводит инфо, да и я могу просмотреть весь дескриптор. А когда начинаю активировать девайс, получаю отказ. Проверял на двух машинах. На обоих установлена SUSE 11.3 Адаптеров ds2490 тоже два R и В Кто с линуксом хорошо знаком? Помогите, куда хоть рыть. Название: Re: libUSB linux Отправлено: ivm2008 от Февраль 11, 2011, 08:38 Из своего опыта работы с libusb могу сказать две вещи:
1. До вызова open() надо вызвать libusb_claim_interface(...) (найдешь в документации по libusb какие у нее параметры) 2. libusb требует прав на запись, поэтому в Ubuntu это делается так: в /etc/udev/rules.d надо создать файл с определением доступа к устройству c именем типа 70-udev-libusb.rules. и содержащим вот такую строку: # ez-usb device nodes ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="04b4", SYSFS{idProduct}=="1004", MODE="0777" ну по смыслу думаю понятно, что где надо подставить в твоем случае. Как в других Линуксах - надо смотреть доки Название: Re: libUSB linux Отправлено: FalconHAM от Февраль 12, 2011, 09:31 Пока ничего не помогло. :(
И на линоксоидных форумах молчат. Похоже дело в либе, буду переустанавливать. Название: Re: libUSB linux Отправлено: coffeesmoke от Март 03, 2011, 15:17 код
} if(usb_set_configuration(usbHandle, 1)) { заменить на } usb_detach_kernel_driver_np(usbHandle, 1); // отцепись от ядра !!!!!!!!!!!!!!!!!!!!!! if(usb_set_configuration(usbHandle, 1)) { Название: Re: libUSB linux Отправлено: FalconHAM от Май 17, 2011, 08:24 Цитировать usb_detach_kernel_driver_np(usbHandle, 1); // отцепись от ядра !!!!!!!!!!!!!!!!!!!!!! Да спасибо, я тогда так и сделал. Только забыл сказать спасибо :)А сейчас мне тако-же вопрос задали и я вспомнил 8) Единственно, надо вместо 1-цы вписать номер интерфейса: Код: qDebug()<<"---bus--->"<<usbBus->dirname<<"---dev--->"<<usbDev->filename; Меня тогда смутил вывод команды fuser: Цитировать # fuser -m /dev/bus/usb/004/004 :o/dev/bus/usb/004/004: 1 363 1053 1057 1058 1075 1397 1486m 1644 1723 1806 1834 1912 2356 2390 2507 2590 2598 2730 2855 2904 2906 2918 2983m 3536 3925 4162 4167 4170 4177 4209 4252 4255 4274 4372 4404 4405 4407 4433 4603 4604 4605 4606 4607 4608 4692 4694 4705 4722 4728 4741 4742 4783 4792 4812 4817 4821 7753 9879 После этого мысль у меня остановилась ::) ЗЫ: Не нашел, где поставить опцию "решено" Название: Re: libUSB linux [решено] Отправлено: coffeesmoke от Май 23, 2011, 12:16 Всё проще.
Читаем http://mirror.linux.org.au/linux-man...iguration.html "This is used to enable non-default device modes. Not all devices support this kind of configurability. By default, configuration zero is selected after enumeration; many devices only have a single configuration." Ясненько! Я сделал проще: 1. Проверяю количество конфигураций. 2. Если ТОЛЬКО ОДНА, до данную функцию, просто, не вызываю, т.к. по-умолчанию всегда идёт переход на неё. Далее -- сразу устанавливаю интерфейс. Работает! Удачи. Название: Re: libUSB linux [решено] Отправлено: Пантер от Май 23, 2011, 12:18 Поправь ссылку.
|