Get the master-to-slave delay
#include <dcmd_ptpd.h> #define DCMD_PTPD_DELAYMS __DIOF(_DCMD_NET, 10, MyTimeInternal )
Argument | Value |
---|---|
filedes | A file descriptor that you obtained by opening /dev/ptpd |
dcmd | DCMD_PTPD_DELAYMS |
dev_data_ptr | A pointer to a MyTimeInternal structure |
n_bytes | sizeof(MyTimeInternal) |
dev_info_ptr | NULL |
The DCMD_PTPD_DELAYMS command gets the network latency in the direction from the master to the slave for the Precision Time Protocol.
None
A filled-in MyTimeInternal structure, which is defined in <dcmd_ptpd.h> as follows:
typedef struct { uint32_t seconds; uint32_t nanoseconds; } MyTimeInternal;
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <devctl.h> #include <dcmd_ptpd.h> int main(int argc, char **argv) { int fd, ret; MyTimeInternal delayMS, delaySM, currTime; MyStatusInternal status = PTPD_STATUS_NO_ERROR; MyPTPDINFOInternal info; MyTAIUTCInternal utcOffset; if ((fd = open( DEFAULT_PTPD_PATH, O_RDONLY)) == -1) { fprintf( stderr,"open failed\n"); return(1); } /* Find out what the value is set to initially */ if ( (ret = devctl(fd, DCMD_PTPD_DELAYMS, &delayMS, sizeof(delayMS), NULL)) != 0 ) { fprintf( stderr,"devctl returned error %x", ret ); exit( -1 ); } printf("ptpd delayMS is %d sec, %d nanosec\n", delayMS.seconds, delayMS.nanoseconds); if ( (ret = devctl(fd, DCMD_PTPD_DELAYSM, &delaySM, sizeof(delaySM), NULL)) != 0 ) { fprintf( stderr,"devctl returned error %x", ret ); exit( -1 ); } printf("ptpd delaySM is %d sec, %d nanosec\n", delaySM.seconds, delaySM.nanoseconds); #if defined(__QNXNTO__) && defined(PTP_8021_AS) if ( (ret = devctl(fd, DCMD_PTPD_STATUS, &status, sizeof(status), NULL)) != 0 ) { fprintf( stderr,"devctl returned error %x", ret ); exit( -1 ); } printf("ptpd status is %d \n", status); if ( (ret = devctl(fd, DCMD_PTPD_INFO, &info, sizeof(info), NULL)) != 0 ) { fprintf( stderr,"devctl returned error %x", ret ); exit( -1 ); } printf("ptpd peerdelay is %llu \n", info.peerdelay); if (info.neighborrateratio_valid) { printf("ptpd neighborrateratio %d\n", info.neighborrateratio); } else printf("ptpd neighborrateratio invalid\n"); #endif if ( (ret = devctl(fd, DCMD_PTPD_GET_TAI_UTC_OFFSET, &utcOffset, sizeof(utcOffset), NULL)) != 0 ) { fprintf( stderr, "devctl returned error %x", ret ); exit ( -1 ); } if (utcOffset.currentUtcOffsetValid) { printf("current UTC Offset is %d\n", utcOffset.currentUtcOffset); } else { printf("current UTC offset is invalid\n"); } return(0); }
DCMD_PTPD_DELAYSM, DCMD_PTPD_GET_PDELAY_INTERVAL, DCMD_PTPD_GET_TAI_UTC_OFFSET, DCMD_PTPD_GET_TIME, DCMD_PTPD_INFO, DCMD_PTPD_SEND_SIGNALING_MSG, DCMD_PTPD_SET_PDELAY_INTERVAL, DCMD_PTPD_STATUS
devctl() in the QNX Neutrino C Library Reference
ptpd, ptpd-avb in the Utilities Reference