URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 3446
[ Назад ]

Исходное сообщение
"Проблема с libUSB в SUSE 11.3"

Отправлено FalconHAM , 11-Фев-11 11:46 
Добрый день.
Есть такой простенький код:
(Эта функция вызывается в конструкторе)

//------------------------------------------------------------------------
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 и В

Помогите, куда хоть рыть.


Содержание

Сообщения в этом обсуждении
"Проблема с libUSB в SUSE 11.3"
Отправлено Aquarius , 11-Фев-11 20:54 
>[оверквотинг удален]
> read(11, "\1", 1)          
>            
>   = 1
> ioctl(14, USBDEVFS_SETCONFIGURATION, 0xbfcc2ad4) = -1 EBUSY (Device or resource busy)
> //---------------------
> usbview выводит инфо, да и я могу просмотреть весь дескриптор.
> А когда начинаю активировать девайс, получаю отказ.
> Проверял на двух машинах. На обоих установлена SUSE 11.3
> Адаптеров ds2490 тоже два R и В
> Помогите, куда хоть рыть.

ls -l /dev/bus/usb/004/004
id