DCMD_PTPD_DELAYMS

Get the master-to-slave delay

Synopsis:

#include <dcmd_ptpd.h>

#define DCMD_PTPD_DELAYMS   __DIOF(_DCMD_NET, 10, MyTimeInternal )

Arguments to devctl():

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

Description:

The DCMD_PTPD_DELAYMS command gets the network latency in the direction from the master to the slave for the Precision Time Protocol.

Note: In order to use this command, you must specify the -K option when you start ptpd or ptpd-avb.

Input:

None

Output:

A filled-in MyTimeInternal structure, which is defined in <dcmd_ptpd.h> as follows:

typedef struct {
        uint32_t seconds;
        uint32_t nanoseconds;
} MyTimeInternal;

Example:

#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);
}

See also:

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

http://ptpd.sourceforge.net/