5 #if defined(REFCLOCK) && defined(CLOCK_PARSE) && defined(CLOCK_COMPUTIME)
7 * /src/NTP/ntp4-dev/libparse/clk_computime.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
9 * clk_computime.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
11 * Supports Diem's Computime Radio Clock
13 * Used the Meinberg clock as a template for Diem's Computime Radio Clock
15 * adapted by Alois Camenzind <alois.camenzind@ubs.ch>
17 * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
18 * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
20 * Redistribution and use in source and binary forms, with or without
21 * modification, are permitted provided that the following conditions
23 * 1. Redistributions of source code must retain the above copyright
24 * notice, this list of conditions and the following disclaimer.
25 * 2. Redistributions in binary form must reproduce the above copyright
26 * notice, this list of conditions and the following disclaimer in the
27 * documentation and/or other materials provided with the distribution.
28 * 3. Neither the name of the author nor the names of its contributors
29 * may be used to endorse or promote products derived from this software
30 * without specific prior written permission.
32 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
33 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
34 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
36 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
40 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
41 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47 #include "ntp_unixtime.h"
48 #include "ntp_calendar.h"
49 #include "ntp_stdlib.h"
56 #include "sys/parsestreams.h"
57 extern void printf P((const char *, ...));
61 * The Computime receiver sends a datagram in the following format every minute
63 * Timestamp T:YY:MM:MD:WD:HH:MM:SSCRLF
64 * Pos 0123456789012345678901 2 3
65 * 0000000000111111111122 2 2
66 * Parse T: : : : : : : rn
68 * T Startcharacter "T" specifies start of the timestamp
69 * YY Year MM Month 1-12
80 static struct format computime_fmt =
83 {8, 2}, {5, 2}, {2, 2}, /* day, month, year */
84 {14, 2}, {17, 2}, {20, 2}, /* hour, minute, second */
85 {11, 2}, /* dayofweek, */
87 (const unsigned char *)"T: : : : : : : \r\n",
91 static u_long cvt_computime P((unsigned char *, int, struct format *, clocktime_t *, void *));
92 static unsigned long inp_computime P((parse_t *, unsigned int, timestamp_t *));
94 clockformat_t clock_computime =
96 inp_computime, /* Computime input handling */
97 cvt_computime, /* Computime conversion */
98 0, /* no PPS monitoring */
99 (void *)&computime_fmt, /* conversion configuration */
100 "Diem's Computime Radio Clock", /* Computime Radio Clock */
101 24, /* string buffer */
102 0 /* no private data (complete pakets) */
108 * convert simple type format
112 unsigned char *buffer,
114 struct format *format,
115 clocktime_t *clock_time,
120 if (!Strok(buffer, format->fixed_string)) {
123 if (Stoi(&buffer[format->field_offsets[O_DAY].offset], &clock_time->day,
124 format->field_offsets[O_DAY].length) ||
125 Stoi(&buffer[format->field_offsets[O_MONTH].offset], &clock_time->month,
126 format->field_offsets[O_MONTH].length) ||
127 Stoi(&buffer[format->field_offsets[O_YEAR].offset], &clock_time->year,
128 format->field_offsets[O_YEAR].length) ||
129 Stoi(&buffer[format->field_offsets[O_HOUR].offset], &clock_time->hour,
130 format->field_offsets[O_HOUR].length) ||
131 Stoi(&buffer[format->field_offsets[O_MIN].offset], &clock_time->minute,
132 format->field_offsets[O_MIN].length) ||
133 Stoi(&buffer[format->field_offsets[O_SEC].offset], &clock_time->second,
134 format->field_offsets[O_SEC].length)) {
135 return CVT_FAIL | CVT_BADFMT;
138 clock_time->flags = 0;
139 clock_time->utcoffset = 0; /* We have UTC time */
149 * grep data from input stream
160 parseprintf(DD_PARSE, ("inp_computime(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
165 parseprintf(DD_PARSE, ("inp_computime: START seen\n"));
167 parseio->parse_index = 1;
168 parseio->parse_data[0] = ch;
169 parseio->parse_dtime.parse_stime = *tstamp; /* collect timestamp */
170 return PARSE_INP_SKIP;
173 parseprintf(DD_PARSE, ("inp_computime: END seen\n"));
174 if ((rtc = parse_addchar(parseio, ch)) == PARSE_INP_SKIP)
175 return parse_end(parseio);
180 return parse_addchar(parseio, ch);
184 #else /* not (REFCLOCK && CLOCK_PARSE && CLOCK_COMPUTIME) */
185 int clk_computime_bs;
186 #endif /* not (REFCLOCK && CLOCK_PARSE && CLOCK_COMPUTIME) */
190 * Revision 4.10 2005/04/16 17:32:10 kardel
193 * Revision 4.9 2004/11/14 15:29:41 kardel
194 * support PPSAPI, upgrade Copyright to Berkeley style
196 * Revision 4.6 1999/11/28 09:13:49 kardel
199 * Revision 4.5 1998/06/14 21:09:34 kardel
202 * Revision 4.4 1998/06/13 12:00:38 kardel
203 * fix SYSV clock name clash
205 * Revision 4.3 1998/06/12 15:22:26 kardel
208 * Revision 4.2 1998/06/12 09:13:24 kardel
209 * conditional compile macros fixed
212 * Revision 4.1 1998/05/24 09:39:51 kardel
213 * implementation of the new IO handling model
215 * Revision 4.0 1998/04/10 19:45:27 kardel
216 * Start 4.0 release version numbering
218 * from V3 1.8 log info deleted 1998/04/11 kardel