untested code!
Mostly deal with usleep, but there are a few places where sleep is
replaced with nanosleep.

Index: b/clients/upssched.c
===================================================================
--- a/clients/upssched.c        2011-05-31 13:36:47.000000000 +0300
+++ b/clients/upssched.c        2011-08-17 00:40:17.000000000 +0300
@@ -652,7 +652,7 @@ static int check_parent(const char *cmd,
                unlink(lockfn);
 
                /* give the other one a chance to start it, then try again */
-               usleep(250000);
+               struct timespec delay = {0, 250e6}; nanosleep(&delay, NULL);
        }
 
        upslog_with_errno(LOG_ERR, "Failed to connect to parent and failed to 
create parent");
@@ -705,7 +705,7 @@ static void sendcmd(const char *cmd, con
                if (pipefd == PARENT_STARTED) {
 
                        /* loop back and try to connect now */
-                       usleep(250000);
+                       struct timespec delay = {0, 250e6}; nanosleep(&delay, 
NULL);
                        continue;
                }
 
Index: b/clients/upsmon.c
===================================================================
--- a/clients/upsmon.c  2011-05-31 13:36:47.000000000 +0300
+++ b/clients/upsmon.c  2011-08-17 00:40:17.000000000 +0300
@@ -610,7 +610,7 @@ static void slavesync(void)
                        return;
                }
 
-               usleep(250000);
+               struct timespec delay = {0, 250e6}; nanosleep(&delay, NULL);
        }
 }
 
Index: b/docs/new-drivers.txt
===================================================================
--- a/docs/new-drivers.txt      2011-05-31 13:36:47.000000000 +0300
+++ b/docs/new-drivers.txt      2011-08-17 00:40:17.000000000 +0300
@@ -632,9 +632,9 @@ depends on how fast your system is.
 
 You should check your driver with `strace` or its equivalent on your
 system.  If the driver is calling read() multiple times, consider adding
-a call to usleep before going into the ser_read_* call.  That will give
-it a chance to accumulate so you get the whole thing with one call to
-read without looping back for more.
+a call to nanosleep before going into the ser_read_* call.  That will
+give it a chance to accumulate so you get the whole thing with one call
+to read without looping back for more.
 
 This is not a request to save CPU time, even though it may do that.  The
 important part here is making the strace/ktrace output easier to read.
Index: b/drivers/safenet.c
===================================================================
--- a/drivers/safenet.c 2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/safenet.c 2011-08-17 00:40:17.000000000 +0300
@@ -299,7 +299,7 @@ void upsdrv_initinfo(void)
 
        dstate_setinfo("driver.version.internal", "%s", DRIVER_VERSION);
        
-       usleep(100000);
+       struct timespec delay = {0, 100e6}; nanosleep(&delay, NULL);
 
        /*
         * Very crude hardware detection. If an UPS is attached, it will set DSR
Index: b/drivers/powerpanel.c
===================================================================
--- a/drivers/powerpanel.c      2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/powerpanel.c      2011-08-17 00:40:17.000000000 +0300
@@ -165,7 +165,7 @@ void upsdrv_initups(void)
                }
 
                ser_set_dtr(upsfd, 1);
-               usleep(10000);
+               struct timespec delay = {0, 10e6}; nanosleep(&delay, NULL);
 
                if (subdriver[mode]->initups() > 0) {
                        upslogx(LOG_INFO, "CyberPower UPS with %s protocol on 
%s detected", subdriver[mode]->version, device_path);
@@ -173,7 +173,7 @@ void upsdrv_initups(void)
                }
 
                ser_set_dtr(upsfd, 0);
-               usleep(10000);
+               nanosleep(&delay, NULL);
        }
 
        fatalx(EXIT_FAILURE, "CyberPower UPS not found on %s", device_path);
Index: b/drivers/bestups.c
===================================================================
--- a/drivers/bestups.c 2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/bestups.c 2011-08-17 00:40:17.000000000 +0300
@@ -252,7 +252,7 @@ static void ups_sync(void)
                if ((ret > 0) && (buf[0] == '('))
                        return;
 
-               usleep(250000);
+               struct timespec delay = {0, 250e6}; nanosleep(&delay, NULL);
        }
 
        fatalx(EXIT_FAILURE, "Unable to detect a Best/SOLA or Phoenix protocol 
UPS");
@@ -333,7 +333,7 @@ void upsdrv_updateinfo(void)
        }
 
        /* these things need a long time to respond completely */
