Добрый день.
Есть такой простенький код:
(Эта функция вызывается в конструкторе)//------------------------------------------------------------------------
bool MW::acquireAdapter() {
struct usb_bus *usbBus;
struct usb_device *usbDev;
usb_init();
usb_set_debug(0);
usb_find_busses();
usb_find_devices();
unsigned int vendor, product;
if(usb_find_busses() < 0) {
printf("ERROR: %s\n", usb_strerror());
return false;
}
if(usb_find_devices() < 0) {
printf("ERROR: %s\n", usb_strerror());
return false;
}
usbBus = usb_get_busses();
if (usbBus == NULL) {
printf("ERROR: No USB bus found\n");
return false;
}
for (; usbBus != NULL; usbBus = usbBus->next) {
for (usbDev = usbBus->devices; usbDev != NULL; usbDev = usbDev->next) {
vendor = usbDev->descriptor.idVendor;
product = usbDev->descriptor.idProduct;
qDebug()<<"---vendor--->"<<vendor<<"----prod---->"<<product<<"--desc--->"<<usbDev->descriptor.iProduct;
if(vendor == DALLAS && product == DS2490) {
sysLog(trUtf8("Найден адаптер ds2490."));
if((usbHandle = usb_open(usbDev)) == NULL) {
QMessageBox::critical(this, "!!!", trUtf8("Ошибка!\n%1 ").arg(trUtf8(usb_strerror())));
return false; // Устройство ременно недоступно
}
if(usb_set_configuration(usbHandle, 1)) {
// Всегда заваливается сюда
// Если тут сделать дополнительный qDebug()<<"---conf--->"<<usb_set_configuration(usbHandle, 1)
// Всегда возвращает -16
QMessageBox::critical(this, "!!!", trUtf8("Ошибка!\n%1 ").arg(trUtf8(usb_strerror())));
return false; // Устройство или ресурс занято
}
return true;
}
}
}
QMessageBox::critical(this, trUtf8("Внимание!"),
trUtf8("Ошибка! Адаптер ds9490 не обнаружен.\n"),
trUtf8("Ok"));
sysLog(trUtf8(""));
return false;
}
//------------------------------------
Перабрал все что знал о USB в Линуксе:
команды lsof и fuser возвращают: файл /dev/bus/usb/00x/00x свободен.(
(Если запросить во время останова в окне QMessageBox::critical - пишут занят моим приложением)
strace возвращает:
//-------------------------
open("/dev/bus/usb/004/004", O_RDWR) = 14
write(12, "\1", 1) = 1
read(11, "\1", 1) = 1
ioctl(14, USBDEVFS_SETCONFIGURATION, 0xbfcc2ad4) = -1 EBUSY (Device or resource busy)
//---------------------
usbview выводит инфо, да и я могу просмотреть весь дескриптор.
А когда начинаю активировать девайс, получаю отказ.
Проверял на двух машинах. На обоих установлена SUSE 11.3
Адаптеров ds2490 тоже два R и В
Помогите, куда хоть рыть.