Properly check USB errors using sys/errno.h.
This commit is contained in:
parent
4d511e5a9e
commit
fe02968432
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=555091
20 changed files with 22 additions and 842 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
PORTNAME= nut
|
||||
PORTVERSION= ${NUT_COMMIT_DATE}
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= sysutils
|
||||
PKGNAMESUFFIX= -devel
|
||||
# MASTER_SITES= http://www.networkupstools.org/source/${PORTVERSION:R}/
|
||||
|
|
|
@ -1,79 +0,0 @@
|
|||
--- drivers/blazer_usb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/blazer_usb.c
|
||||
@@ -118,9 +118,9 @@ static int phoenix_command(const char *cmd, char *buf,
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ static int ippon_command(const char *cmd, char *buf, s
|
||||
0x09, 0x2, 0, &tmp[i], 8, 1000);
|
||||
|
||||
if (ret <= 0) {
|
||||
- upsdebugx(3, "send: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
|
||||
+ upsdebugx(3, "send: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -203,7 +203,7 @@ static int ippon_command(const char *cmd, char *buf, s
|
||||
* will happen after successfully writing a command to the UPS)
|
||||
*/
|
||||
if (ret <= 0) {
|
||||
- upsdebugx(3, "read: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
|
||||
+ upsdebugx(3, "read: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -423,38 +423,28 @@ int blazer_command(const char *cmd, char *buf, size_t
|
||||
|
||||
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
|
||||
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;
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
--- drivers/libshut.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/libshut.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "nut_stdint.h" /* for uint8_t, uint16_t, uint32_t */
|
||||
|
||||
#include "serial.h"
|
||||
+#include "libusb.h"
|
||||
#include "libshut.h"
|
||||
#include "common.h" /* for xmalloc, upsdebugx prototypes */
|
||||
|
||||
@@ -809,10 +810,10 @@ int shut_get_string_simple(int upsfd, int index,
|
||||
return ret;
|
||||
|
||||
if (tbuf[1] != USB_DT_STRING)
|
||||
- return -EIO;
|
||||
+ return LIBUSB_ERROR_IO;
|
||||
|
||||
if (tbuf[0] > ret)
|
||||
- return -EFBIG;
|
||||
+ return LIBUSB_ERROR_OVERFLOW;
|
||||
|
||||
/* skip the UTF8 zero'ed high bytes */
|
||||
for (di = 0, si = 2; si < tbuf[0]; si += 2)
|
|
@ -1,65 +0,0 @@
|
|||
--- drivers/libusb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/libusb.c
|
||||
@@ -428,26 +428,21 @@ static int libusb_strerror(const int ret, const char *
|
||||
|
||||
switch(ret)
|
||||
{
|
||||
- case -EBUSY: /* Device or resource busy */
|
||||
- case -EPERM: /* Operation not permitted */
|
||||
- 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 -EPIPE: /* Broken pipe */
|
||||
- case -ENOSYS: /* Function not implemented */
|
||||
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
|
||||
+ 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 */
|
||||
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
|
||||
+ case LIBUSB_ERROR_NOT_SUPPORTED: /* Function not implemented */
|
||||
upslogx(LOG_DEBUG, "%s: %s", desc, usb_strerror());
|
||||
return ret;
|
||||
|
||||
- case -ETIMEDOUT: /* Connection timed out */
|
||||
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
||||
upsdebugx(2, "%s: Connection timed out", desc);
|
||||
return 0;
|
||||
|
||||
- case -EOVERFLOW: /* Value too large for defined data type */
|
||||
-#ifdef EPROTO
|
||||
- case -EPROTO: /* Protocol error */
|
||||
-#endif
|
||||
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
||||
upsdebugx(2, "%s: %s", desc, usb_strerror());
|
||||
return 0;
|
||||
|
||||
@@ -478,7 +473,7 @@ static int libusb_get_report(usb_dev_handle *udev, int
|
||||
0, raw_buf, ReportSize, USB_TIMEOUT);
|
||||
|
||||
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
|
||||
- if (ret == -EPIPE) {
|
||||
+ if (ret == LIBUSB_ERROR_PIPE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -500,7 +495,7 @@ static int libusb_set_report(usb_dev_handle *udev, int
|
||||
0, raw_buf, ReportSize, USB_TIMEOUT);
|
||||
|
||||
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
|
||||
- if (ret == -EPIPE) {
|
||||
+ if (ret == LIBUSB_ERROR_PIPE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -532,7 +527,7 @@ static int libusb_get_interrupt(usb_dev_handle *udev,
|
||||
ret = usb_interrupt_read(udev, 0x81, (char *)buf, bufsize, timeout);
|
||||
|
||||
/* Clear stall condition */
|
||||
- if (ret == -EPIPE) {
|
||||
+ if (ret == LIBUSB_ERROR_PIPE) {
|
||||
ret = usb_clear_halt(udev, 0x81);
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
--- drivers/libusb.h.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/libusb.h
|
||||
@@ -36,6 +36,24 @@
|
||||
|
||||
#include <usb.h> /* libusb header file */
|
||||
|
||||
+/* libusb 1.0 errors used by FreeBSD */
|
||||
+enum libusb_error {
|
||||
+ LIBUSB_SUCCESS = 0,
|
||||
+ LIBUSB_ERROR_IO = -1,
|
||||
+ LIBUSB_ERROR_INVALID_PARAM = -2,
|
||||
+ LIBUSB_ERROR_ACCESS = -3,
|
||||
+ LIBUSB_ERROR_NO_DEVICE = -4,
|
||||
+ LIBUSB_ERROR_NOT_FOUND = -5,
|
||||
+ LIBUSB_ERROR_BUSY = -6,
|
||||
+ LIBUSB_ERROR_TIMEOUT = -7,
|
||||
+ LIBUSB_ERROR_OVERFLOW = -8,
|
||||
+ LIBUSB_ERROR_PIPE = -9,
|
||||
+ LIBUSB_ERROR_INTERRUPTED = -10,
|
||||
+ LIBUSB_ERROR_NO_MEM = -11,
|
||||
+ LIBUSB_ERROR_NOT_SUPPORTED = -12,
|
||||
+ LIBUSB_ERROR_OTHER = -99,
|
||||
+};
|
||||
+
|
||||
extern upsdrv_info_t comm_upsdrv_info;
|
||||
|
||||
/*!
|
10
sysutils/nut-devel/files/patch-drivers_main.h
Normal file
10
sysutils/nut-devel/files/patch-drivers_main.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
--- drivers/main.h.orig 2020-11-13 23:48:39.471828000 -0800
|
||||
+++ drivers/main.h 2020-11-13 23:49:42.830476000 -0800
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
+#include <sys/errno.h>
|
||||
#include "common.h"
|
||||
#include "upsconf.h"
|
||||
#include "dstate.h"
|
|
@ -1,79 +0,0 @@
|
|||
--- 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;
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
--- drivers/riello_usb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/riello_usb.c
|
||||
@@ -346,42 +346,28 @@ int riello_command(uint8_t *cmd, uint8_t *buf, uint16_
|
||||
|
||||
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
|
||||
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 */
|
||||
- upsdebugx (3, "riello_command err: Resource temporarily unavailable");
|
||||
-
|
||||
-
|
||||
- case -EOVERFLOW: /* Value too large for defined data type */
|
||||
-#ifdef EPROTO
|
||||
- case -EPROTO: /* Protocol error */
|
||||
-#endif
|
||||
- break;
|
||||
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
||||
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
||||
default:
|
||||
break;
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
--- drivers/tripplite_usb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/tripplite_usb.c
|
||||
@@ -499,7 +499,7 @@ void usb_comm_fail(int res, const char *msg)
|
||||
static int try = 0;
|
||||
|
||||
switch(res) {
|
||||
- case -EBUSY:
|
||||
+ case LIBUSB_ERROR_BUSY:
|
||||
upslogx(LOG_WARNING, "%s: Device claimed by another process", msg);
|
||||
fatalx(EXIT_FAILURE, "Terminating: EBUSY");
|
||||
break;
|
||||
@@ -907,7 +907,7 @@ void upsdrv_initinfo(void)
|
||||
if(tl_model != TRIPP_LITE_SMARTPRO ) {
|
||||
ret = send_cmd(w_msg, sizeof(w_msg), w_value, sizeof(w_value)-1);
|
||||
if(ret <= 0) {
|
||||
- if(ret == -EPIPE) {
|
||||
+ if(ret == LIBUSB_ERROR_PIPE) {
|
||||
fatalx(EXIT_FAILURE, "Could not reset watchdog. Please check and"
|
||||
"see if usbhid-ups(8) works with this UPS.");
|
||||
} else {
|
|
@ -1,74 +0,0 @@
|
|||
--- drivers/usbhid-ups.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/usbhid-ups.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#define DRIVER_VERSION "0.41"
|
||||
|
||||
#include "main.h"
|
||||
+#include "libusb.h"
|
||||
#include "libhid.h"
|
||||
#include "usbhid-ups.h"
|
||||
#include "hidparser.h"
|
||||
@@ -790,22 +790,14 @@ void upsdrv_updateinfo(void)
|
||||
/* Get HID notifications on Interrupt pipe first */
|
||||
if (use_interrupt_pipe == TRUE) {
|
||||
evtCount = HIDGetEvents(udev, event, MAX_EVENT_NUM);
|
||||
- switch (evtCount)
|
||||
- {
|
||||
- case -EBUSY: /* Device or resource busy */
|
||||
- upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
|
||||
- case -EPERM: /* Operation not permitted */
|
||||
- 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 */
|
||||
+ if (evtCount < 0) {
|
||||
+ if (evtCount == LIBUSB_ERROR_BUSY) {
|
||||
+ upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
|
||||
+ }
|
||||
/* Uh oh, got to reconnect! */
|
||||
hd = NULL;
|
||||
- return;
|
||||
- default:
|
||||
+ } else {
|
||||
upsdebugx(1, "Got %i HID objects...", (evtCount >= 0) ? evtCount : 0);
|
||||
- break;
|
||||
}
|
||||
} else {
|
||||
evtCount = 0;
|
||||
@@ -1280,14 +1272,12 @@ static bool_t hid_ups_walk(walkmode_t mode)
|
||||
|
||||
switch (retcode)
|
||||
{
|
||||
- case -EBUSY: /* Device or resource busy */
|
||||
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
|
||||
upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
|
||||
- case -EPERM: /* Operation not permitted */
|
||||
- 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! */
|
||||
hd = NULL;
|
||||
return FALSE;
|
||||
@@ -1298,12 +1288,9 @@ static bool_t hid_ups_walk(walkmode_t mode)
|
||||
case 0:
|
||||
continue;
|
||||
|
||||
- case -ETIMEDOUT: /* Connection timed out */
|
||||
- case -EOVERFLOW: /* Value too large for defined data type */
|
||||
-#ifdef EPROTO
|
||||
- case -EPROTO: /* Protocol error */
|
||||
-#endif
|
||||
- case -EPIPE: /* Broken pipe */
|
||||
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
||||
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
||||
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
|
||||
default:
|
||||
/* Don't know what happened, try again later... */
|
||||
continue;
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
PORTNAME= nut
|
||||
PORTVERSION= 2.7.4
|
||||
PORTREVISION= 17
|
||||
PORTREVISION= 18
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= http://www.networkupstools.org/source/${PORTVERSION:R}/
|
||||
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
|
||||
|
|
|
@ -1,79 +0,0 @@
|
|||
--- drivers/blazer_usb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/blazer_usb.c
|
||||
@@ -118,9 +118,9 @@ static int phoenix_command(const char *cmd, char *buf,
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ static int ippon_command(const char *cmd, char *buf, s
|
||||
0x09, 0x2, 0, &tmp[i], 8, 1000);
|
||||
|
||||
if (ret <= 0) {
|
||||
- upsdebugx(3, "send: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
|
||||
+ upsdebugx(3, "send: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -203,7 +203,7 @@ static int ippon_command(const char *cmd, char *buf, s
|
||||
* will happen after successfully writing a command to the UPS)
|
||||
*/
|
||||
if (ret <= 0) {
|
||||
- upsdebugx(3, "read: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
|
||||
+ upsdebugx(3, "read: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -423,38 +423,28 @@ int blazer_command(const char *cmd, char *buf, size_t
|
||||
|
||||
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
|
||||
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;
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
--- drivers/libshut.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/libshut.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "nut_stdint.h" /* for uint8_t, uint16_t, uint32_t */
|
||||
|
||||
#include "serial.h"
|
||||
+#include "libusb.h"
|
||||
#include "libshut.h"
|
||||
#include "common.h" /* for xmalloc, upsdebugx prototypes */
|
||||
|
||||
@@ -809,10 +810,10 @@ int shut_get_string_simple(int upsfd, int index,
|
||||
return ret;
|
||||
|
||||
if (tbuf[1] != USB_DT_STRING)
|
||||
- return -EIO;
|
||||
+ return LIBUSB_ERROR_IO;
|
||||
|
||||
if (tbuf[0] > ret)
|
||||
- return -EFBIG;
|
||||
+ return LIBUSB_ERROR_OVERFLOW;
|
||||
|
||||
/* skip the UTF8 zero'ed high bytes */
|
||||
for (di = 0, si = 2; si < tbuf[0]; si += 2)
|
|
@ -1,65 +0,0 @@
|
|||
--- drivers/libusb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/libusb.c
|
||||
@@ -428,26 +428,21 @@ static int libusb_strerror(const int ret, const char *
|
||||
|
||||
switch(ret)
|
||||
{
|
||||
- case -EBUSY: /* Device or resource busy */
|
||||
- case -EPERM: /* Operation not permitted */
|
||||
- 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 -EPIPE: /* Broken pipe */
|
||||
- case -ENOSYS: /* Function not implemented */
|
||||
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
|
||||
+ 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 */
|
||||
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
|
||||
+ case LIBUSB_ERROR_NOT_SUPPORTED: /* Function not implemented */
|
||||
upslogx(LOG_DEBUG, "%s: %s", desc, usb_strerror());
|
||||
return ret;
|
||||
|
||||
- case -ETIMEDOUT: /* Connection timed out */
|
||||
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
||||
upsdebugx(2, "%s: Connection timed out", desc);
|
||||
return 0;
|
||||
|
||||
- case -EOVERFLOW: /* Value too large for defined data type */
|
||||
-#ifdef EPROTO
|
||||
- case -EPROTO: /* Protocol error */
|
||||
-#endif
|
||||
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
||||
upsdebugx(2, "%s: %s", desc, usb_strerror());
|
||||
return 0;
|
||||
|
||||
@@ -478,7 +473,7 @@ static int libusb_get_report(usb_dev_handle *udev, int
|
||||
0, raw_buf, ReportSize, USB_TIMEOUT);
|
||||
|
||||
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
|
||||
- if (ret == -EPIPE) {
|
||||
+ if (ret == LIBUSB_ERROR_PIPE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -500,7 +495,7 @@ static int libusb_set_report(usb_dev_handle *udev, int
|
||||
0, raw_buf, ReportSize, USB_TIMEOUT);
|
||||
|
||||
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
|
||||
- if (ret == -EPIPE) {
|
||||
+ if (ret == LIBUSB_ERROR_PIPE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -532,7 +527,7 @@ static int libusb_get_interrupt(usb_dev_handle *udev,
|
||||
ret = usb_interrupt_read(udev, 0x81, (char *)buf, bufsize, timeout);
|
||||
|
||||
/* Clear stall condition */
|
||||
- if (ret == -EPIPE) {
|
||||
+ if (ret == LIBUSB_ERROR_PIPE) {
|
||||
ret = usb_clear_halt(udev, 0x81);
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
--- drivers/libusb.h.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/libusb.h
|
||||
@@ -36,6 +36,24 @@
|
||||
|
||||
#include <usb.h> /* libusb header file */
|
||||
|
||||
+/* libusb 1.0 errors used by FreeBSD */
|
||||
+enum libusb_error {
|
||||
+ LIBUSB_SUCCESS = 0,
|
||||
+ LIBUSB_ERROR_IO = -1,
|
||||
+ LIBUSB_ERROR_INVALID_PARAM = -2,
|
||||
+ LIBUSB_ERROR_ACCESS = -3,
|
||||
+ LIBUSB_ERROR_NO_DEVICE = -4,
|
||||
+ LIBUSB_ERROR_NOT_FOUND = -5,
|
||||
+ LIBUSB_ERROR_BUSY = -6,
|
||||
+ LIBUSB_ERROR_TIMEOUT = -7,
|
||||
+ LIBUSB_ERROR_OVERFLOW = -8,
|
||||
+ LIBUSB_ERROR_PIPE = -9,
|
||||
+ LIBUSB_ERROR_INTERRUPTED = -10,
|
||||
+ LIBUSB_ERROR_NO_MEM = -11,
|
||||
+ LIBUSB_ERROR_NOT_SUPPORTED = -12,
|
||||
+ LIBUSB_ERROR_OTHER = -99,
|
||||
+};
|
||||
+
|
||||
extern upsdrv_info_t comm_upsdrv_info;
|
||||
|
||||
/*!
|
10
sysutils/nut/files/patch-drivers_main.h
Normal file
10
sysutils/nut/files/patch-drivers_main.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
--- drivers/main.h.orig 2015-12-29 04:08:34.000000000 -0800
|
||||
+++ drivers/main.h 2020-11-13 23:40:47.007315000 -0800
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
+#include <sys/param.h>
|
||||
#include "common.h"
|
||||
#include "upsconf.h"
|
||||
#include "dstate.h"
|
|
@ -1,79 +0,0 @@
|
|||
--- 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;
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
--- drivers/riello_usb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/riello_usb.c
|
||||
@@ -346,42 +346,28 @@ int riello_command(uint8_t *cmd, uint8_t *buf, uint16_
|
||||
|
||||
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
|
||||
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 */
|
||||
- upsdebugx (3, "riello_command err: Resource temporarily unavailable");
|
||||
-
|
||||
-
|
||||
- case -EOVERFLOW: /* Value too large for defined data type */
|
||||
-#ifdef EPROTO
|
||||
- case -EPROTO: /* Protocol error */
|
||||
-#endif
|
||||
- break;
|
||||
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
||||
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
||||
default:
|
||||
break;
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
--- drivers/tripplite_usb.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/tripplite_usb.c
|
||||
@@ -499,7 +499,7 @@ void usb_comm_fail(int res, const char *msg)
|
||||
static int try = 0;
|
||||
|
||||
switch(res) {
|
||||
- case -EBUSY:
|
||||
+ case LIBUSB_ERROR_BUSY:
|
||||
upslogx(LOG_WARNING, "%s: Device claimed by another process", msg);
|
||||
fatalx(EXIT_FAILURE, "Terminating: EBUSY");
|
||||
break;
|
||||
@@ -907,7 +907,7 @@ void upsdrv_initinfo(void)
|
||||
if(tl_model != TRIPP_LITE_SMARTPRO ) {
|
||||
ret = send_cmd(w_msg, sizeof(w_msg), w_value, sizeof(w_value)-1);
|
||||
if(ret <= 0) {
|
||||
- if(ret == -EPIPE) {
|
||||
+ if(ret == LIBUSB_ERROR_PIPE) {
|
||||
fatalx(EXIT_FAILURE, "Could not reset watchdog. Please check and"
|
||||
"see if usbhid-ups(8) works with this UPS.");
|
||||
} else {
|
|
@ -1,74 +0,0 @@
|
|||
--- drivers/usbhid-ups.c.orig 2015-12-29 12:08:34 UTC
|
||||
+++ drivers/usbhid-ups.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#define DRIVER_VERSION "0.41"
|
||||
|
||||
#include "main.h"
|
||||
+#include "libusb.h"
|
||||
#include "libhid.h"
|
||||
#include "usbhid-ups.h"
|
||||
#include "hidparser.h"
|
||||
@@ -790,22 +790,14 @@ void upsdrv_updateinfo(void)
|
||||
/* Get HID notifications on Interrupt pipe first */
|
||||
if (use_interrupt_pipe == TRUE) {
|
||||
evtCount = HIDGetEvents(udev, event, MAX_EVENT_NUM);
|
||||
- switch (evtCount)
|
||||
- {
|
||||
- case -EBUSY: /* Device or resource busy */
|
||||
- upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
|
||||
- case -EPERM: /* Operation not permitted */
|
||||
- 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 */
|
||||
+ if (evtCount < 0) {
|
||||
+ if (evtCount == LIBUSB_ERROR_BUSY) {
|
||||
+ upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
|
||||
+ }
|
||||
/* Uh oh, got to reconnect! */
|
||||
hd = NULL;
|
||||
- return;
|
||||
- default:
|
||||
+ } else {
|
||||
upsdebugx(1, "Got %i HID objects...", (evtCount >= 0) ? evtCount : 0);
|
||||
- break;
|
||||
}
|
||||
} else {
|
||||
evtCount = 0;
|
||||
@@ -1280,14 +1272,12 @@ static bool_t hid_ups_walk(walkmode_t mode)
|
||||
|
||||
switch (retcode)
|
||||
{
|
||||
- case -EBUSY: /* Device or resource busy */
|
||||
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
|
||||
upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
|
||||
- case -EPERM: /* Operation not permitted */
|
||||
- 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! */
|
||||
hd = NULL;
|
||||
return FALSE;
|
||||
@@ -1298,12 +1288,9 @@ static bool_t hid_ups_walk(walkmode_t mode)
|
||||
case 0:
|
||||
continue;
|
||||
|
||||
- case -ETIMEDOUT: /* Connection timed out */
|
||||
- case -EOVERFLOW: /* Value too large for defined data type */
|
||||
-#ifdef EPROTO
|
||||
- case -EPROTO: /* Protocol error */
|
||||
-#endif
|
||||
- case -EPIPE: /* Broken pipe */
|
||||
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
|
||||
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
|
||||
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
|
||||
default:
|
||||
/* Don't know what happened, try again later... */
|
||||
continue;
|
Loading…
Reference in a new issue