-       usleep(200000);
+       struct timespec delay = {0, 200e6}; nanosleep(&delay, NULL);
 
        ret = ser_get_line(upsfd, buf, sizeof(buf), ENDCHAR, "", 
                SER_WAIT_SEC, SER_WAIT_USEC);
Index: b/drivers/microdowell.c
===================================================================
--- a/drivers/microdowell.c     2011-08-17 00:40:17.000000000 +0300
+++ b/drivers/microdowell.c     2011-08-17 00:40:17.000000000 +0300
@@ -223,8 +223,9 @@ unsigned char * CmdSerial(unsigned char
        /* The default error code (no received character) */
        ErrCode = ERR_COM_NO_CHARS ;
 
-   SendCmdToSerial(OutBuffer, Len) ;
-       usleep(10000) ; /* small delay (1/100 s) */
+       SendCmdToSerial(OutBuffer, Len) ;
+       /* small delay (1/100 s) */
+       struct timespec delay = {0, 10e6}; nanosleep(&delay, NULL);
 
        /* get chars until timeout */
        BuffLen = 0 ;
@@ -305,7 +306,8 @@ static int detect_hardware(void)
                        {
                        upsdebugx(1, "[%d] get 'UPS model': %s", retries, 
PrintErr(ups.ErrCode));
                        upslogx(LOG_ERR, "[%d] Unable to identify UPS model 
[%s]", retries, PrintErr(ups.ErrCode));
-                       usleep(100000) ; /* small delay (1/10 s) for next retry 
*/
+                       /* small delay (1/10 s) for next retry */
+                       struct timespec delay = {0, 100e6}; nanosleep(&delay, 
NULL);
                        }
                }
 
@@ -971,7 +973,8 @@ void upsdrv_initups(void)
        ser_set_dtr(upsfd, 0);
        ser_set_rts(upsfd, 0);
 
-       usleep(10000) ; /* small delay (1/100 s)) */
+       /* small delay (1/100 s) */
+       struct timespec delay = {0, 10e6}; nanosleep(&delay, NULL);
 }
 
 void upsdrv_cleanup(void)
