/* * refclock_process - process a sample from the clock * * This routine converts the timecode in the form days, hours, minutes, * seconds and milliseconds/microseconds to internal timestamp format, * then constructs a new entry in the median filter circular buffer. * Return success (1) if the data are correct and consistent with the * converntional calendar. */ int refclock_process( struct refclockproc *pp ) { l_fp offset; /* * Compute the timecode timestamp from the days, hours, minutes, * seconds and milliseconds/microseconds of the timecode. Use * clocktime() for the aggregate seconds and the msec/usec for * the fraction, when present. Note that this code relies on the * filesystem time for the years and does not use the years of * the timecode. */ if (!clocktime(pp->day, pp->hour, pp->minute, pp->second, GMT, pp->lastrec.l_ui, &pp->yearstart, &offset.l_ui)) return (0); if (pp->usec) { TVUTOTSF(pp->usec, offset.l_uf); } else { MSUTOTSF(pp->msec, offset.l_uf); } refclock_process_offset(pp, offset, pp->lastrec, pp->fudgetime1); return (1); }
int buftvtots( const char *bufp, l_fp *ts ) { struct timeval tv; /* * copy to adhere to alignment restrictions */ memcpy(&tv, bufp, sizeof(tv)); /* * and use it */ ts->l_ui = tv.tv_sec + (u_long)JAN_1970; if (tv.tv_usec > 999999) return 0; TVUTOTSF(tv.tv_usec, ts->l_uf); return 1; }