Skip to content

Commit

Permalink
xum1541_init(): only configure device if not already done
Browse files Browse the repository at this point in the history
  • Loading branch information
thierer committed May 21, 2020
1 parent bd17972 commit 88f2a70
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
17 changes: 15 additions & 2 deletions opencbm/lib/plugin/xum1541/xum1541.c
Expand Up @@ -552,13 +552,26 @@ xum1541_init(struct opencbm_usb_handle **HandleXum1541_p, int PortNumber)
}

do {
// Select first and only device configuration.
ret = usb.set_configuration(HandleXum1541->devh, 1);
int config = 0;

// Check if device is already configured
ret = usb.get_configuration(HandleXum1541->devh, &config);
if (ret != LIBUSB_SUCCESS) {
xum1541_cleanup(HandleXum1541, "USB error: %s\n", usb.error_name(ret));
break;
}

if (config == 0) {
// Select first and only device configuration.
ret = usb.set_configuration(HandleXum1541->devh, 1);
if (ret != LIBUSB_SUCCESS) {
xum1541_cleanup(HandleXum1541, "USB error: %s\n", usb.error_name(ret));
break;
}
} else {
fprintf(stderr, "Device already configured (%d), skipping set_configuration()\n", config);
}

/*
* Get exclusive access to interface 0.
* After this point, do cleanup using xum1541_close() instead of
Expand Down
1 change: 1 addition & 0 deletions opencbm/libmisc/LINUX/dynlibusb.c
Expand Up @@ -39,6 +39,7 @@ usb_dll_t usb = {
.bulk_transfer = libusb_bulk_transfer,
.control_transfer = libusb_control_transfer,
.set_configuration = libusb_set_configuration,
.get_configuration = libusb_get_configuration,
.claim_interface = libusb_claim_interface,
.release_interface = libusb_release_interface,
.clear_halt = libusb_clear_halt,
Expand Down
1 change: 1 addition & 0 deletions opencbm/libmisc/dynlibusb.h
Expand Up @@ -52,6 +52,7 @@ struct usb_dll_s {
int (LIBUSB_APIDECL *control_transfer)(libusb_device_handle *dev_handle, uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout);

int (LIBUSB_APIDECL *set_configuration)(libusb_device_handle *dev, int configuration);
int (LIBUSB_APIDECL *get_configuration)(libusb_device_handle *dev, int *configuration);
int (LIBUSB_APIDECL *claim_interface)(libusb_device_handle *dev, int interface);
int (LIBUSB_APIDECL *release_interface)(libusb_device_handle *dev, int interface);
int (LIBUSB_APIDECL *clear_halt)(libusb_device_handle *dev, unsigned char ep);
Expand Down

0 comments on commit 88f2a70

Please sign in to comment.