Annotation of embedaddon/ntp/libparse/clk_computime.c, revision 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>