Libusb вопрос о Rasperry Pi

Я пишу приложение для связи с читателем магнитной полосы через libusb. в Ubuntu 14.04 это работает отлично, но в pi rasperry, когда я выполняю тот же код, он показывает мне эту ошибку:

libusb: ошибка [reap_for_handle] пожинать не удалось ошибка -1 errno=14 libusb: ошибка [handle_events] backend handle_events завершилась с ошибкой -1 libusb: ошибка [sync_transfer_wait_for_completion] libusb_handle_events не удалась: LIBUSB_ERROR_IO, отмена переноса, отмена передачи, отмена передачи

Это происходит, когда он пытается прочитать то, что приходит через порт с помощью функции:

u_char * answer ={'\0'};
u_char epAdress;
epAdress=0x81;
r=libusb_bulk_transfer(dev_handle,epAdress,answer,sizeof(answer),&actual, 0);

2 ответа

Конечная точка 0x81 является конечной точкой IN (т. е. устройство-хост), поскольку бит направления (самый старший бит) равен 1, что означает, что вы перемещаете данные с устройства в answer,

Проблема в том, что u_char * answer = {'\0'} выполняет скалярную инициализацию и эквивалентно uchar * answer = '\0' и действительно эквивалентно uchar * answer = 0,

Очевидно, что запись в ячейку памяти 0 будет недействительным. Я удивлен, что это сработало на Ubuntu, возможно, компилятору удалось оптимизировать эту запись. То, что вы должны написать вместо u_char answer[] = {'\0'} который будет выполнять инициализацию массива. Затем, когда вы проходите answer в libusb_bulk_transferтип массива превратится в указатель, указывающий на начало массива.

Я уже решил проблему с ошибкой версии libusb, которая была установлена ​​из репозитория по умолчанию... я скачал последнюю версию и скомпилировал ее в rasperry, и все это работало отлично.

Вот [ http://www.linuxfromscratch.org/blfs/view/cvs/general/libusb.html]

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