diff --git a/nut/drivers/libusb.c b/nut/drivers/libusb.c index b6f5fb5..5a519ba 100644 --- a/nut/drivers/libusb.c +++ b/nut/drivers/libusb.c @@ -208,7 +208,10 @@ static int libusb_open(usb_dev_handle **udevp, USBDevice_t *curDevice, USBDevice #endif /* set default interface */ - usb_set_altinterface(udev, 0); + if (usb_set_altinterface(udev, 0) < 0) { + upsdebugx(2, " Couldn't set default interface"); + goto next_device; + } if (!callback) { return 1; diff --git a/nut/drivers/usbhid-ups.c b/nut/drivers/usbhid-ups.c index 4824189..3ffa1e2 100644 --- a/nut/drivers/usbhid-ups.c +++ b/nut/drivers/usbhid-ups.c @@ -84,7 +84,7 @@ static int pollfreq = DEFAULT_POLLFREQ; static int ups_status = 0; static bool_t data_has_changed = FALSE; /* for SEMI_STATIC data polling */ static time_t lastpoll; /* Timestamp the last polling */ -hid_dev_handle_t udev; +hid_dev_handle_t udev = NULL; /* support functions */ static hid_info_t *find_nut_info(const char *varname); @@ -1360,7 +1360,9 @@ static int reconnect_ups(void) upsdebugx(4, "=================================================="); upsdebugx(4, "= device has been disconnected, try to reconnect ="); upsdebugx(4, "=================================================="); - + if (udev) + comm_driver->close(udev); + ret = comm_driver->open(&udev, &curDevice, subdriver_matcher, #ifdef SHUT_MODE NULL);