All pastes #985021 Raw Edit

Someone

public text v1 · immutable
·published 2008-04-14 18:40 UTC
rendered paste body
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 <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@"