Тайм-аут libusb_bulk_transfer во время записи

У меня есть USB-принтер. Я хочу отправить данные файла на USB-принтер из Linux. Я использую libUsb для моего кода. Я получаю тайм-аут (libusb возвращаемое значение -7) всегда при отправке. Но я могу отправлять данные в Windows для одного и того же принтера. Что пошло не так? Кажется, EHCI или UHCI не отправляет данные на принтер. Пожалуйста помоги.

ОС: Ubuntu 12.04 (32-разрядная версия)

Ниже приведен мой фрагмент кода.

    dev_handle = libusb_open_device_with_vid_pid(ctx, PRINTER_VID, PRINTER_PID); 

if (dev_handle == NULL)
{
    cout << "Cannot open device" << endl;
    libusb_free_device_list(devs, 1); //free the list, unref the devices in it
    return;
}
else
{
    cout << "Device Opened" << endl;
}

if (libusb_kernel_driver_active(dev_handle, 0) == 1) //find out if kernel driver is attached
{ 
    cout << "Kernel Driver Active" << endl;
    if (libusb_detach_kernel_driver(dev_handle, 0) == 0) //detach it
        cout << "Kernel Driver Detached!" << endl;
}
r = libusb_claim_interface(dev_handle, 0); 
if (r < 0) 
{
    cout << "Cannot Claim Interface" << endl;
    return 1;
}
cout << "Claimed Interface" << endl;
cout << "Writing Data..." << endl;
memset(data_buffer,0,64);

while(fgets((char *)data_buffer,64,fp))
{
    errno = 0;
    r = libusb_bulk_transfer(dev_handle,0x081 | LIBUSB_ENDPOINT_OUT, data_buffer, 64,&actual, 10); 
    cout<<"The return value of r is "<<r<< "::::" << actual << endl ;
    memset(data_buffer,0,64);
}

Выход

The return value of r is -7::::0
The return value of r is -7::::0

0 ответов

Попробуйте выполнить следующую команду от суперпользователя, а затем повторно подключите устройство.

echo 0 > /sys/bus/usb/drivers_autoprobe

Мне помогло с некоторыми устройствами.

Другие вопросы по тегам