Я пытаюсь написать приложение для чтения и записи на подключенное устройство USB. Я использую libusb. Кажется, после того, как я нахожу устройство, конфигурации не удается. Я следую руководству разработчика для libusb на http://libusb.sourceforge.net/doc/index.html., которое гласит:
usb_set_configuration устанавливает активную конфигурацию устройства. Параметр конфигурации - это значение, указанное в поле дескриптора bConfigurationValue. Возвращает 0 при успехе или <0 при ошибке. </p>
В моем источнике (ниже) я демонстрирую, что я использую bConfigurationValue в качестве параметра конфигурации, но мое возвращаемое значение из usb_set_configuration всегда равно -1. Я не понимаю, почему?
Выход:
[user@local workspace]$ ./application
Device Found @ Address 005
Vendor ID 0x018d1
Product ID 0x04e12
INFO: bConfigurationValue = 1
config status =-1
claim status =-1
alt status =-22
TX status =-1
RX status =-1 -> RX char = 0
[user@local workspace]$
Источник:
int main(int argc, char *argv[])
{
struct usb_bus *bus;
struct usb_device *dev;
struct usb_dev_handle *android_handle;
int status;
unsigned char send_data = 0x51;
unsigned char receive_data = 0;
usb_init();
if ((handle = locate_device()) == 0)
{
printf("Error: Could not open the device\n");
return (-1);
}
printf("INFO: bConfigurationValue = %d\n", config_val);
status = usb_set_configuration(handle, config_val);
printf("config status = %d\n", status);
status = usb_claim_interface(handle, 0);
printf("claim status = %d\n", status);
open_status = usb_set_altinterface(handle, 0);
printf("alt status = %d\n", status);
status = usb_bulk_write(handle, 4, &send_data, 1, 500);
printf("TX status = %d\n", status);
usb_bulk_read(handle, 3, &receive_data, 1, 500);
printf("RX status = %d -> RX char = %d\n", status, receive_data);
usb_close(handle);
return 0;
}
usb_dev_handle *locate_device(void)
{
...
config_val = dev->config[myDeviceIndex].bConfigurationValue;
...
}
EDIT:
Следующие коды ошибок возвращаются при запуске приложения от имени root:
Device Found @ Address 005
Vendor ID 0x018d1
Product ID 0x04e12
INFO: bConfigurationValue = 1
config status = -16
claim status = -16
alt status = -22
TX status = -16
RX status = -16 -> RX char = 0