⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys.c

📁 IEEE 1588-2002编程源码
💻 C
字号:
/* sys.c */#include "../ptpd.h"void displayStats(PtpClock *ptpClock){  printf("\r");    printf("state = ");    switch(ptpClock->port_state)  {  case PTP_INITIALIZING:  printf("init");   break;  case PTP_FAULTY:        printf("flt ");   break;  case PTP_LISTENING:     printf("lstn");   break;  case PTP_PASSIVE:       printf("pass");   break;  case PTP_UNCALIBRATED:  printf("uncl");   break;  case PTP_SLAVE:         printf("slv ");   break;  case PTP_PRE_MASTER:    printf("pmst");   break;  case PTP_MASTER:        printf("mst ");   break;  case PTP_DISABLED:      printf("dsbl");   break;  default:                printf("?");   break;  }    if(ptpClock->port_state != PTP_SLAVE)  {    printf("\r");    fflush(stdout);    return;  }    printf(    " Dow =%c%lu.%09ld"    " ofm =%c%lu.%09ld",    ptpClock->one_way_delay.nanoseconds < 0 ? '-' : ' ',    ptpClock->one_way_delay.seconds, labs(ptpClock->one_way_delay.nanoseconds),    ptpClock->offset_from_master.nanoseconds < 0 ? '-' : ' ',    ptpClock->offset_from_master.seconds, labs(ptpClock->offset_from_master.nanoseconds));    printf(    " drift = %ld"    " var = %d",    ptpClock->observed_drift, ptpClock->observed_variance);    printf("\r");  fflush(stdout);}Boolean nanoSleep(TimeRepresentation *t){  struct timespec ts, tr;    ts.tv_sec = t->seconds;  ts.tv_nsec = t->nanoseconds;    if(nanosleep(&ts, &tr) < 0)  {    t->seconds = tr.tv_sec;    t->nanoseconds = tr.tv_nsec;    return FALSE;  }    return TRUE;}void getTime(UInteger32 *seconds, Integer32 *nanoseconds){  struct timeval t;    gettimeofday(&t, 0);  *seconds = t.tv_sec;  *nanoseconds = t.tv_usec*1e3;}void setTime(UInteger32 seconds, Integer32 nanoseconds){  struct timeval t;    t.tv_sec = seconds;  t.tv_usec = nanoseconds/1e3;  settimeofday(&t, 0);    NOTIFY("resetting system clock to %lus %ldns\n", seconds, nanoseconds);}UInteger16 getRand(UInteger32 *seed){  return rand_r((unsigned int*)seed);}Boolean adjFreq(Integer32 adj){  struct timex t;    if(adj > ADJ_FREQ_MAX)    adj = ADJ_FREQ_MAX;  else if(adj < -ADJ_FREQ_MAX)    adj = -ADJ_FREQ_MAX;    t.modes = ADJ_FREQUENCY;  t.freq = adj*((1<<16)/1000);    return !adjtimex(&t);}void setTimeOk(void){  struct timex t;    t.modes = ADJ_STATUS;  t.status = TIME_OK;  adjtimex(&t);}void leapSecond(Boolean up){  struct timex t;    t.modes = ADJ_STATUS;  t.status = up ? TIME_INS : TIME_DEL;  adjtimex(&t);    DBG("leapSecond: %s\n", up ? "up" : "down");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -