[Nut-upsdev] [RFC apcsmart V3 16/18] drivers/apcsmart.c: don't overuse UPSDELAY

Michal Soltys soltys at ziu.info
Sat Mar 5 10:38:33 UTC 2011


This delay is meant for multicharacter commands, besides
we always guarantee delay by other means - so do the stuff properly.

Signed-off-by: Michal Soltys <soltys at ziu.info>
---
 drivers/apcsmart.c |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/apcsmart.c b/drivers/apcsmart.c
index 0a6a56b..63b91b5 100644
--- a/drivers/apcsmart.c
+++ b/drivers/apcsmart.c
@@ -854,13 +854,15 @@ static int sdcmd_S(int dummy)
 }
 
 /* soft hibernate, hack version for CS 350 */
-static int sdcmd_CS(int tval)
+static int sdcmd_CS(int status)
 {
+	char temp[16];
+
 	upsdebugx(1, "Using CS 350 'force OB' shutdown method");
-	if (tval & APC_STAT_OL) {
+	if (status & APC_STAT_OL) {
 		upsdebugx(1, "On-line - forcing OB temporarily");
 		ser_send_char(upsfd, 'U');
-		usleep(UPSDELAY);
+		ser_get_line(upsfd, temp, sizeof(temp), ENDCHAR, IGNCHARS, SER_WAIT_SEC, SER_WAIT_USEC);
 	}
 	return sdcmd_S(tval);
 }
@@ -874,7 +876,7 @@ static int sdcmd_ATn(int cnt)
 {
 	int n = 0, mmax, ret;
 	const char *strval;
-	char timer[4];
+	char temp[16];
 
 	mmax = cnt == 2 ? 99 : 999;
 
@@ -885,14 +887,14 @@ static int sdcmd_ATn(int cnt)
 			n = 0;
 	}
 
-	snprintf(timer, sizeof(timer), "%.*d", cnt, n);
+	snprintf(temp, sizeof(temp), "%.*d", cnt, n);
 
 	ser_flush_in(upsfd, IGNCHARS, nut_debug_level);
 	upsdebugx(1, "Issuing hard hibernate with %d minutes additional wakeup delay", n*6);
 
 	ser_send_char(upsfd, APC_CMD_GRACEDOWN);
 	usleep(CMDLONGDELAY);
-	ser_send_pace(upsfd, UPSDELAY, timer);
+	ser_send_pace(upsfd, UPSDELAY, temp);
 
 	ret = sdok();
 	if (ret || cnt == 3)
@@ -905,8 +907,7 @@ static int sdcmd_ATn(int cnt)
 	 * silent (YMMV);
 	 */
 	ser_send_char(upsfd, APC_CMD_GRACEDOWN);
-	usleep(UPSDELAY);
-	ser_flush_in(upsfd, IGNCHARS, nut_debug_level);
+	ser_get_line(upsfd, temp, sizeof(temp), ENDCHAR, IGNCHARS, SER_WAIT_SEC, SER_WAIT_USEC);
 
 	return 0;
 }
-- 
1.7.2.1




More information about the Nut-upsdev mailing list