rendered paste bodydiff -u nut-2.2.1/debian/changelog nut-2.2.1/debian/changelog
--- nut-2.2.1/debian/changelog
+++ nut-2.2.1/debian/changelog
@@ -1,3 +1,10 @@
+nut (2.2.1-2.1ubuntu7) hardy; urgency=low
+
+ * debian/patches/01_fix_megatec_regression.dpatch
+ - Fix more megatec_usb driver regressions. (LP: #215389)
+
+ -- Chuck Short <zulcss@ubuntu.com> Mon, 14 Apr 2008 14:25:48 -0400
+
nut (2.2.1-2.1ubuntu6) hardy; urgency=low
* debian/patches/01_fix_megatec_regression.dpatch
diff -u nut-2.2.1/debian/patches/01_fix_megatec_regression.dpatch nut-2.2.1/debian/patches/01_fix_megatec_regression.dpatch
--- nut-2.2.1/debian/patches/01_fix_megatec_regression.dpatch
+++ nut-2.2.1/debian/patches/01_fix_megatec_regression.dpatch
@@ -3,7 +3,7 @@
@DPATCH@
diff -Naur nut-2.2.1.orig/data/driver.list nut-2.2.1/data/driver.list
--- nut-2.2.1.orig/data/driver.list 2007-12-17 09:45:44.000000000 -0500
-+++ nut-2.2.1/data/driver.list 2008-04-10 09:30:39.000000000 -0400
++++ nut-2.2.1/data/driver.list 2008-04-14 14:28:59.000000000 -0400
@@ -54,6 +54,7 @@
"APC" "(various)" "SNMP monitoring card" "snmp-ups (experimental driver)"
@@ -59,7 +59,7 @@
"Various" "(various)" "Generic RUPS model" "genericups upstype=4"
diff -Naur nut-2.2.1.orig/drivers/megatec.c nut-2.2.1/drivers/megatec.c
--- nut-2.2.1.orig/drivers/megatec.c 2007-12-17 10:13:09.000000000 -0500
-+++ nut-2.2.1/drivers/megatec.c 2008-04-10 09:25:10.000000000 -0400
++++ nut-2.2.1/drivers/megatec.c 2008-04-14 14:28:59.000000000 -0400
@@ -61,6 +61,8 @@
#define MAX_START_DELAY_LEN 4
#define MAX_SHUTDOWN_DELAY_LEN 2
@@ -122,7 +122,7 @@
dstate_setinfo("output.voltage", "%.1f", query.ovolt);
diff -Naur nut-2.2.1.orig/drivers/megatec.h nut-2.2.1/drivers/megatec.h
--- nut-2.2.1.orig/drivers/megatec.h 2007-12-17 10:13:09.000000000 -0500
-+++ nut-2.2.1/drivers/megatec.h 2008-04-10 09:25:54.000000000 -0400
++++ nut-2.2.1/drivers/megatec.h 2008-04-14 14:28:59.000000000 -0400
@@ -26,7 +26,7 @@
#define MEGATEC_H
@@ -134,7 +134,7 @@
#ifdef MEGATEC_SUBDRV
diff -Naur nut-2.2.1.orig/drivers/megatec_usb.c nut-2.2.1/drivers/megatec_usb.c
--- nut-2.2.1.orig/drivers/megatec_usb.c 2007-10-01 09:06:24.000000000 -0400
-+++ nut-2.2.1/drivers/megatec_usb.c 2008-04-10 09:51:59.000000000 -0400
++++ nut-2.2.1/drivers/megatec_usb.c 2008-04-14 14:29:03.000000000 -0400
@@ -46,6 +46,8 @@
static usb_communication_subdriver_t *usb = &usb_subdriver;
static usb_dev_handle *udev = NULL;
@@ -161,28 +161,42 @@
/* agiler subdriver definition */
static int get_data_agiler(char *buffer, int buffer_size);
static int set_data_agiler(const char *str);
-@@ -75,6 +87,7 @@
+@@ -63,6 +75,16 @@
+ set_data_agiler
+ };
+
++/* Phoenixtec Power Co subdriver definition */
++static int get_data_phoenix(char *buffer, int buffer_size);
++static int set_data_phoenix(const char *str);
++
++static subdriver_t phoenix_subdriver = {
++ "phoenix",
++ get_data_phoenix,
++ set_data_phoenix
++};
++
+ /* krauler (ablerex) subdriver definition */
+ static int get_data_krauler(char *buffer, int buffer_size);
+ static int set_data_krauler(const char *str);
+@@ -75,8 +97,10 @@
/* list of subdrivers */
static subdriver_t *subdriver_list[] = {
+ &agiler_old_subdriver,
&agiler_subdriver,
&krauler_subdriver,
++ &phoenix_subdriver,
NULL /* end of list */
-@@ -91,14 +104,16 @@
+ };
- /* list of all known devices */
- static usb_ups_t KnownDevices[] = {
-- {0x05b8, 0x0000, &agiler_subdriver}, /* Agiler UPS */
-- {0x0001, 0x0000, &krauler_subdriver}, /* Krauler UP-M500VA */
-- {0xffff, 0x0000, &krauler_subdriver}, /* Ablerex 625L USB */
+@@ -94,11 +118,13 @@
+ {0x05b8, 0x0000, &agiler_subdriver}, /* Agiler UPS */
+ {0x0001, 0x0000, &krauler_subdriver}, /* Krauler UP-M500VA */
+ {0xffff, 0x0000, &krauler_subdriver}, /* Ablerex 625L USB */
- {0x0665, 0x5161, &agiler_subdriver}, /* Belkin F6C1200-UNV */
-+ {0x05b8, 0x0000, &agiler_old_subdriver}, /* Agiler UPS */
-+ {0x0001, 0x0000, &krauler_subdriver}, /* Krauler UP-M500VA */
-+ {0xffff, 0x0000, &krauler_subdriver}, /* Ablerex 625L USB */
-+ {0x0665, 0x5161, &agiler_old_subdriver}, /* Belkin F6C1200-UNV */
-+ {0x06da, 0x0003, &agiler_old_subdriver}, /* Mustek Powermust */
-+ {0x0f03, 0x0001, &agiler_old_subdriver}, /* Unitek Alpha 1200Sx */
++ {0x0665, 0x5161, &phoenix_subdriver}, /* Belkin F6C1200-UNV */
++ {0x06da, 0x0003, &phoenix_subdriver}, /* Mustek Powermust */
++ {0x0f03, 0x0001, &phoenix_subdriver}, /* Unitek Alpha 1200Sx */
{-1, -1, NULL} /* end of list */
};
@@ -191,7 +205,7 @@
{
usb_ups_t *p;
-@@ -115,6 +130,12 @@
+@@ -115,6 +141,12 @@
return 0;
}
@@ -204,7 +218,7 @@
static void usb_open_error(const char *port)
{
fatalx(EXIT_FAILURE,
-@@ -148,13 +169,8 @@
+@@ -148,13 +180,8 @@
int ser_open(const char *port)
{
@@ -219,7 +233,7 @@
char *subdrv = getval("subdriver");
char *vid = getval("vendorid");
-@@ -162,6 +178,7 @@
+@@ -162,6 +189,7 @@
char *vend = getval("vendor");
char *prod = getval("product");
@@ -227,7 +241,7 @@
if(subdrv)
{
subdriver_t **p;
-@@ -186,9 +203,6 @@
+@@ -186,9 +214,6 @@
fatalx(EXIT_FAILURE, "No subdrivers named \"%s\" found!", subdrv);
}
@@ -237,7 +251,7 @@
/* FIXME: fix "serial" variable */
/* process the UPS selection options */
regex_array[0] = vid;
-@@ -198,11 +212,11 @@
+@@ -198,11 +223,11 @@
regex_array[4] = NULL; /* getval("serial"); */
regex_array[5] = getval("bus");
@@ -253,7 +267,7 @@
}
/* link the matchers */
regex_matcher->next = &subdriver_matcher;
-@@ -211,12 +225,28 @@
+@@ -211,12 +236,28 @@
if (ret < 0)
usb_open_error(port);
@@ -266,10 +280,10 @@
+ }
+ /* link the matchers */
+ reopen_matcher->next = regex_matcher;
-
++
+ /* NOTE: This is here until ser_flush_io() is used in megatec.c */
+ ser_flush_io(0);
-+
+
+ return 0;
+}
+
@@ -285,7 +299,7 @@
break;
}
-@@ -235,22 +265,90 @@
+@@ -235,22 +276,90 @@
int ser_set_rts(int fd, int state)
{
@@ -377,7 +391,7 @@
return -1;
va_start(ap, fmt);
-@@ -264,7 +362,12 @@
+@@ -264,7 +373,12 @@
buf[sizeof(buf) - 1] = 0;
}
@@ -391,7 +405,7 @@
}
int ser_get_line(int fd, char *buf, size_t buflen, char endchar, const char *ignset, long d_sec, long d_usec)
-@@ -272,16 +375,18 @@
+@@ -272,16 +386,18 @@
int len;
char *src, *dst, c;
@@ -415,7 +429,7 @@
c = *src;
if (c == endchar)
-@@ -294,25 +399,77 @@
+@@ -294,25 +410,77 @@
}
/* terminate string if we have space */
@@ -499,7 +513,70 @@
static int set_data_agiler(const char *str)
{
return usb->set_report(udev, 0, (unsigned char *)str, strlen(str));
-@@ -337,87 +494,95 @@
+@@ -325,6 +493,62 @@
+
+
+ /*
++ Phoenixtec Power Co serial-to-usb device.
++*/
++static char phoenix_buffer[32];
++
++static int set_data_phoenix(const char *str)
++{
++ unsigned int count;
++
++ memset(phoenix_buffer, '\0', sizeof(phoenix_buffer));
++
++ snprintf(phoenix_buffer, sizeof(phoenix_buffer), "%s", str);
++
++ if (!strcmp(phoenix_buffer, "I\r") || !strcmp(phoenix_buffer, "C\r")) {
++ /* Ignore these, since they seem to lock up the connection */
++ return strlen(phoenix_buffer);
++ }
++
++ for (count = 0; count < strlen(phoenix_buffer); count += 8) {
++
++ if (usb->set_report(udev, 0, (unsigned char *)(phoenix_buffer + count), 8) < 1) {
++ return -1;
++ }
++ }
++
++ return strlen(phoenix_buffer);
++}
++
++static int get_data_phoenix(char *buffer, int buffer_size)
++{
++ int count;
++
++ memset(buffer, '\0', buffer_size);
++
++ if (!strcmp(phoenix_buffer, "I\r") || !strcmp(phoenix_buffer, "C\r")) {
++ /* Echo back unsupported commands */
++ snprintf(buffer, buffer_size, "%s", phoenix_buffer);
++ return strlen(buffer);
++ }
++
++ for (count = 8; count <= buffer_size; count += 8) {
++
++ /* Read data in 8-byte chunks, break on a timeout */
++ if (usb->get_interrupt(udev, (unsigned char *)&buffer[count-8], 8, 1000) < 0) {
++ return count-8;
++ }
++
++ upsdebugx(3, "get_data_phoenix: got so far [%s]", buffer);
++ upsdebug_hex(4, "get_data_phoenix", (unsigned char *)buffer, count);
++ }
++
++ upsdebugx(3, "get_data_phoenix: buffer too small");
++ return -1;
++}
++
++
++/*
+ Krauler serial-over-usb device.
+
+ Protocol was reverse-engineered using Windows driver.
+@@ -337,87 +561,95 @@
typedef struct {
char *str; /* Megatec command */
int index; /* Krauler string index for this command */
@@ -577,10 +654,10 @@
+ return res;
}
- }
-
+-
- return strlen(str);
- }
--
+
- upsdebugx(4, "set_data_krauler: unknown command [%s]", str);
- return 0;
-}
@@ -651,7 +728,7 @@
}
diff -Naur nut-2.2.1.orig/scripts/hal/20-ups-nut-device.fdi nut-2.2.1/scripts/hal/20-ups-nut-device.fdi
--- nut-2.2.1.orig/scripts/hal/20-ups-nut-device.fdi 2007-10-01 08:59:22.000000000 -0400
-+++ nut-2.2.1/scripts/hal/20-ups-nut-device.fdi 2008-04-10 09:31:09.000000000 -0400
++++ nut-2.2.1/scripts/hal/20-ups-nut-device.fdi 2008-04-14 14:28:59.000000000 -0400
@@ -162,6 +162,14 @@
<merge key="battery.type" type="string">ups</merge>
</match>
@@ -692,7 +769,7 @@
<merge key="info.addons" type="strlist">hald-addon-megatec_usb</merge>
diff -Naur nut-2.2.1.orig/scripts/udev/nut-usbups.rules.in nut-2.2.1/scripts/udev/nut-usbups.rules.in
--- nut-2.2.1.orig/scripts/udev/nut-usbups.rules.in 2007-10-15 07:16:52.000000000 -0400
-+++ nut-2.2.1/scripts/udev/nut-usbups.rules.in 2008-04-10 09:32:14.000000000 -0400
++++ nut-2.2.1/scripts/udev/nut-usbups.rules.in 2008-04-14 14:28:59.000000000 -0400
@@ -24,7 +24,7 @@
# LIEBERT/PowerSure Personal XT
SYSFS{idVendor}=="06da", SYSFS{idProduct}=="ffff", MODE="664", GROUP="@RUN_AS_GROUP@"