--- ../../Downloads/usb-modeswitch-2.1.0/usb_modeswitch.c 2014-01-28 20:40:08.000000000 +0100 +++ usb_modeswitch.c 2014-02-19 12:12:48.069990503 +0100 @@ -1804,7 +1804,9 @@ int get_current_configuration(struct libusb_device_handle* devh) { SHOW_PROGRESS(output,"Get the current device configuration ...\n"); - ret = libusb_control_transfer(devh, USB_DIR_IN + LIBUSB_REQUEST_TYPE_STANDARD + LIBUSB_RECIPIENT_DEVICE, LIBUSB_REQUEST_GET_CONFIGURATION, 0, 0, (unsigned char *)buffer, 1, 1000); + int config=0; + int ret = libusb_get_configuration(devh,&config); + //ret = libusb_control_transfer(devh, USB_DIR_IN + LIBUSB_REQUEST_TYPE_STANDARD + LIBUSB_RECIPIENT_DEVICE, LIBUSB_REQUEST_GET_CONFIGURATION, 0, 0, (unsigned char *)buffer, 1, 1000); if (ret < 0) { // There are quirky devices which fail to respond properly to this command fprintf(stderr, "Error getting the current configuration (error %d). Assume configuration 1\n", ret); @@ -1815,7 +1817,7 @@ return 1; } else { SHOW_PROGRESS(output," OK, got current device configuration (%d)\n", buffer[0]); - return buffer[0]; + return config; } }