1

接続された USB デバイスを読み書きするアプリケーションを作成しようとしています。libusb を使用しています。デバイスを見つけた後、構成に失敗したようです。http://libusb.sourceforge.net/doc/index.htmlにあるlibusb の開発者ガイドに従っています。それは次のように述べています:

usb_set_configuration は、デバイスのアクティブな構成を設定します。構成パラメーターは、記述子フィールド bConfigurationValue で指定された値です。成功した場合は 0 を返し、エラーの場合は < 0 を返します。

ソース (以下) で、構成パラメーターとして 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;
    ...
}

編集:

アプリケーションが 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
4

0 に答える 0