85 #if defined(WIN32) || defined (WIN64) 87 #include <sys/timeb.h> 92 #include <stdatomic.h> 98 #define MAX_TS_CARDS 4 108 #if defined(WIN32) || defined (WIN64) 115 #if defined(WIN32) || defined (WIN64) 117 #if defined(_MSC_VER) 124 int gettimeofday(
struct timeval *tv,
struct timezone *tz);
129 #define NT_CONST64(a) a##ULL 130 #define UNIX_EPOCH_OFFSET_MAGIC 116444736000000000ULL 150 #if defined(WIN32) || defined (WIN64) 172 struct timeval timeofday;
173 struct timezone timeZone;
178 *osTime = (uint64_t)(timeofday.tv_sec & 0xFFFFFFFF);
188 char wday[7][4]={
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"};
189 char wmon[12][4]={
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
191 timeT = (time_t)(timeValue/1000000000ULL);
192 ptm = gmtime(&timeT);
194 printf(
"Time is invalid");
196 printf(
"UTC Time : %s %d-%s-%d %02d:%02d:%02d.%09lld",
197 wday[ptm->tm_wday], ptm->tm_mday, wmon[ptm->tm_mon], ptm->tm_year+1900,
198 ptm->tm_hour, ptm->tm_min, ptm->tm_sec, ((
unsigned long long)timeValue%100000000));
207 if ((timeSyncTimeSkew < -100000000) ||
208 (timeSyncTimeSkew > 100000000)) {
209 printf(
"%d: PPS not in SYNC: ", i);
212 if ((timeSyncTimeSkew < -1000000) ||
213 (timeSyncTimeSkew > 1000000)) {
214 printf(
"%d PPS SYNCING: ", i);
217 printf(
"%d PPS in SYNC: ", i);
222 printf(
" ClockSkew : %13lld nano seconds \n", (
long long)(timeSyncTimeSkew));
231 uint32_t timeout = 1000;
234 uint64_t printTime=0;
246 #if defined(WIN32) || defined (WIN64) 249 struct sigaction newaction;
250 memset(&newaction, 0,
sizeof(newaction));
252 if (sigaction(SIGINT, &newaction, NULL) < 0) {
253 fprintf(stderr,
"Failed to register SIGINT sigaction.\n");
258 printf(
"Running the PPS example.\n\n");
260 if ((status =
NT_Init(NTAPI_VERSION)) != NT_SUCCESS) {
263 fprintf(stderr,
"NT_Init() failed: %s\n", errorBuffer);
272 printf(
"Opening info stream\n");
274 if ((status =
NT_InfoOpen(&hInfoStream,
"InfoPps")) != NT_SUCCESS) {
277 fprintf(stderr,
"NT_ConfigRead() failed: %s\n", errorBuffer);
280 printf(
"Info stream opened successfully\n");
284 if ((status =
NT_InfoRead(hInfoStream, &hInfo)) != 0) {
287 fprintf(stderr,
"NT_ConfigRead() failed: %s\n", errorBuffer);
293 printf(
"Found %d adapters\n", numAdapters);
295 for (i=0;i<numAdapters;i++) {
299 if ((status =
NT_InfoRead(hInfoStream, &hInfo)) != NT_SUCCESS) {
302 fprintf(stderr,
"Failed to read timesync info: %s\n", errorBuffer);
307 printf(
"Adapter %d:\n", i);
334 if ((status =
NT_InfoRead(hInfoStream, &hInfo)) != NT_SUCCESS) {
337 fprintf(stderr,
"NT_InfoRead() failed: %s\n", errorBuffer);
343 fprintf(stderr,
"Timestamp should be Native UNIX, please configure in the Ntservice.ini file.\n");
350 fprintf(stderr,
"No PPS Enabled adapters found! Please configure PPS in ntservice.ini\n");
358 fprintf(stderr,
"NT_EventOpen() failed: %s\n", errorBuffer);
366 fprintf(stderr,
"NT_ConfigOpen() failed: %s\n", errorBuffer);
371 for (i=0;i<numAdapters;i++) {
381 if ((status =
NT_ConfigWrite(hConfigStream, &configInfo)) != NT_SUCCESS) {
384 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);
390 fprintf(stderr,
"PPS example starting in 5 seconds\n");
391 #if defined(WIN32) || defined (WIN64) 397 #if defined(WIN32) || defined (WIN64) 399 if (system(
"cls")==0) {
404 if (system(
"clear")==0) {
408 printf(
"PPS Example running (press CTRL-C to exit)\n");
413 if (status == NT_STATUS_TIMEOUT) {
416 if (status != NT_SUCCESS) {
419 fprintf(stderr,
"NT_EventRead() failed: %s\n", errorBuffer);
435 if ((status =
NT_ConfigWrite(hConfigStream, &configInfo)) != NT_SUCCESS) {
438 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);
445 if (helpTime != printTime) {
448 #if defined(WIN32) || defined (WIN64) 450 if (system(
"cls")==0) {
455 if (system(
"clear")==0) {
461 for (i=0;i<numAdapters;i++) {
466 if ((status =
NT_InfoRead(hInfoStream, &hInfo)) != NT_SUCCESS) {
469 fprintf(stderr,
"Failed to read timesync info: %s\n", errorBuffer);
476 printf(
"PPS signal lost on adapter %d\n", i);
482 printf(
"PPS signal found on adapter %d\n", i);
492 for (i=0;i<numAdapters;i++) {
499 if ((status =
NT_ConfigWrite(hConfigStream, &configInfo)) != NT_SUCCESS) {
502 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);
512 fprintf(stderr,
"NT_ConfigClose() failed: %s\n", errorBuffer);
520 fprintf(stderr,
"NT_EventClose() failed: %s\n", errorBuffer);
525 if ((status =
NT_InfoClose(hInfoStream)) != NT_SUCCESS) {
528 fprintf(stderr,
"NT_InfoClose() failed: %s\n", errorBuffer);
532 printf(
"Streams closed\n");