]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Changes from Dave Mills
authorHarlan Stenn <stenn@ntp.org>
Fri, 6 May 2005 03:55:29 +0000 (23:55 -0400)
committerHarlan Stenn <stenn@ntp.org>
Fri, 6 May 2005 03:55:29 +0000 (23:55 -0400)
bk: 427aeab1GAQaNpDYmDYhOTR5gTgKaQ

include/ntp_refclock.h
ntpd/ntp_loopfilter.c
ntpd/ntp_refclock.c
ntpd/refclock_acts.c
ntpd/refclock_heath.c

index 0fcde55cb9ff1849d96c1459dc989ff1cb4f8a5a..a7467a51c34b2ab6b4701e18c9c7dee23eca45b5 100644 (file)
@@ -163,14 +163,15 @@ struct refclockbug {
  * modules to be installed/loaded in the kernel. If specified, but not
  * installed, the code runs as if unspecified.
  */
-#define LDISC_STD      0x0     /* standard */
-#define LDISC_CLK      0x    /* tty_clk \n intercept */
-#define LDISC_CLKPPS   0x    /* tty_clk \377 intercept */
-#define LDISC_ACTS     0x    /* tty_clk #* intercept */
-#define LDISC_CHU      0x    /* depredated */
+#define LDISC_STD      0x00    /* standard */
+#define LDISC_CLK      0x01    /* tty_clk \n intercept */
+#define LDISC_CLKPPS   0x02    /* tty_clk \377 intercept */
+#define LDISC_ACTS     0x04    /* tty_clk #* intercept */
+#define LDISC_CHU      0x08    /* depredated */
 #define LDISC_PPS      0x10    /* ppsclock, ppsapi */
 #define LDISC_RAW      0x20    /* raw binary */
 #define LDISC_ECHO     0x40    /* enable echo */
+#define        LDISC_REMOTE    0x80    /* remobe mode */
 
 struct refclockproc {
        struct  refclockio io;  /* I/O handler structure */
index 893070e0264f2a16f78f9d10c39843be408a4413..d7508c9799158c29baea4d4f3980d5d892ff018e 100644 (file)
@@ -454,7 +454,8 @@ local_clock(
                                dtemp = CLOCK_FLL - sys_poll;
                                if (dtemp < CLOCK_AVG)
                                        dtemp = CLOCK_AVG;
-                               flladj = (fp_offset - clock_offset) /
+                               flladj = (fp_offset - last_base -
+                                   clock_offset) /
                                    (max(mu, allan_xpt) * dtemp);
                        }
 
index 7fa84795c03b0db91f10f05bb186a0d1ee992c33..b6fbd721c5042c213204289d2a93280c0981ea79 100644 (file)
@@ -844,7 +844,7 @@ refclock_setup(
                        printf("refclock_setup fd %d modem status: 0x%x\n",
                            fd, ltemp);
 #endif
-               if (ltemp & TIOCM_DSR)
+               if (ltemp & TIOCM_DSR && lflags & LDISC_REMOTE)
                        ttyp->c_cflag &= ~CLOCAL;
 #endif /* TIOCMGET */
        }
index 57f5a138e84990712385722d9248fd2c40196e2b..e8400f2ce28556cb771340f622560b549a624a97 100644 (file)
  * Timeouts (all in seconds)
  */
 #define SETUP          3       /* setup timeout */
+#define        DTR             1       /* DTR timeout */
 #define ANSWER         60      /* answer timeout */
 #define CONNECT                20      /* first valid message timeout */
 #define TIMECODE       30      /* all valid messages timeout */
  * State machine codes
  */
 #define S_IDLE         0       /* wait for poll */
-#define S_OK           1       /* wait for modem */
-#define S_CONNECT      2       /* wait for answer*/
-#define S_FIRST                3       /* wait for first valid message */
-#define S_MSG          4       /* wait for all messages */
-#define S_CLOSE                5       /* wait after sending disconnect */
+#define S_OK           1       /* wait for modem setup */
+#define S_DTR          2       /* wait for modem DTR */
+#define S_CONNECT      3       /* wait for answer*/
+#define S_FIRST                4       /* wait for first valid message */
+#define S_MSG          5       /* wait for all messages */
+#define S_CLOSE                6       /* wait after sending disconnect */
 
 /*
  * Unit control structure
@@ -390,18 +392,8 @@ acts_message(
                        return;
                }
                ioctl(pp->io.fd, TIOCMBIS, (char *)&dtr);
-               sprintf(tbuf, "DIAL #%d %s", up->retry,
-                   sys_phone[up->retry]);
-               record_clock_stats(&peer->srcadr, tbuf);
-#ifdef DEBUG
-               if (debug)
-                       printf("%s\n", tbuf);
-#endif
-               write(pp->io.fd, sys_phone[up->retry],
-                   strlen(sys_phone[up->retry]));
-               write(pp->io.fd, "\r", 1);
-               up->state = S_CONNECT;
-               up->timer = ANSWER;
+               up->state = S_DTR;
+               up->timer = DTR;
                return;
 
        /*
@@ -732,6 +724,7 @@ acts_timeout(
        int     fd;
        char    device[20];
        char    lockfile[128], pidbuf[8];
+       char    tbuf[BMAX];
 
        /*
         * The state machine is driven by messages from the modem, when
@@ -776,7 +769,7 @@ acts_timeout(
                if (!pp->io.fd) {
                        sprintf(device, DEVICE, up->unit);
                        fd = refclock_open(device, SPEED232,
-                           LDISC_ACTS | LDISC_RAW);
+                           LDISC_ACTS | LDISC_RAW | LDISC_REMOTE);
                        if (fd == 0) {
                                return;
                        }
@@ -827,6 +820,25 @@ acts_timeout(
                msyslog(LOG_ERR, "acts: no modem");
                break;
 
+       /*
+        * In DTR state we are waiting for the modem to settle down
+        * before hammering it with a dial command.
+        */
+       case S_DTR:
+               sprintf(tbuf, "DIAL #%d %s", up->retry,
+                   sys_phone[up->retry]);
+               record_clock_stats(&peer->srcadr, tbuf);
+#ifdef DEBUG
+               if (debug)
+                       printf("%s\n", tbuf);
+#endif
+               write(pp->io.fd, sys_phone[up->retry],
+                   strlen(sys_phone[up->retry]));
+               write(pp->io.fd, "\r", 1);
+               up->state = S_CONNECT;
+               up->timer = ANSWER;
+               return;
+
        /*
         * In CONNECT state the call did not complete.
         */
index c16cef3b174bc2c596428def70c8e860900ad2c2..214cef7326fb60ae5cd73a7fe5bd70d87cebedc6 100644 (file)
@@ -214,9 +214,10 @@ heath_start(
        /*
         * Open serial port
         */
-       (void)sprintf(device, DEVICE, unit);
-       if (!(fd = refclock_open(device, speed[peer->ttl & 0x3], 0)))
-           return (0);
+       sprintf(device, DEVICE, unit);
+       if (!(fd = refclock_open(device, speed[peer->ttl & 0x3],
+           LDISC_REMOTE)))
+               return (0);
        pp = peer->procptr;
        pp->io.clock_recv = heath_receive;
        pp->io.srcclock = (caddr_t)peer;