### Ultralink Clock

#### Synopsis

Address: 127.127.34.u
Reference ID: `WWVB`
Driver ID: `ULINK`
Serial Port: `/dev/wwvbu`; 9600 bps, 8-bits, no parity
Features: `(none)`

#### Description

This driver supports the Ultralink Model 325 (replacement for Model 320) RS-232 powered WWVB receiver. PDF specs available on http://www.ulio.com/. This driver also supports the Model 320, 330,331,332 decoders in both polled or continous time code mode.
Leap second and quality are supported.

Most of this code is originally from refclock_wwvb.c with thanks. Any mistakes are mine. Any improvements are welcome.

      The Model 325 timecode format is:

       <cr><lf>RQ_1C00LYYYY+DDDUTCS_HH:MM:SSL+5

      where:

      R = Signal readability indicator, ranging from R1 to R5
      Q	R1 is unreadable, R5 is best reception
      _ = Space
      1 = prev. received data bit, values: 0, 1 ,M or ? unknown
      C = Signal reception from (C)olorado or (H)awaii
      0 = Hours since last WWVB time and flag code update, values
      0	00 to 99 (hopefully always 00)
      L = HEX A5 if receiver is locked to WWVB, Space if not
      YYYY = Year from 2000 to 2099
      + = '+' if current year is a leap year, else ' '
      DDD = current day in the year from 1 to 365/366
      UTC = timezone (always UTC)
      S = Daylight savings indicator, (S)TD, (D)ST, (O) transition
          into DST, (I) transition out of DST
      _ = Space
      HH = UTC hour 0 to 23
      : = Time delimiter, ':' if synced, Space if not
      MM = Minutes of current hour from 0 to 59
      : = Time delimiter, ':' if synced, Space if not
      SS = Seconds of current minute from 0 to 59
      mm = 10's milliseconds of the current second from 00 to 99
      L  = Leap second pending at end of month, (I)nsert, (D)elete
           or Space
      +5 = UT1 correction, +/- .1 sec increments

Note that Model 325 reports a very similar output like Model 33X series. The driver for this clock is similar to Model 33X behavior. On a unmodified new ULM325 clock, the polling flag (flag1 =1) needs to be set.

      The Model 320 timecode format is:

       <cr><lf>SQRYYYYDDD+HH:MM:SS.mmLT<cr>

      where:

      S = 'S' -- sync'd in last hour, '0'-'9' - hours x 10 since last update, else '?'
      Q = Number of correlating time-frames, from 0 to 5
      R = 'R' -- reception in progress, 'N' -- Noisy reception, ' ' -- standby mode
      YYYY = year from 1990 to 2089
      DDD = current day from 1 to 366
      + = '+' if current year is a leap year, else ' '
      HH = UTC hour 0 to 23
      MM = Minutes of current hour from 0 to 59
      SS = Seconds of current minute from 0 to 59
      mm = 10's milliseconds of the current second from 00 to 99
      L  = Leap second pending at end of month -- 'I' = inset, 'D'=delete
      T  = DST <-> STD transition indicators

Note that this driver does not do anything with the T flag.

The M320 also has a 'U' command which returns UT1 correction information. It is not used in this driver.

      The Model 33x timecode format is:

        S9+D 00 YYYY+DDDUTCS HH:MM:SSl+5

      Where:

      S =    sync indicator S insync N not in sync
             the sync flag is WWVB decoder sync
             nothing to do with time being correct
      9+ =   signal level 0 thru 9+ If over 9 indicated as 9+
      D  =   data bit ( fun to watch but useless ;-)
      space
      00 =   hours since last GOOD WWVB frame sync
      space
      YYYY = current year
      +  =   leap year indicator
      DDD =  day of year
      UTC =  timezone (always UTC)
      S  =   daylight savings indicator
      space
      HH  =  hours
      :  =   This is the REAL in sync indicator (: = insync)
      MM  =  minutes
      :  =   : = in sync ? = NOT in sync
      SS  =  seconds
      L  =   leap second flag
      +5 =   UT1 correction (sign + digit ))

This driver ignores UT1 correction,DST indicator,Leap year and signal level.

#### Fudge factors

flag1 polling enable (1=poll 0=no poll)

Last modified: Mon Mar 8 10:12:08 PST 2004