1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML Strict//EN">
2 <TITLE>NTP PARSE clock data formats</TITLE>
3 <h1>NTP PARSE clock data formats</h1>
5 <p>The parse driver currently supports several clocks with different
6 query mechanisms. In order for you to find a sample that might be
7 similar to a clock you might want to integrate into parse i'll sum
8 up the major features of the clocks (this information is distributed
9 in the parse/clk_*.c and ntpd/refclock_parse.c files).
12 <h2>Meinberg clocks</h2>
14 Meinberg: start=<STX>, end=<ETX>, sync on start
15 pattern="\2D: . . ;T: ;U: . . ; \3"
16 pattern="\2 . . ; ; : : ; \3"
17 pattern="\2 . . ; ; : : ; : ; ; . . "
20 Meinberg is a german manufacturer of time code receivers. Those clocks
21 have a pretty common output format in the stock version. In order to
22 support NTP Meinberg was so kind to produce some special versions of
23 the firmware for the use with NTP. So, if you are going to use a
24 Meinberg clock please ask whether there is a special Uni Erlangen
26 You can reach <A HREF="http://www.meinberg.de/">Meinberg</A> via the Web.
27 Information can also be ordered via eMail from <A HREF="mailto: info@meinberg.de">info@meinberg.de</A>
30 General characteristics:
32 Meinberg clocks primarily output pulse per second and a describing
33 ASCII string. This string can be produced in two modes. either upon
34 the reception of a question mark or every second. NTP uses the latter
35 mechanism. The DCF77 variants have a pretty good relationship between
36 RS232 time code and the PPS signal while the GPS receiver has no fixed
37 timeing between the datagram and the pulse (you need to use PPS with
38 GPS!) on DCF77 you might get away without the PPS signal.
40 The preferred tty setting for Meinberg is:
41 CFLAG (B9600|CS7|PARENB|CREAD|HUPCL)
42 IFLAG (IGNBRK|IGNPAR|ISTRIP)
47 The tty setting for Meinberg GPS 166/167 receivers is:
48 CFLAG (B19200|CS8|PARENB|CREAD|HUPCL)
49 IFLAG (IGNBRK|IGNPAR|ISTRIP)
55 The clock is run at datagram once per second.
58 <STX>D:<dd>.<mm>.<yy>;T:<w>;U:<hh>:<mm>:<ss>;<S><F><D><A><ETX>
59 pos: 0 00 00 0 00 0 11 111 1 111 12 2 22 2 22 2 2 2 3 3 3
60 1 23 45 6 78 9 01 234 5 678 90 1 23 4 56 7 8 9 0 1 2
62 <STX> = '\002' ASCII start of text
63 <ETX> = '\003' ASCII end of text
64 <dd>,<mm>,<yy> = day, month, year(2 digits!!)
65 <w> = day of week (sunday= 0)
66 <hh>,<mm>,<ss> = hour, minute, second
67 <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
68 '#' if not PZF sychronisation available else ' ' for PZF 535
69 <F> = '*' if time comes from internal quartz else ' '
70 <D> = 'S' if daylight saving time is active else ' '
71 <D> = 'U' if UTC time code is deliverd else ' '
72 <A> = '!' during the hour preceeding an daylight saving time
74 <A> = 'A' if a leap second is announced
78 <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <U><S><F><D><A><L><R><ETX>
79 pos: 0 00 0 00 0 00 11 1 11 11 1 11 2 22 22 2 2 2 2 2 3 3 3
80 1 23 4 56 7 89 01 2 34 56 7 89 0 12 34 5 6 7 8 9 0 1 2
81 <STX> = '\002' ASCII start of text
82 <ETX> = '\003' ASCII end of text
83 <dd>,<mm>,<yy> = day, month, year(2 digits!!)
84 <w> = day of week (sunday= 0)
85 <hh>,<mm>,<ss> = hour, minute, second
86 <U> = 'U' UTC time display
87 <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
88 '#' if not PZF sychronisation available else ' ' for PZF 535
89 <F> = '*' if time comes from internal quartz else ' '
90 <D> = 'S' if daylight saving time is active else ' '
91 <A> = '!' during the hour preceeding an daylight saving time
93 <L> = 'A' LEAP second announcement
94 <R> = 'R' alternate antenna
96 <p>Meinberg GPS166 receiver
98 You must get the Uni-Erlangen firmware for the GPS receiver support
99 to work to full satisfaction !
101 <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <+/-><00:00>; <U><S><F><D><A><L><R><L>; <position...><ETX>
103 000000000111111111122222222223333333333444444444455555555556666666
104 123456789012345678901234567890123456789012345678901234567890123456
105 \x0209.07.93; 5; 08:48:26; +00:00; ; 49.5736N 11.0280E 373m\x03
108 <STX> = '\002' ASCII start of text
109 <ETX> = '\003' ASCII end of text
110 <dd>,<mm>,<yy> = day, month, year(2 digits!!)
111 <w> = day of week (sunday= 0)
112 <hh>,<mm>,<ss> = hour, minute, second
113 <+/->,<00:00> = offset to UTC
114 <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
115 '#' if not PZF sychronisation available else ' ' for PZF 535
116 <U> = 'U' UTC time display
117 <F> = '*' if time comes from internal quartz else ' '
118 <D> = 'S' if daylight saving time is active else ' '
119 <A> = '!' during the hour preceeding an daylight saving time
121 <L> = 'A' LEAP second announcement
122 <R> = 'R' alternate antenna (reminiscent of PZF535) usually ' '
123 <L> = 'L' on 23:59:60
126 <p>For the Meinberg parse look into clock_meinberg.c
129 <h2>Raw DCF77 Data via serial line</h2>
130 <p>RAWDCF: end=TIMEOUT>1.5s, sync each char (any char),generate psuedo time
133 direct DCF77 code input
135 <p>In Europe it is relatively easy/cheap the receive the german time code
136 transmitter DCF77. The simplest version to process its signal is to
137 feed the 100/200ms pulse of the demodulated AM signal via a level
138 converter to an RS232 port at 50Baud. parse/clk_rawdcf.c holds all
139 necessary decoding logic for the time code which is transmitted each
140 minute for one minute. A bit of the time code is sent once a second.
143 The preferred tty setting is:
144 CFLAG (B50|CS8|CREAD|CLOCAL)
150 <h2>DCF77 raw time code</h2>
153 <p>From "Zur Zeit", Physikalisch-Technische Bundesanstalt (PTB), Braunschweig
154 und Berlin, März 1989
157 Timecode transmission:
161 time marks are send every second except for the second before the
163 time marks consist of a reduction of transmitter power to 25%
165 the falling edge is the time indication (on time)
166 time marks of a 100ms duration constitute a logical 0
167 time marks of a 200ms duration constitute a logical 1
171 see the spec. (basically a (non-)inverted psuedo random phase shift)
176 0 - 10 AM: free, FM: 0
178 15 R - alternate antenna
179 16 A1 - expect zone change (1 hour before)
180 17 - 18 Z1,Z2 - time zone
183 1 0 MESZ (MED, MET DST)
185 19 A2 - expect leap insertion/deletion (1 hour before)
186 20 S - start of time code (1)
187 21 - 24 M1 - BCD (lsb first) Minutes
188 25 - 27 M10 - BCD (lsb first) 10 Minutes
189 28 P1 - Minute Parity (even)
190 29 - 32 H1 - BCD (lsb first) Hours
191 33 - 34 H10 - BCD (lsb first) 10 Hours
192 35 P2 - Hour Parity (even)
193 36 - 39 D1 - BCD (lsb first) Days
194 40 - 41 D10 - BCD (lsb first) 10 Days
195 42 - 44 DW - BCD (lsb first) day of week (1: Monday -> 7: Sunday)
196 45 - 49 MO - BCD (lsb first) Month
198 51 - 53 Y1 - BCD (lsb first) Years
199 54 - 57 Y10 - BCD (lsb first) 10 Years
200 58 P3 - Date Parity (even)
201 59 - usually missing (minute indication), except for leap insertion
205 <h2>Schmid clock</h2>
208 Schmid clock: needs poll, binary input, end='\xFC', sync start
211 The Schmid clock is a DCF77 receiver that sends a binary
212 time code at the reception of a flag byte. The contents
213 if the flag byte determined the time code format. The
214 binary time code is delimited by the byte 0xFC.
217 CFLAG (B1200|CS8|CREAD|CLOCAL)
225 <p> The command to Schmid's DCF77 clock is a single byte; each bit
226 allows the user to select some part of the time string, as follows (the
227 output for the lsb is sent first).
230 Bit 0: time in MEZ, 4 bytes *binary, not BCD*; hh.mm.ss.tenths
231 Bit 1: date 3 bytes *binary, not BCD: dd.mm.yy
232 Bit 2: week day, 1 byte (unused here)
233 Bit 3: time zone, 1 byte, 0=MET, 1=MEST. (unused here)
234 Bit 4: clock status, 1 byte, 0=time invalid,
235 1=time from crystal backup,
237 Bit 5: transmitter status, 1 byte,
238 bit 0: backup antenna
239 bit 1: time zone change within 1h
240 bit 3,2: TZ 01=MEST, 10=MET
241 bit 4: leap second will be
242 added within one hour
244 Bit 6: time in backup mode, units of 5 minutes (unused here)
248 <h2>Trimble SV6 ASCII time code (TAIP)</h2>
251 Trimble SV6: needs poll, ascii timecode, start='>', end='<',
252 query='>QTM<', eol='<'
254 <p> Trimble SV6 is a GPS receiver with PPS output. It needs to be polled.
255 It also need a special tty mode setup (EOL='<').
258 CFLAG (B4800|CS8|CREAD)
259 IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)
264 PARSE_F_PPSPPS - use CIOGETEV for PPS time stamping
265 PARSE_F_PPSONSECOND - the time code is not related to
266 the PPS pulse (so use the time code
267 only for the second epoch)
270 0000000000111111111122222222223333333 / char
271 0123456789012345678901234567890123456 \ posn
272 >RTMhhmmssdddDDMMYYYYoodnnvrrrrr;*xx< Actual
273 ----33445566600112222BB7__-_____--99- Parse
274 >RTM 1 ;* < Check
280 ELV DCF7000: end='\r', pattern=" - - - - - - - \r"
282 The ELV DCF7000 is a cheap DCF77 receiver sending each second
283 a time code (though not very precise!) delimited by '`r'
286 YY-MM-DD-HH-MM-SS-FF\r
289 FF&0x2 - DST switch warning
290 FF&0x4 - unsynchronised
293 <h2>HOPF 6021 und Kompatible</h2>
296 HOPF Funkuhr 6021 mit serieller Schnittstelle
297 Created by F.Schnekenbuehl <frank@comsys.dofn.de> from clk_rcc8000.c
298 Nortel DASA Network Systems GmbH, Department: ND250
299 A Joint venture of Daimler-Benz Aerospace and Nortel.
306 ETX zum Sekundenvorlauf ON
309 transmit with control characters
312 Type 6021 Serial Output format
314 000000000011111111 / char
315 012345678901234567 \ position
316 sABHHMMSSDDMMYYnre Actual
320 s = STX (0x02), e = ETX (0x03)
321 n = NL (0x0A), r = CR (0x0D)
323 A B - Status and weekday
328 x x x 0 - no announcement
329 x x x 1 - Summertime - wintertime - summertime announcement
332 0 0 x x - Time/Date invalid
333 0 1 x x - Internal clock used
334 1 0 x x - Radio clock
335 1 1 x x - Radio clock highprecision
349 <h2>Diem Computime Clock</h2>
352 The Computime receiver sends a datagram in the following format every minute
354 Timestamp T:YY:MM:MD:WD:HH:MM:SSCRLF
355 Pos 0123456789012345678901 2 3
356 0000000000111111111122 2 2
357 Parse T: : : : : : : \r\n
359 T Startcharacter "T" specifies start of the timestamp
360 YY Year MM Month 1-12
370 <h2>WHARTON 400A Series Clock with a 404.2 Serial interface</h2>
373 The WHARTON 400A Series clock is able to send date/time serial messages
374 in 7 output formats. We use format 1 here because it is the shortest.
375 We set up the clock to send a datagram every second.
376 For use with this driver, the WHARTON 400A Series clock must be set-up
379 Programmable Selected
381 BST or CET display 3 9 or 11
382 No external controller 7 0
383 Serial Output Format 1 9 1
384 Baud rate 9600 bps 10 96
385 Bit length 8 bits 11 8
388 WHARTON 400A Series output format 1 is as follows :
390 Timestamp STXssmmhhDDMMYYSETX
394 STX start transmission (ASCII 0x02)
395 ETX end transmission (ASCII 0x03)
396 ss Second expressed in reversed decimal (units then tens)
397 mm Minute expressed in reversed decimal
398 hh Hour expressed in reversed decimal
399 DD Day of month expressed in reversed decimal
400 MM Month expressed in reversed decimal (January is 1)
401 YY Year (without century) expressed in reversed decimal
402 S Status byte : 0x30 +
403 bit 0 0 = MSF source 1 = DCF source
404 bit 1 0 = Winter time 1 = Summer time
405 bit 2 0 = not synchronised 1 = synchronised
406 bit 3 0 = no early warning 1 = early warning