2015-03-04 2 views
3

Я читаю данные с устройства usb в java с libusb api. Я могу записать данные на устройство, но я не могу читать данные с устройства. Я могу прочитать первую группу данных (размер: 1 байт), но когда я хочу прочитать вторую группу данных (размер: 2 байт), я получаю ошибку тайм-аута (ошибка USB 7: ошибка переноса управления: время ожидания операции).Чтение данных с устройства usb в libusb с помощью java (usb4java)

Мой код такой:

buffer = ByteBuffer.allocateDirect(1); 
    //03 
    LibUsb.controlTransfer(handle,(byte) (LibUsb.REQUEST_TYPE_VENDOR | LibUsb.ENDPOINT_IN), (byte) 0xdb, (short) 0, (short) 0, buffer, 0); 

    //00 04 
    buffer.rewind(); 
    buffer = ByteBuffer.allocateDirect(2); 

    transferred = LibUsb.controlTransfer(handle,(byte) (LibUsb.REQUEST_TYPE_VENDOR | LibUsb.ENDPOINT_IN), (byte) 0xf0, (short) 0x1c30, (short) 0, buffer, 0); 

    if(transferred < 0){ 

     throw new LibUsbException("Control Transfer Failed", transferred); 
    } 

Я достиг этой передачи данных на языке C, но я должен сделать это в java. Пожалуйста, помогите мне.

Редактировать: Я меняю время ожидания, но никаких изменений в моем приложении не происходит.

Редактировать: Я могу читать 1 байт данных. Когда я хочу читать 2 байтовых данных, я получаю ошибку.

+0

просто примечание к сайту, если вы выделили новый буфер, вам не нужно перематывать() старый буфер. Но лучше было бы использовать буфер повторно для повышения производительности. – eckes

ответ

0

Устройства USB-принтера создают несколько конечных точек, скорее всего, вы обращаетесь к конечной точке, которая может быть только для чтения. Используйте бесплатную программу диагностики USB, чтобы понять, каковы конечные точки при подключении вашего устройства к хосту. Одной из конечных точек будет чтение-запись, и это предназначено для чтения с устройства.

Смежные вопросы