### IRIG Audio Decoder

#### Synopsis

Address: 127.127.6.u
Reference ID: IRIG
Driver ID: IRIG-AUDIO
Audio Device: `/dev/irigu`
Requires: modified SunOS 4.1.3 BSD audio driver and `/usr/include/sys/bsd_audioirig.h` header file

#### Description

This driver supports the Inter-Range Instrumentation Group standard time-distribution signal IRIG-B using the audio codec native to the Sun SPARCstation. This signal is generated by several radio clocks, including those made by Austron, TrueTime, Odetics and Spectracom, among others, although it is generally an add-on option. The signal is connected via an attenuator box and cable to the audio codec input on a Sun SPARCstation and requires a specially modified kernel audio driver described in the IRIG Support Using Sun SPARC Audio page.

The driver requires a modified SunOS 4.1.3 BSD audio driver available from the archive host ftp.udel.edu as the compressed tar archive `pub/ntp/bsd_audio.tar.Z`. For ordinary audio applications, the audio driver is transparent; for use with the NTP driver, the audio driver decodes the IRIG audio signals and provides a timestamp, raw binary timecode, status byte and decoded ASCII timecode. The data are represented in the structure in the sys/bsd_audioirig.h header file:

         struct irig_time {
              struct timeval stamp;    /* timestamp */
              u_char    bits[13];      /* 100 IRIG data bits */
              u_char    status;        /* status byte */
              char      time[14];      /* time string (null terminated) */

where stamp represents a timestamp at the zero crossing of the index marker at the second's epoch, bits is a 13-octet, zero-padded binary- coded string representing code elements 1 through 100 in the IRIG-B code format, and status is a status byte, The decoded timestamp is a 13- octet, null-terminated ASCII string `ddd hh:mm:ss*`, where ddd is the day of year, hh:mm:ss the time of day and `*` is a status indicator, with ' ' indicating valid time and '?' indicating something wrong.

The timestamp is in Unix timeval format, consisting of two 32-bit words, the first of which is the seconds since 1970 and the second is the fraction of the second in microseconds. The status byte is zero if (a) the input signal is within amplitude tolerances, (b) the raw binary timecode contains only valid code elements, (c) 11 position identifiers have been found at the expected element positions, (d) the clock status byte contained in the timecode is valid, and (e) a time determination has been made since the last read() system call.

The 100 elements of the IRIG-B timecode are numbered from 0 through 99. Position identifiers occur at elements 0, 9, 19 and every ten thereafter to 99. The control function (CF) elements begin at element 50 (CF 1) and extend to element 78 (CF 27). The straight-binary-seconds (SBS) field, which encodes the seconds of the UTC day, begins at element 80 (CF 28) and extends to element 97 (CF 44). The encoding of elements 50 (CF 1) through 78 (CF 27) is device dependent. This driver presently does not use the CF elements.

Where feasible, the interface should be operated with signature control, so that, if the IRIG signal is lost or malformed, the interface produces an unmodulated signal, rather than possibly random digits. The driver will declare itself unsynchronized in this case.

         Element   CF        Function
         -------------------------------------
         55        6         time sync status
         60-63     10-13     bcd year units
         65-68     15-18     bcd year tens

Timing jitter using the decoder and a Sun IPC is in the order of a few microseconds, although the overall timing accuracy is limited by the wander of the CPU oscillator used for timing purposes to a few hundred microseconds. These figures are comparable with what can be achieved using the PPS discipline as describe elsewhere in this note.

#### Monitor Data

The driver writes each timecode as received to the `clockstats` file.

#### Fudge Factors

`time1 time`
  Specifies the time offset calibration factor, in seconds and fraction, with default 0.0.

`time2 time`
  Not used by this driver.

`stratum number`
  Specifies the driver stratum, in decimal from 0 to 15, with default 0.

`refid string`
  Specifies the driver reference identifier, an ASCII string from one to four characters, with default `IRIG`.

`flag1 0 | 1`
  Not used by this driver.

`flag2 0 | 1`
  Not used by this driver.

`flag3 0 | 1`
  Not used by this driver.

`flag4 0 | 1`
  Enable `clockstats` recording if set.

Additional Information

Reference Clock Drivers