static void calculateClockOffset()

in source/core_sntp_serializer.c [444:474]


static void calculateClockOffset( const SntpTimestamp_t * pClientTxTime,
                                  const SntpTimestamp_t * pServerRxTime,
                                  const SntpTimestamp_t * pServerTxTime,
                                  const SntpTimestamp_t * pClientRxTime,
                                  int64_t * pClockOffset )
{
    /* Variable for storing the first-order difference between timestamps. */
    int64_t firstOrderDiffSend = 0;
    int64_t firstOrderDiffRecv = 0;

    assert( pClientTxTime != NULL );
    assert( pServerRxTime != NULL );
    assert( pServerTxTime != NULL );
    assert( pClientRxTime != NULL );
    assert( pClockOffset != NULL );

    /* Perform first order difference of timestamps on the network send path i.e. T2 - T1.
     * Note: The calculated difference value will always represent years in the range of
     *[-68 years, +68 years]. */
    firstOrderDiffSend = safeTimeDifference( pServerRxTime, pClientTxTime );

    /* Perform first order difference of timestamps on the network receive path i.e. T3 - T4.
     * Note: The calculated difference value will always represent years in the range of
     *[-68 years, +68 years]. */
    firstOrderDiffRecv = safeTimeDifference( pServerTxTime, pClientRxTime );

    /* Now calculate the system clock-offset relative to server time as the average of the
     * first order difference of timestamps in both directions of network path.
     * Note: This will ALWAYS represent offset in the range of [-68 years, +68 years]. */
    *pClockOffset = ( firstOrderDiffSend + firstOrderDiffRecv ) / 2;
}