mirror of
https://git.freebsd.org/ports.git
synced 2025-06-07 22:00:31 -04:00
for the error even though permissions are OK (or the driver is run as root). Nut uses libusb-0.1 API, assuming return cods of < 0. FreeBSD provides a libusb-0.1 wrapper howerver it uses libusb-1.0 error codes (which are negative). This set of patches "teaches" nut libusb-1.0 error codes as produced by FreeBSD. Network UPS Tools (networkupstools.org) has a project to use libusb-1.0. This commit is a stopgap fix until our upline implments lubusb-1.0 support in nut. PR: 223117 Submitted by: lev
79 lines
3 KiB
C
79 lines
3 KiB
C
--- drivers/nutdrv_qx.c.orig 2016-03-08 12:01:11 UTC
|
|
+++ drivers/nutdrv_qx.c
|
|
@@ -561,9 +561,9 @@ static int phoenix_command(const char *cmd, char *buf,
|
|
* In order to read correct replies we need to flush the output buffers of the converter until we get no more data (ie, it times out). */
|
|
switch (ret)
|
|
{
|
|
- case -EPIPE: /* Broken pipe */
|
|
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
|
|
usb_clear_halt(udev, 0x81);
|
|
- case -ETIMEDOUT: /* Connection timed out */
|
|
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
|
break;
|
|
}
|
|
|
|
@@ -635,7 +635,7 @@ static int ippon_command(const char *cmd, char *buf, s
|
|
ret = usb_control_msg(udev, USB_ENDPOINT_OUT + USB_TYPE_CLASS + USB_RECIP_INTERFACE, 0x09, 0x2, 0, &tmp[i], 8, 1000);
|
|
|
|
if (ret <= 0) {
|
|
- upsdebugx(3, "send: %s (%d)", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out", ret);
|
|
+ upsdebugx(3, "send: %s (%d)", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out", ret);
|
|
return ret;
|
|
}
|
|
|
|
@@ -648,7 +648,7 @@ static int ippon_command(const char *cmd, char *buf, s
|
|
|
|
/* Any errors here mean that we are unable to read a reply (which will happen after successfully writing a command to the UPS) */
|
|
if (ret <= 0) {
|
|
- upsdebugx(3, "read: %s (%d)", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out", ret);
|
|
+ upsdebugx(3, "read: %s (%d)", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out", ret);
|
|
return ret;
|
|
}
|
|
|
|
@@ -2124,38 +2124,28 @@ static int qx_command(const char *cmd, char *buf, size
|
|
|
|
switch (ret)
|
|
{
|
|
- case -EBUSY: /* Device or resource busy */
|
|
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
|
|
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
|
|
|
|
- case -EPERM: /* Operation not permitted */
|
|
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
|
|
-
|
|
- case -EPIPE: /* Broken pipe */
|
|
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
|
|
if (usb_clear_halt(udev, 0x81) == 0) {
|
|
upsdebugx(1, "Stall condition cleared");
|
|
break;
|
|
}
|
|
- #ifdef ETIME
|
|
- case -ETIME: /* Timer expired */
|
|
- #endif /* ETIME */
|
|
if (usb_reset(udev) == 0) {
|
|
upsdebugx(1, "Device reset handled");
|
|
}
|
|
- case -ENODEV: /* No such device */
|
|
- case -EACCES: /* Permission denied */
|
|
- case -EIO: /* I/O error */
|
|
- case -ENXIO: /* No such device or address */
|
|
- case -ENOENT: /* No such file or directory */
|
|
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
|
|
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
|
|
+ case LIBUSB_ERROR_IO: /* I/O error */
|
|
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
|
|
/* Uh oh, got to reconnect! */
|
|
usb->close(udev);
|
|
udev = NULL;
|
|
break;
|
|
|
|
- case -ETIMEDOUT: /* Connection timed out */
|
|
- case -EOVERFLOW: /* Value too large for defined data type */
|
|
-#ifdef EPROTO
|
|
- case -EPROTO: /* Protocol error */
|
|
-#endif
|
|
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
|
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
|
default:
|
|
break;
|
|
}
|