Annotation of embedaddon/ntp/libparse/clk_computime.c, revision 1.1.1.1
1.1 misho 1: #ifdef HAVE_CONFIG_H
2: # include <config.h>
3: #endif
4:
5: #if defined(REFCLOCK) && defined(CLOCK_PARSE) && defined(CLOCK_COMPUTIME)
6: /*
7: * /src/NTP/ntp4-dev/libparse/clk_computime.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
8: *
9: * clk_computime.c,v 4.10 2005/04/16 17:32:10 kardel RELEASE_20050508_A
10: *
11: * Supports Diem's Computime Radio Clock
12: *
13: * Used the Meinberg clock as a template for Diem's Computime Radio Clock
14: *
15: * adapted by Alois Camenzind <alois.camenzind@ubs.ch>
16: *
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
19: *
20: * Redistribution and use in source and binary forms, with or without
21: * modification, are permitted provided that the following conditions
22: * are met:
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.
31: *
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
42: * SUCH DAMAGE.
43: *
44: */
45:
46: #include "ntp_fp.h"
47: #include "ntp_unixtime.h"
48: #include "ntp_calendar.h"
49: #include "ntp_stdlib.h"
50:
51: #include "parse.h"
52:
53: #ifndef PARSESTREAM
54: #include <stdio.h>
55: #else
56: #include "sys/parsestreams.h"
57: extern int printf (const char *, ...);
58: #endif
59:
60: /*
61: * The Computime receiver sends a datagram in the following format every minute
62: *
63: * Timestamp T:YY:MM:MD:WD:HH:MM:SSCRLF
64: * Pos 0123456789012345678901 2 3
65: * 0000000000111111111122 2 2
66: * Parse T: : : : : : : rn
67: *
68: * T Startcharacter "T" specifies start of the timestamp
69: * YY Year MM Month 1-12
70: * MD Day of the month
71: * WD Day of week
72: * HH Hour
73: * MM Minute
74: * SS Second
75: * CR Carriage return
76: * LF Linefeed
77: *
78: */
79:
80: static struct format computime_fmt =
81: {
82: {
83: {8, 2}, {5, 2}, {2, 2}, /* day, month, year */
84: {14, 2}, {17, 2}, {20, 2}, /* hour, minute, second */
85: {11, 2}, /* dayofweek, */
86: },
87: (const unsigned char *)"T: : : : : : : \r\n",
88: 0
89: };
90:
91: static u_long cvt_computime (unsigned char *, int, struct format *, clocktime_t *, void *);
92: static unsigned long inp_computime (parse_t *, unsigned int, timestamp_t *);
93:
94: clockformat_t clock_computime =
95: {
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) */
103: };
104:
105: /*
106: * cvt_computime
107: *
108: * convert simple type format
109: */
110: static u_long
111: cvt_computime(
112: unsigned char *buffer,
113: int size,
114: struct format *format,
115: clocktime_t *clock_time,
116: void *local
117: )
118: {
119:
120: if (!Strok(buffer, format->fixed_string)) {
121: return CVT_NONE;
122: } else {
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;
136: } else {
137:
138: clock_time->flags = 0;
139: clock_time->utcoffset = 0; /* We have UTC time */
140:
141: return CVT_OK;
142: }
143: }
144: }
145:
146: /*
147: * inp_computime
148: *
149: * grep data from input stream
150: */
151: static u_long
152: inp_computime(
153: parse_t *parseio,
154: unsigned int ch,
155: timestamp_t *tstamp
156: )
157: {
158: unsigned int rtc;
159:
160: parseprintf(DD_PARSE, ("inp_computime(0x%lx, 0x%x, ...)\n", (long)parseio, ch));
161:
162: switch (ch)
163: {
164: case 'T':
165: parseprintf(DD_PARSE, ("inp_computime: START seen\n"));
166:
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;
171:
172: case '\n':
173: parseprintf(DD_PARSE, ("inp_computime: END seen\n"));
174: if ((rtc = parse_addchar(parseio, ch)) == PARSE_INP_SKIP)
175: return parse_end(parseio);
176: else
177: return rtc;
178:
179: default:
180: return parse_addchar(parseio, ch);
181: }
182: }
183:
184: #else /* not (REFCLOCK && CLOCK_PARSE && CLOCK_COMPUTIME) */
185: int clk_computime_bs;
186: #endif /* not (REFCLOCK && CLOCK_PARSE && CLOCK_COMPUTIME) */
187:
188: /*
189: * clk_computime.c,v
190: * Revision 4.10 2005/04/16 17:32:10 kardel
191: * update copyright
192: *
193: * Revision 4.9 2004/11/14 15:29:41 kardel
194: * support PPSAPI, upgrade Copyright to Berkeley style
195: *
196: * Revision 4.6 1999/11/28 09:13:49 kardel
197: * RECON_4_0_98F
198: *
199: * Revision 4.5 1998/06/14 21:09:34 kardel
200: * Sun acc cleanup
201: *
202: * Revision 4.4 1998/06/13 12:00:38 kardel
203: * fix SYSV clock name clash
204: *
205: * Revision 4.3 1998/06/12 15:22:26 kardel
206: * fix prototypes
207: *
208: * Revision 4.2 1998/06/12 09:13:24 kardel
209: * conditional compile macros fixed
210: * printf prototype
211: *
212: * Revision 4.1 1998/05/24 09:39:51 kardel
213: * implementation of the new IO handling model
214: *
215: * Revision 4.0 1998/04/10 19:45:27 kardel
216: * Start 4.0 release version numbering
217: *
218: * from V3 1.8 log info deleted 1998/04/11 kardel
219: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>