Lines Matching +full:message +full:- +full:handling +full:- +full:unit
65 #define PRECISION (-20) /* precision assumed (1 us) */
66 #define DESCRIPTION "Spectracom TSYNC-PCI" /* WRU */
142 unsigned char syncOption; /* -M option */
244 * unit control structure
256 static void tsync_poll (int unit, struct peer *);
273 tsync_poll, /* transmit poll message */
313 * IN: unit - not used.
314 * *peer - pointer to this reference clock's peer structure
315 * Returns: 0 - unsuccessful
316 * 1 - successful
319 static int tsync_start(int unit, struct peer *peer) in tsync_start() argument
328 pp = peer->procptr; in tsync_start()
329 pp->clockdesc = DESCRIPTION; in tsync_start()
330 pp->io.clock_recv = noentry; in tsync_start()
331 pp->io.srcclock = peer; in tsync_start()
332 pp->io.datalen = 0; in tsync_start()
333 peer->precision = PRECISION; in tsync_start()
335 // Allocate and initialize unit structure in tsync_start()
342 up->refPrefer = peer->flags & FLAG_PREFER; in tsync_start()
345 up->refStratum = STRATUM_UNSPEC; in tsync_start()
346 strncpy((char *)&up->refId, TSYNC_REF_LOCAL, TSYNC_REF_LEN); in tsync_start()
348 // Attach unit structure in tsync_start()
349 pp->unitptr = (caddr_t)up; in tsync_start()
354 strncpy((char *)&pp->refid, TSYNC_REF_LOCAL, TSYNC_REF_LEN); in tsync_start()
358 } /* End - tsync_start() */ in tsync_start()
367 ** IN: unit - not used.
368 ** *peer - pointer to this reference clock's peer structure
372 static void tsync_shutdown(int unit, struct peer *peer) in tsync_shutdown() argument
375 } /* End - tsync_shutdown() */ in tsync_shutdown()
383 * IN: unit - not used.
384 * *peer - pointer to this reference clock's peer structure
388 static void tsync_poll(int unit, struct peer *peer) in tsync_poll() argument
420 sprintf(device, "%s%d", DEVICE, (int)peer->refclkunit); in tsync_poll()
422 printf("Polling device number %d...\n", (int)peer->refclkunit); in tsync_poll()
442 /* Allocate memory for ioctl message */ in tsync_poll()
444 (sizeof(ioctl_trans_di) - DI_PAYLOADS_STARTER_LENGTH) + in tsync_poll()
449 msyslog(LOG_ERR, "Couldn't allocate transaction memory - Reference"); in tsync_poll()
453 /* Build SS_GetRef ioctl message */ in tsync_poll()
454 it->dest = TSYNC_REF_DEST_ID; in tsync_poll()
455 it->iid = TSYNC_REF_IID; in tsync_poll()
456 it->inPayloadOffset = TSYNC_REF_IN_PYLD_OFF; in tsync_poll()
457 it->inLength = TSYNC_REF_IN_LEN; in tsync_poll()
458 it->outPayloadOffset = TSYNC_REF_OUT_PYLD_OFF; in tsync_poll()
459 it->maxOutLength = TSYNC_REF_MAX_OUT_LEN; in tsync_poll()
460 it->actualOutLength = 0; in tsync_poll()
461 it->status = 0; in tsync_poll()
462 memset(it->payloads, 0, TSYNC_REF_MAX_OUT_LEN); in tsync_poll()
464 /* Read the reference from the TSYNC-PCI device */ in tsync_poll()
469 /* Allocate memory for ioctl message */ in tsync_poll()
471 (sizeof(ioctl_trans_di) - DI_PAYLOADS_STARTER_LENGTH) + in tsync_poll()
476 msyslog(LOG_ERR, "Couldn't allocate transaction memory - Time Scale"); in tsync_poll()
480 /* Build CS_GetTimeScale ioctl message */ in tsync_poll()
481 it1->dest = TSYNC_TMSCL_DEST_ID; in tsync_poll()
482 it1->iid = TSYNC_TMSCL_IID; in tsync_poll()
483 it1->inPayloadOffset = TSYNC_TMSCL_IN_PYLD_OFF; in tsync_poll()
484 it1->inLength = TSYNC_TMSCL_IN_LEN; in tsync_poll()
485 it1->outPayloadOffset = TSYNC_TMSCL_OUT_PYLD_OFF; in tsync_poll()
486 it1->maxOutLength = TSYNC_TMSCL_MAX_OUT_LEN; in tsync_poll()
487 it1->actualOutLength = 0; in tsync_poll()
488 it1->status = 0; in tsync_poll()
489 memset(it1->payloads, 0, TSYNC_TMSCL_MAX_OUT_LEN); in tsync_poll()
491 /* Read the Time Scale info from the TSYNC-PCI device */ in tsync_poll()
496 /* Allocate memory for ioctl message */ in tsync_poll()
498 (sizeof(ioctl_trans_di) - DI_PAYLOADS_STARTER_LENGTH) + in tsync_poll()
503 msyslog(LOG_ERR, "Couldn't allocate transaction memory - Leap Second"); in tsync_poll()
507 /* Build CS_GetLeapSec ioctl message */ in tsync_poll()
508 it2->dest = TSYNC_LEAP_DEST_ID; in tsync_poll()
509 it2->iid = TSYNC_LEAP_IID; in tsync_poll()
510 it2->inPayloadOffset = TSYNC_LEAP_IN_PYLD_OFF; in tsync_poll()
511 it2->inLength = TSYNC_LEAP_IN_LEN; in tsync_poll()
512 it2->outPayloadOffset = TSYNC_LEAP_OUT_PYLD_OFF; in tsync_poll()
513 it2->maxOutLength = TSYNC_LEAP_MAX_OUT_LEN; in tsync_poll()
514 it2->actualOutLength = 0; in tsync_poll()
515 it2->status = 0; in tsync_poll()
516 memset(it2->payloads, 0, TSYNC_LEAP_MAX_OUT_LEN); in tsync_poll()
518 /* Read the leap seconds info from the TSYNC-PCI device */ in tsync_poll()
523 pp = peer->procptr; in tsync_poll()
524 up = (TsyncUnit*)pp->unitptr; in tsync_poll()
526 /* Read the time from the TSYNC-PCI device */ in tsync_poll()
536 (it->status != 0) || (it1->status != 0) || (it2->status != 0) || in tsync_poll()
537 (it->actualOutLength != TSYNC_REF_OUT_LEN) || in tsync_poll()
538 (it1->actualOutLength != TSYNC_TMSCL_OUT_LEN) || in tsync_poll()
539 (it2->actualOutLength != TSYNC_LEAP_OUT_LEN)) { in tsync_poll()
547 pRefObj = (void *)it->payloads; in tsync_poll()
548 memcpy(timeRef, pRefObj->time, TSYNC_REF_LEN); in tsync_poll()
549 memcpy(ppsRef, pRefObj->pps, TSYNC_REF_LEN); in tsync_poll()
552 memcpy(&tmscl, it1->payloads, sizeof(tmscl)); in tsync_poll()
561 ((unsigned char*)(it2->payloads))[(i * 4) + (3 - j)]; in tsync_poll()
598 DTOLFP(((double)TimeContext.tv.tv_usec / 1000000.0), &pp->lastrec); in tsync_poll()
606 pp->lastrec.Ul_i.Xl_ui += (unsigned int)TimeContext.tv.tv_sec + in tsync_poll()
609 pp->polls++; in tsync_poll()
614 sprintf(pp->a_lastcode, "%03d %02d:%02d:%02.6f", in tsync_poll()
618 pp->lencode = strlen (pp->a_lastcode); in tsync_poll()
619 pp->day = TimeContext.timeObj.days; in tsync_poll()
620 pp->hour = TimeContext.timeObj.hours; in tsync_poll()
621 pp->minute = TimeContext.timeObj.minutes; in tsync_poll()
622 pp->second = (int) seconds; in tsync_poll()
623 seconds = (seconds - (double) (pp->second / 1.0)) * 1000000000; in tsync_poll()
624 pp->nsec = (long) seconds; in tsync_poll()
636 pp->yearstart = caltontp(&jt); in tsync_poll()
639 offset.l_ui = (long)(((pp->day - 1) * 24) + pp->hour + GMT); in tsync_poll()
640 offset.l_ui = (offset.l_ui * 60) + (long)pp->minute; in tsync_poll()
641 offset.l_ui = (offset.l_ui * 60) + (long)pp->second; in tsync_poll()
642 offset.l_ui = offset.l_ui + (long)pp->yearstart; in tsync_poll()
644 DTOLFP(pp->nsec / 1e9, <emp); in tsync_poll()
646 refclock_process_offset(pp, offset, pp->lastrec, in tsync_poll()
647 pp->fudgetime1); in tsync_poll()
652 ApplyTimeOffset(&(leapSec.utcDate), -1); in tsync_poll()
663 pp->leap = LEAP_ADDSECOND; in tsync_poll()
666 else if (leapSec.offset == -1) in tsync_poll()
668 pp->leap = LEAP_DELSECOND; in tsync_poll()
670 // Else report no leap second pending (no handling of offsets in tsync_poll()
671 // other than +1 or -1) in tsync_poll()
674 pp->leap = LEAP_NOWARNING; in tsync_poll()
680 pp->leap = LEAP_NOWARNING; in tsync_poll()
683 peer->leap = pp->leap; in tsync_poll()
696 peer->flags &= ~FLAG_PREFER; in tsync_poll()
699 pp->stratum = STRATUM_UNSPEC; in tsync_poll()
700 peer->stratum = pp->stratum; in tsync_poll()
706 up->refStratum = sys_peer->stratum; in tsync_poll()
707 up->refId = addr2refid(&sys_peer->srcadr); in tsync_poll()
713 peer->flags |= up->refPrefer; in tsync_poll()
716 up->refStratum = TSYNC_LCL_STRATUM; in tsync_poll()
717 strncpy((char *)&up->refId, RefIdLookupTbl[j].pRefId, in tsync_poll()
721 pp->stratum = TSYNC_LCL_STRATUM; in tsync_poll()
722 peer->stratum = pp->stratum; in tsync_poll()
726 strncpy((char *)&pp->refid, RefIdLookupTbl[j].pRefId, in tsync_poll()
728 peer->refid = pp->refid; in tsync_poll()
734 peer->flags |= up->refPrefer; in tsync_poll()
737 pp->refid = up->refId; in tsync_poll()
738 peer->refid = pp->refid; in tsync_poll()
741 pp->stratum = up->refStratum; in tsync_poll()
742 peer->stratum = pp->stratum; in tsync_poll()
748 strncpy((char *)&pp->refid, TSYNC_REF_LOCAL, TSYNC_REF_LEN); in tsync_poll()
749 peer->refid = pp->refid; in tsync_poll()
752 pp->leap = LEAP_NOTINSYNC; in tsync_poll()
753 peer->leap = pp->leap; in tsync_poll()
756 if (pp->coderecv == pp->codeproc) { in tsync_poll()
761 record_clock_stats(&peer->srcadr, pp->a_lastcode); in tsync_poll()
765 pp->polls++; in tsync_poll()
767 } /* End - tsync_poll() */ in tsync_poll()
814 pSt->seconds = 0; in SecTimeFromDoyTime()
817 yrs = pDt->year - TSYNC_TIME_BASE_YEAR; in SecTimeFromDoyTime()
821 pSt->seconds += lyrs * SECSPERLEAPYEAR; in SecTimeFromDoyTime()
822 pSt->seconds += (yrs - lyrs) * SECSPERYEAR; in SecTimeFromDoyTime()
825 pSt->seconds += (pDt->doy - 1) * SECSPERDAY; in SecTimeFromDoyTime()
826 pSt->seconds += pDt->hour * SECSPERHR; in SecTimeFromDoyTime()
827 pSt->seconds += pDt->minute * SECSPERMIN; in SecTimeFromDoyTime()
828 pSt->seconds += pDt->second; in SecTimeFromDoyTime()
831 pSt->ns = pDt->ns; in SecTimeFromDoyTime()
855 // Convert the seconds count into a signed 64-bit number for calculations in DoyTimeFromSecTime()
856 secs = (signed long long)(pSt->seconds); in DoyTimeFromSecTime()
868 secs -= SECSPERYEAR; in DoyTimeFromSecTime()
876 secs -= SECSPERYEAR; in DoyTimeFromSecTime()
884 secs -= SECSPERLEAPYEAR; in DoyTimeFromSecTime()
901 pDt->year = yrs + TSYNC_TIME_BASE_YEAR; in DoyTimeFromSecTime()
902 pDt->doy = doys; in DoyTimeFromSecTime()
903 pDt->hour = hrs; in DoyTimeFromSecTime()
904 pDt->minute = mins; in DoyTimeFromSecTime()
905 pDt->second = (unsigned int)secs; in DoyTimeFromSecTime()
906 pDt->ns = pSt->ns; in DoyTimeFromSecTime()