Index: b/drivers/victronups.c
===================================================================
--- a/drivers/victronups.c      2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/victronups.c      2011-08-17 03:09:10.000000000 +0300
@@ -49,8 +49,8 @@ upsdrv_info_t upsdrv_info = {
 #define ENDCHAR        '\r'
 #define IGNCHARS "\n"
 
-#define UPS_DELAY 150000
-#define UPS_LONG_DELAY 450000
+#define UPS_DELAY 150e6
+#define UPS_LONG_DELAY 450e6
 
 #define VICTRON_OVER 128
 #define VICTRON_RB 1
@@ -86,7 +86,7 @@ static int get_data (const char *out_str
 {
        int ret_code;
        ser_send(upsfd, "%s%c", out_string, ENDCHAR);
-       usleep (UPS_DELAY);
+       struct timespec delay = {0, UPS_DELAY}; nanosleep(&delay, NULL);
        ret_code = ser_get_line(upsfd, in_string, LENGTH_TEMP, ENDCHAR, 
                                IGNCHARS, 3, 0);
        if (ret_code < 1) {            
@@ -498,7 +498,7 @@ void upsdrv_updateinfo(void)
 void upsdrv_shutdown(void)
 {
        ser_send(upsfd, "vCc0!%c", ENDCHAR);
-       usleep(UPS_DELAY);
+       struct timespec delay = {0, UPS_DELAY}; nanosleep(&delay, NULL);
 
        ser_send(upsfd, "vCb%i!%c", sdwdelay, ENDCHAR); 
 }
@@ -536,15 +536,16 @@ void upsdrv_initups(void)
        /* inicializace a synchronizace UPS */
 
        ser_send_char(upsfd, ENDCHAR);
-       usleep (UPS_LONG_DELAY);
+       struct timespec delay = {0, UPS_LONG_DELAY}; nanosleep(&delay, NULL);
        ser_send(upsfd, "?%c", ENDCHAR);
-       usleep (UPS_LONG_DELAY);
+       nanosleep(&delay, NULL);
        ser_get_line(upsfd, temp, sizeof(temp), ENDCHAR, IGNCHARS, 3, 0);
        ser_send(upsfd, "?%c", ENDCHAR);
-       usleep (UPS_LONG_DELAY);
+       nanosleep(&delay, NULL);
        ser_get_line(upsfd, temp, sizeof(temp), ENDCHAR, IGNCHARS, 3, 0);
        ser_send(upsfd, "?%c", ENDCHAR);
-       usleep (UPS_DELAY);
+       delay.tv_sec = 0; delay.tv_nsec = UPS_DELAY;
+       nanosleep(&delay, NULL);
        ser_get_line(upsfd, temp, sizeof(temp), ENDCHAR, IGNCHARS, 3, 0);
 
 
Index: b/drivers/apcsmart.c
===================================================================
--- a/drivers/apcsmart.c        2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/apcsmart.c        2011-08-17 03:06:07.000000000 +0300
@@ -822,7 +822,7 @@ static int sdcmd_CS(int tval)
        if (tval & APC_STAT_OL) {
                upsdebugx(1, "On-line - forcing OB temporarily");
                ser_send_char(upsfd, 'U');
-               usleep(UPSDELAY);
+               struct timespec delay = {0, UPSDELAY}; nanosleep(&delay, NULL);
        }
        return sdcmd_S(tval);
 }
@@ -837,6 +837,7 @@ static int sdcmd_ATn(int cnt)
        int n = 0, mmax, ret;
        const char *strval;
        char timer[4];
+       struct timespec delay;
 
        mmax = cnt == 2 ? 99 : 999;
 
@@ -853,7 +854,8 @@ static int sdcmd_ATn(int cnt)
        upsdebugx(1, "Issuing hard hibernate with %d minutes additional wakeup 
delay", n*6);
 
        ser_send_char(upsfd, APC_CMD_GRACEDOWN);
-       usleep(CMDLONGDELAY);
+       delay.tv_sec = CMDLONGDELS; delay.tv_nsec = CMDLONGDELNS;
+       nanosleep(&delay, NULL);
        ser_send_pace(upsfd, UPSDELAY, "%s", timer);
 
        ret = sdok();
@@ -867,7 +869,8 @@ static int sdcmd_ATn(int cnt)
         * silent (YMMV);
         */
        ser_send_char(upsfd, APC_CMD_GRACEDOWN);
-       usleep(UPSDELAY);
+       delay.tv_sec = 0; delay.tv_nsec = UPSDELAY;
+       nanosleep(&delay, NULL);
        ser_flush_in(upsfd, IGNCHARS, nut_debug_level);
 
        return 0;
@@ -880,7 +883,8 @@ static int sdcmd_K(int dummy)
        upsdebugx(1, "Issuing delayed poweroff");
 
        ser_send_char(upsfd, APC_CMD_SHUTDOWN);
-       usleep(CMDLONGDELAY);
+       struct timespec delay = {CMDLONGDELS, CMDLONGDELNS};
+       nanosleep(&delay, NULL);
        ser_send_char(upsfd, APC_CMD_SHUTDOWN);
 
        return sdok();
@@ -893,7 +897,8 @@ static int sdcmd_Z(int dummy)
        upsdebugx(1, "Issuing immediate poweroff");
 
        ser_send_char(upsfd, APC_CMD_OFF);
-       usleep(CMDLONGDELAY);
+       struct timespec delay = {CMDLONGDELS, CMDLONGDELNS};
+       nanosleep(&delay, NULL);
        ser_send_char(upsfd, APC_CMD_OFF);
 
        return sdok();
@@ -1229,7 +1234,7 @@ static int setvar_string(apc_vartab_t *v
                return STAT_SET_HANDLED;        /* FUTURE: failed */
        }
 
-       usleep(UPSDELAY);
+       struct timespec delay = {0, UPSDELAY}; nanosleep(&delay, NULL);
 
        for (i = 0; i < strlen(val); i++) {
                ret = ser_send_char(upsfd, val[i]);
@@ -1239,7 +1244,7 @@ static int setvar_string(apc_vartab_t *v
                        return STAT_SET_HANDLED;        /* FUTURE: failed */
                }
 
-               usleep(UPSDELAY);
+               nanosleep(&delay, NULL);
        }
 
        /* pad to 8 chars with CRs */
@@ -1251,7 +1256,7 @@ static int setvar_string(apc_vartab_t *v
                        return STAT_SET_HANDLED;        /* FUTURE: failed */
                }
 
-               usleep(UPSDELAY);
+               nanosleep(&delay, NULL);
        }
 
        ret = read_buf(temp, sizeof(temp));
@@ -1314,7 +1319,8 @@ static int do_cmd(apc_cmdtab_t *ct)
 
        /* some commands have to be sent twice with a 1.5s gap */
        if (ct->flags & APC_REPEAT) {
-               usleep(CMDLONGDELAY);
+               struct timespec delay = {CMDLONGDELS, CMDLONGDELNS};
+               nanosleep(&delay, NULL);
 
                ret = ser_send_char(upsfd, ct->cmd);
 
Index: b/drivers/bcmxcp_ser.c
===================================================================
--- a/drivers/bcmxcp_ser.c      2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/bcmxcp_ser.c      2011-08-17 03:21:04.000000000 +0300
@@ -49,7 +49,7 @@ static void send_command(unsigned char *
 
                if (retry == PW_MAX_TRY) {
                        ser_send_char(upsfd, 0x1d);     /* last retry is 
preceded by a ESC.*/
-                       usleep(250000);
+                       struct timespec delay = {0, 250e6}; nanosleep(&delay, 
NULL);
                }
 
                sent = ser_send_buf(upsfd, sbuf, command_length);
@@ -255,6 +255,7 @@ void pw_comm_setup(const char *port)
        unsigned char   id_command = PW_ID_BLOCK_REQ;
        unsigned char   answer[256];
        int             i = 0, baud, mybaud = 0, ret = -1;
+       struct timespec delay;
 
        if (getval("baud_rate") != NULL)
        {
@@ -273,12 +274,14 @@ void pw_comm_setup(const char *port)
 
                ser_set_speed(upsfd, device_path, mybaud);
                ser_send_char(upsfd, 0x1d);     /* send ESC to take it out of 
menu */
-               usleep(90000);
+               delay.tv_sec = 0; delay.tv_nsec = 90e6;
+               nanosleep(&delay, NULL);
                send_write_command(AUT, 4);
-               usleep(500000);
+               delay.tv_sec = 0; delay.tv_nsec = 500e6;
+               nanosleep(&delay, NULL);
                ret = command_sequence(&command, 1, answer);
                if (ret <= 0) {
-                       usleep(500000);
+                       nanosleep(&delay, NULL);  /* 0.5 sec delay */
                        ret = command_sequence(&id_command, 1, answer);
                }
 
@@ -296,12 +299,14 @@ void pw_comm_setup(const char *port)
 
                ser_set_speed(upsfd, device_path, pw_baud_rates[i].rate);
                ser_send_char(upsfd, 0x1d);     /* send ESC to take it out of 
menu */
-               usleep(90000);
+               delay.tv_sec = 0; delay.tv_nsec = 90e6;
+               nanosleep(&delay, NULL);
                send_write_command(AUT, 4);
-               usleep(500000);
+               delay.tv_sec = 0; delay.tv_nsec = 500e6;
+               nanosleep(&delay, NULL);
                ret = command_sequence(&command, 1, answer);
                if (ret <= 0) {
-                       usleep(500000);
+                       nanosleep(&delay, NULL);  /* 0.5 sec delay */
                        ret = command_sequence(&id_command, 1, answer);
                }
 
Index: b/drivers/belkin.c
===================================================================
--- a/drivers/belkin.c  2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/belkin.c  2011-08-17 00:40:17.000000000 +0300
@@ -113,7 +113,7 @@ static int get_belkin_reply(char *buf)
        long    cnt;
        char    tmp[8];
 
-       usleep(25000);
+       struct timespec delay = {0, 25e6}; nanosleep(&delay, NULL);
 
        /* pull first 7 bytes to get data length - like ~00D004 */
        ret = ser_get_buf_len(upsfd, (unsigned char *)tmp, 7, 2, 0);
@@ -160,7 +160,7 @@ static int do_broken_rat(char *buf)
        long    cnt;
        char    tmp[8];
 
-       usleep(25000);
+       struct timespec delay = {0, 25e6}; nanosleep(&delay, NULL);
 
        /* pull first 7 bytes to get data length - like ~00D004 */
        ret = ser_get_buf_len(upsfd, (unsigned char *)tmp, 7, 2, 0);
@@ -412,7 +412,7 @@ static void do_off(void)
 
        upslogx(LOG_INFO, "Sending powerdown command to UPS\n");
        send_belkin_command(CONTROL,POWER_OFF,"1;1");
-       usleep(1500000);
+       struct timespec delay = {1, 500e6}; nanosleep(&delay, NULL);
        send_belkin_command(CONTROL,POWER_OFF,"1;1");
 }
 
Index: b/drivers/belkinunv.c
===================================================================
--- a/drivers/belkinunv.c       2011-08-17 00:40:17.000000000 +0300
+++ b/drivers/belkinunv.c       2011-08-17 00:40:17.000000000 +0300
@@ -239,7 +239,7 @@ static void belkin_nut_open_tty(void)
           "smart" mode */
        ser_set_dtr(upsfd, 0);
        ser_set_rts(upsfd, 1);
-       sleep(1);
+       struct timespec delay = {1, 0}; nanosleep(&delay, NULL);
 
        ser_flush_io(upsfd);
 }
@@ -495,7 +495,7 @@ static int belkin_std_open_tty(const cha
        
        /* sleep at least 0.25 seconds for the UPS to wake up. Belkin's own
           software sleeps 1 second, so that's what we do, too. */
-       usleep(1000000);
+       struct timespec delay = {1, 0}; nanosleep(&delay, NULL);
        
        /* flush incoming data again, and read any remaining garbage
           bytes. There should not be any. */
@@ -526,7 +526,7 @@ static int belkin_std_upsread(int fd, un
                r = read(fd, &buf[count], n-count);
                if (r==-1 && errno==EAGAIN) { 
                        /* non-blocking i/o, no data available */
-                       usleep(100000);
+                       struct timespec delay = {0, 100e6}; nanosleep(&delay, 
NULL);
                        tries++;
                } else if (r == -1) {
                        return -1;
@@ -550,7 +550,7 @@ static int belkin_std_upswrite(int fd, u
                r = write(fd, &buf[count], n-count);
                if (r==-1 && errno==EAGAIN) { 
                        /* non-blocking i/o, no data available */
-                       usleep(100000);
+                       struct timespec delay = {0, 100e6}; nanosleep(&delay, 
NULL);
                        tries++;
                } else if (r == -1) {
                        return -1;
@@ -752,6 +752,8 @@ static int belkin_wait(void)
        int r;
        int bs, ov, bl, st;
 
+       struct timespec delay = {1, 0};
+
        /* read command line '-x' options */
        val = getval("wait");
        if (val) {
@@ -790,7 +792,7 @@ static int belkin_wait(void)
                if (fd == -1) {
                        failcount++;
                        failerrno = errno;
-                       sleep(1);
+                       nanosleep(&delay, NULL);
                        continue;
                }
 
@@ -802,7 +804,7 @@ static int belkin_wait(void)
                        failerrno = errno;
                        close(fd);
                        fd = -1;
-                       sleep(1);
+                       nanosleep(&delay, NULL);
                        continue;
                }
                ov = belkin_std_read_int(fd, REG_OUTPUTVOLT); /* output voltage 
*/
@@ -811,7 +813,7 @@ static int belkin_wait(void)
                        failerrno = errno;
                        close(fd);
                        fd = -1;
-                       sleep(1);
+                       nanosleep(&delay, NULL);
                        continue;
                }
                bl = belkin_std_read_int(fd, REG_BATLEVEL);   /* battery level 
*/
@@ -820,7 +822,7 @@ static int belkin_wait(void)
                        failerrno = errno;
                        close(fd);
                        fd = -1;
-                       sleep(1);
+                       nanosleep(&delay, NULL);
                        continue;
                }
                /* successfully got data from UPS */
@@ -837,7 +839,7 @@ static int belkin_wait(void)
                if (st == ST_ONLINE && bl >= level) {
                        break;
                }
-               sleep(1);
+               nanosleep(&delay, NULL);
        }
 
        /* termination condition reached */
Index: b/drivers/bestfcom.c
===================================================================
--- a/drivers/bestfcom.c        2011-08-17 00:40:17.000000000 +0300
+++ b/drivers/bestfcom.c        2011-08-17 00:40:17.000000000 +0300
@@ -210,7 +210,7 @@ static int execute(const char *cmd, char
        ser_send(upsfd, "%s", cmd);
 
        /* Give the UPS some time to chew on what we just sent */
-       usleep(50000);
+       struct timespec delay = {0, 50e6}; nanosleep(&delay, NULL);
 
        /* delete command echo up to \012 but no further */
        for (ch = '\0'; ch != '\012'; ser_get_char(upsfd, &ch, 0, 10000));
@@ -458,18 +458,19 @@ void upsdrv_help(void)
 
 static void sync_serial(void) {
        char buffer[10];
+       struct timespec delay = {UPSDELAY, 0};
 
        ser_flush_in(upsfd, "", 1);
 
        ser_send(upsfd, "\r");
-       sleep(UPSDELAY);
+       nanosleep(&delay, NULL);
        ser_get_line(upsfd, buffer, sizeof(buffer), '\r', "\012", 3, 0);
        ser_get_line(upsfd, buffer, sizeof(buffer), ENDCHAR, IGNCHARS, 3, 0);
 
        while (ser_get_line(upsfd, buffer, sizeof(buffer), '>', "\012", 3, 0) 
<= 0) {
                printf(".");
                ser_send(upsfd, "\r");
-               sleep(UPSDELAY);
+               nanosleep(&delay, NULL);
        }
 }
 
@@ -537,7 +538,7 @@ void upsdrv_init_nofc(void)
        ser_send(upsfd, "id\r");
 
        /* prevent upsrecv from timing out      */
-       sleep(UPSDELAY);
+       struct timespec delay = {UPSDELAY, 0}; nanosleep(&delay, NULL);
 
        ser_get_line(upsfd, rstring, sizeof(rstring), '>', "", 3, 0);
 
Index: b/drivers/bestfortress.c
===================================================================
--- a/drivers/bestfortress.c    2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/bestfortress.c    2011-08-17 00:40:17.000000000 +0300
@@ -23,7 +23,7 @@
 #include "main.h"
 #include "serial.h"
 
-#define UPSDELAY 50000 /* 50 ms delay required for reliable operation */
+#define UPSDELAY 50e6  /* 50e6 ns delay required for reliable operation */
 #define SER_WAIT_SEC   2       /* allow 2.0 sec for ser_get calls */
 #define SER_WAIT_USEC  0
 #define ENDCHAR                '\r'
@@ -162,7 +162,7 @@ static int upssend(const char *fmt,...)
        char buf[1024], *p;
        va_list ap;
        unsigned int    sent = 0;
-       int d_usec = UPSDELAY;
+       struct timespec d_nsec = {0, UPSDELAY};
 
        va_start(ap, fmt);
        ret = vsnprintf(buf, sizeof(buf), fmt, ap);
@@ -175,8 +175,7 @@ static int upssend(const char *fmt,...)
                if (write(upsfd, p, 1) != 1)
                        return -1;
 
-               if (d_usec)
-                       usleep(d_usec);
+               nanosleep(&d_nsec, NULL);
 
                sent++;
        }
Index: b/drivers/blazer_ser.c
===================================================================
--- a/drivers/blazer_ser.c      2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/blazer_ser.c      2011-08-17 00:40:17.000000000 +0300
@@ -179,7 +179,7 @@ void upsdrv_initups(void)
        /*
         * Allow some time to settle for the cablepower
         */
-       usleep(100000);
+       struct timespec delay = {0, 100e6}; nanosleep(&delay, NULL);
 #endif
        blazer_initups();
 }
Index: b/drivers/isbmex.c
===================================================================
--- a/drivers/isbmex.c  2011-08-17 00:40:17.000000000 +0300
+++ b/drivers/isbmex.c  2011-08-17 00:40:17.000000000 +0300
@@ -180,7 +180,7 @@ static const char *getpacket(int *we_kno
   if (bytes_per_packet && r < bytes_per_packet){
             ssize_t rr;
             D(printf("short read...\n");)
-            usleep(500000);
+            struct timespec delay = {0, 500e6}; nanosleep(&delay, NULL);
              tv.tv_sec = 2;
              tv.tv_usec = 0;
              ret=select(upsfd+1,  &readfds, NULL, NULL, &tv);
@@ -327,7 +327,7 @@ void upsdrv_shutdown(void)
        for(i=0;i<=5;i++)
        {
                ser_send_char(upsfd, '#');
-               usleep(50000);
+               struct timespec delay = {0, 50e6}; nanosleep(&delay, NULL);
        }
 }
 
Index: b/drivers/mge-utalk.c
===================================================================
--- a/drivers/mge-utalk.c       2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/mge-utalk.c       2011-08-17 03:26:12.000000000 +0300
@@ -89,7 +89,7 @@ upsdrv_info_t upsdrv_info = {
 #define MGE_REPLY_DELAY 1000
 
 /* delay after enable_ups_comm    */
-#define MGE_CONNECT_DELAY 500000
+#define MGE_CONNECT_DELAY 500e6
 
 #define MGE_COMMAND_ENDCHAR "\r\n"   /* some UPS need \r and \n */
 #define MGE_REPLY_ENDCHAR   '\r'
@@ -644,7 +644,7 @@ static void disable_ups_comm(void)
 {
        upsdebugx(1, "disable_ups_comm()");
        ser_flush_in(upsfd, "?\r\n", 0);
-       usleep(MGE_CONNECT_DELAY);
+       struct timespec delay = {0, MGE_CONNECT_DELAY}; nanosleep(&delay, NULL);
        mge_command(NULL, 0, "Ax 0");
 }
 
@@ -659,7 +659,7 @@ static void enable_ups_comm(void)
                mge_command(NULL, 0, "Z");   /* send Z twice --- speeds up 
re-connect */
                mge_command(NULL, 0, "Z");
                mge_command(NULL, 0, "Ax 1");
-               usleep(MGE_CONNECT_DELAY);
+               struct timespec delay = {0, MGE_CONNECT_DELAY}; 
nanosleep(&delay, NULL);
        }
        
        ser_flush_in(upsfd, "?\r\n", nut_debug_level);
@@ -863,6 +863,7 @@ static int mge_command(char *reply, int
        int bytes_rcvd = 0;
        int ret;
        va_list ap;
+       struct timespec delay;
 
        /* build command string */
        va_start(ap, fmt);
@@ -875,11 +876,13 @@ static int mge_command(char *reply, int
        va_end(ap);
 
        /* Delay a bit to avoid overlap of a previous answer */
-       usleep(100000);
+       delay.tv_sec = 0; delay.tv_nsec = 100e6;
+       nanosleep(&delay, NULL);
        
        /* flush received, unread data */
        tcflush(upsfd, TCIFLUSH);
        
+       delay.tv_sec = 0; delay.tv_nsec = MGE_CHAR_DELAY;
        /* send command */
        for (p = command; *p; p++) {
                if ( isprint(*p & 0xFF) )
@@ -891,7 +894,7 @@ static int mge_command(char *reply, int
                        return -1;
        
                bytes_sent++;
-               usleep(MGE_CHAR_DELAY);
+               nanosleep(&delay, NULL);  /* MGE_CHAR_DELAY */
        }
 
        /* send terminating string */
@@ -906,14 +909,14 @@ static int mge_command(char *reply, int
                                return -1;
 
                        bytes_sent++;
-                       usleep(MGE_CHAR_DELAY);
+                       nanosleep(&delay, NULL);  /* MGE_CHAR_DELAY */
                }
        }
 
        if ( !reply )
                return bytes_rcvd;
        else
-               usleep(MGE_REPLY_DELAY);
+               nanosleep(&delay, NULL);  /* MGE_CHAR_DELAY */
 
        bytes_rcvd = ser_get_line(upsfd, reply, replylen,
                MGE_REPLY_ENDCHAR, MGE_REPLY_IGNCHAR, 3, 0);
Index: b/drivers/optiups.c
===================================================================
--- a/drivers/optiups.c 2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/optiups.c 2011-08-17 00:40:17.000000000 +0300
@@ -133,7 +133,7 @@ static ezfill_t _initv[] = {
 static inline int optireadline(void)
 {
        int r;
-       usleep(150000);
+       struct timespec delay = {0, 150e6}; nanosleep(&delay, NULL);
        r = ser_get_line(upsfd, _buf, sizeof(_buf), ENDCHAR, IGNCHARS, 0, 
500000 );
        _buf[sizeof(_buf)-1] = 0;
        if ( r > 0 )
Index: b/drivers/powerp-bin.c
===================================================================
--- a/drivers/powerp-bin.c      2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/powerp-bin.c      2011-08-17 00:40:17.000000000 +0300
@@ -232,7 +232,7 @@ static int powpan_command(const char *bu
 
        upsdebug_hex(3, "send", buf, bufsize);
 
-       usleep(100000);
+       struct timespec delay = {0, 100e6}; nanosleep(&delay, NULL);
 
        ret = ser_get_buf_len(upsfd, powpan_answer, bufsize-1, SER_WAIT_SEC, 
SER_WAIT_USEC);
 
@@ -427,7 +427,7 @@ static int powpan_status(status_t *statu
 
        upsdebug_hex(3, "send", "D\r", 2);
 
-       usleep(200000);
+       struct timespec delay = {0, 200e6}; nanosleep(&delay, NULL);
 
        ret = ser_get_buf_len(upsfd, status, sizeof(*status), SER_WAIT_SEC, 
SER_WAIT_USEC);
 
@@ -576,7 +576,7 @@ static int powpan_initups(void)
 
                upsdebug_hex(3, "send", "F\r", 2);
 
-               usleep(200000);
+               struct timespec delay = {0, 200e6}; nanosleep(&delay, NULL);
 
                ret = ser_get_line(upsfd, powpan_answer, sizeof(powpan_answer),
                        ENDCHAR, IGNCHAR, SER_WAIT_SEC, SER_WAIT_USEC);
Index: b/drivers/powerp-txt.c
===================================================================
--- a/drivers/powerp-txt.c      2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/powerp-txt.c      2011-08-17 00:40:17.000000000 +0300
@@ -92,7 +92,7 @@ static int powpan_command(const char *co
 
        upsdebug_hex(3, "send", command, strlen(command));
 
-       usleep(100000);
+       struct timespec delay = {0, 100e6}; nanosleep(&delay, NULL);
 
        ret = ser_get_line(upsfd, powpan_answer, sizeof(powpan_answer),
                ENDCHAR, IGNCHAR, SER_WAIT_SEC, SER_WAIT_USEC);
@@ -379,7 +379,7 @@ static int powpan_status(status_t *statu
 
        upsdebug_hex(3, "send", "D\r", 2);
 
-       usleep(200000);
+       struct timespec delay = {0, 200e6}; nanosleep(&delay, NULL);
 
        ret = ser_get_buf_len(upsfd, powpan_answer, 35, SER_WAIT_SEC, 
SER_WAIT_USEC);
 
Index: b/drivers/rhino.c
===================================================================
--- a/drivers/rhino.c   2011-08-17 00:40:17.000000000 +0300
+++ b/drivers/rhino.c   2011-08-17 00:40:17.000000000 +0300
@@ -46,7 +46,7 @@ upsdrv_info_t upsdrv_info = {
        { NULL }
 };
 
-#define UPSDELAY 500 /* 0.5 ms delay */
+#define UPSDELAY 500e3 /* 500e3 ns delay */
 
 typedef int bool_t;
 
@@ -514,10 +514,10 @@ send_command( int cmd )
       for(i=0; i < 19; i++)
        {
          ret = ser_send_char( upsfd, psend[i] );
-         /* usleep ( UPSDELAY ); sending without delay */
+         /* sending without delay */
        }
       
-      usleep( UPSDELAY ); /* delay between sent command */
+      struct timespec delay = {0, UPSDELAY}; nanosleep(&delay, NULL); /* delay 
between sent command */
 
       kount++;
     }
@@ -530,10 +530,9 @@ send_command( int cmd )
 static void sendshut( void )
 {
 
-       int i;
+       struct timespec delay = {15, 0};
 
-       for(i=0; i < 30000; i++)
-         usleep( UPSDELAY ); /* 15 seconds delay */
+       nanosleep(&delay, NULL); /* 15 seconds delay */
 
        send_command( CMD_SHUT );
        upslogx(LOG_NOTICE, "Ups shutdown command sent");
Index: b/drivers/tripplite_usb.c
===================================================================
--- a/drivers/tripplite_usb.c   2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/tripplite_usb.c   2011-08-17 00:40:17.000000000 +0300
@@ -680,7 +680,8 @@ static int send_cmd(const unsigned char
                }
 
 #if ! defined(__FreeBSD__)
-               if(!done) { usleep(1000*100); /* TODO: nanosleep */ }
+               struct timespec delay = {0, 100e6};
+               if(!done) nanosleep(&delay, NULL);
 #endif
 
                for(recv_try=0; !done && recv_try < MAX_RECV_TRIES; recv_try++) 
{
Index: b/drivers/apcsmart.h
===================================================================
--- a/drivers/apcsmart.h        2011-05-31 13:36:49.000000000 +0300
+++ b/drivers/apcsmart.h        2011-08-17 01:15:16.000000000 +0300
@@ -40,8 +40,10 @@
 /* alert characters we care about - OL, OB, LB, not LB, RB, OVER, not OVER */
 #define POLL_ALERT "$!%+#?="
 
-#define UPSDELAY         50000 /* slow down multicharacter commands        */
-#define CMDLONGDELAY   1500000 /* some commands need a 1.5s gap for safety */
+#define UPSDELAY          50e6 /* slow down multicharacter commands */
+/* some commands need a CoManD LONG DELay of 1.5s gap for safety */
+#define CMDLONGDELS    1       /* 1 sec out of 1.5s             */
+#define CMDLONGDELNS     500e6 /* 500e6 nsec out of 1.5s        */
 
 #define SER_WAIT_SEC   3       /* wait up to 3.0 sec for ser_get calls */
 #define SER_WAIT_USEC  0




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to