diff -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 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 @@ ups @@ -692,7 +769,7 @@ hald-addon-megatec_usb 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@"