Я создаю программу, которая читает входные данные с контроллера midi, используя libusb.Как правильно вызвать libusb_bulk_transfer?В настоящее время я каждый раз получаю сообщение об ошибке «LIBUSB_ERROR_NOT_FOUND», и я получаю данные «P».
Я поменял функцию 'libusb_bulk_transfer' на 'libusb_interrupt_transfer', но я все еще получаю то же самоеошибка: LIBUSB_ERROR_NOT_FOUND
Ниже приведены библиотеки, которые я в настоящее время включил
#include <stdlib.h>
#include <stdio.h>
#include <libusb-1.0/libusb.h>
Ниже приведена основная функция, которая находит все USB-устройства и вызывает функцию, которая вызывает у меня проблемы: printDeviceUsbInput (устройства [I]);Насколько я знаю, основная функция работает нормально.Я удалил проверку ошибок, чтобы сделать код короче
int main(int argc, char *argv[])
{
libusb_device **devices;
libusb_context *context = NULL;
size_t list;
size_t i;
int returnValue;
returnValue = libusb_init(&context);
list = libusb_get_device_list(context, &devices);
printf("There are %zu devices found \n\n", list);
for (i = 0; i < list; i++)
{
printDeviceUsbInput(devices[i]);
//printDevices(devices[i]);
}
libusb_free_device_list(devices, 1);
libusb_exit(context);
return 0;
}
Ниже приведена функция, которая находит устройство миди-клавиатуры и пытается распечатать ввод миди.Ака функция, которая вызывает у меня проблемы.Я был вдохновлен этим кодом: http://libusb.sourceforge.net/api-1.0/libusb_io.html
Я также удалил проверку ошибок, чтобы сделать функцию короче.
void printDeviceUsbInput(libusb_device *device)
{
struct libusb_device_descriptor deviceDescriptor;
int returnValue;
returnValue = libusb_get_device_descriptor(device, &deviceDescriptor);
if(deviceDescriptor.idProduct == 49)
{
printf("Keyboard found\n\n");
unsigned char data[4];
int actual_length;
libusb_device_handle *deviceHandle;
returnValue = libusb_open(device, &deviceHandle);
while(1)
{
returnValue = libusb_bulk_transfer(deviceHandle, LIBUSB_ENDPOINT_IN,data, sizeof(data), &actual_length, 0);
printf("Data: %s\n\n", data);
printf("returnValue: %s\n\n", libusb_error_name(returnValue));
}
}
}
Я ожидаю, что вызов libusb_bulk_transfer вернет 0, и этозначение переменных данных будет меняться каждый раз, когда я нажимаю клавишу на миди-клавиатуре.