Loading prrt/proto/clock.c +14 −18 Original line number Diff line number Diff line #include <sys/time.h> #include <stdlib.h> #include "../util/time.h" #include "../util/common.h" #include "clock.h" Loading @@ -19,50 +20,45 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock) prrtTimestamp_t lastMeasurement = clock->lastMeasurement; prrtTimeDifference_t diff = diff_abs_ts(currentTime, lastMeasurement); prrtTimeDifference_t skew = (diff * clock->skew) / 400; return (prrtTimestamp_t) virtualTime + clock->meanDeviation + skew; return (prrtTimestamp_t) (virtualTime + clock->meanDeviation + skew); } else { return currentTime; } } bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt) bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t propagation_delay) { prrtTimestamp_t virtualTime = PrrtClock_get_prrt_time_us(clock); prrtTimestamp_t currentTime = PrrtClock_get_current_time_us(); prrtTimestamp_t virtualTime = clock->virtualTime; prrtTimeDifference_t clockSkew = clock->skew; prrtTimedelta_t delay = rtt/2; // half the rtt prrtTimeDifference_t phaseError = referenceTime - virtualTime + delay; //printf("V: %13u, C: %13u, S: %13d, R: %13u, E: %13d, D: %3u L: %u\n", virtualTime, currentTime, clockSkew, referenceTime, phaseError, delay, clock->lastMeasurement); int64_t clockSkew = clock->skew; prrtTimedelta_t delay = propagation_delay / 2; // half the rtt int64_t phaseError = PrrtTimestamp_cmp(referenceTime, virtualTime) + delay; //printf("V: %13u, C: %13u, S: %13d, R: %13u, E: %13ld, D: %3u L: %u\n", virtualTime, currentTime, clockSkew, referenceTime, phaseError, delay, clock->lastMeasurement); if(abs(phaseError) > 10000) { if(labs(phaseError) > 10000) { clock->meanDeviation = 0; clock->skew = 0; clock->lastMeasurement = currentTime; clock->virtualTime = currentTime; } prrtTimeDifference_t deviationSum = (prrtTimeDifference_t) (phaseError + 3 * clock->meanDeviation); // TODO: why 3? int64_t deviationSum =(phaseError + 3 * clock->meanDeviation); // TODO: why 3? prrtTimeDifference_t meanDeviation = (prrtTimeDifference_t) (deviationSum / 4); // TODO: find out why??? prrtTimeDifference_t period = diff_abs_ts(currentTime, clock->lastMeasurement); int64_t period = PrrtTimestamp_cmp(currentTime, clock->lastMeasurement); if(period > 0) { clockSkew = (meanDeviation / period) + 15 * clock->skew; clockSkew = (prrtTimeDifference_t) (clockSkew / 16); } virtualTime = virtualTime + meanDeviation + period * clockSkew / 400; virtualTime = clock->virtualTime + meanDeviation + period * clockSkew / 400; clock->meanDeviation = meanDeviation; clock->skew = clockSkew; clock->skew = (prrtTimeDifference_t) clockSkew; clock->lastMeasurement = currentTime; clock->virtualTime = virtualTime; if(abs(phaseError) > 10000) { clock->virtualTime = currentTime; } //printf("V: %13u, C: %13u; S: %13d; M: %13d, P:%13u\n", virtualTime, currentTime, clockSkew, meanDeviation, period); //printf("V: %13u, C: %13u; S: %13d; M: %13d, P:%13u\n\n", virtualTime, currentTime, clockSkew, meanDeviation, period); return true; } Loading prrt/proto/clock.h +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ prrtTimestamp_t PrrtClock_get_current_time_us(void); prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock); bool PrrtClock_update(PrrtClock *clock, prrtTimestamp_t referenceTime, prrtTimedelta_t rtt); bool PrrtClock_update(PrrtClock *clock, prrtTimestamp_t referenceTime, prrtTimedelta_t propagation_delay); #define diff_abs_ts(timeA, timeB) (prrtTimeDifference_t) abs(((prrtTimeDifference_t) timeA) - ((prrtTimeDifference_t)timeB)) Loading prrt/receiver.c +4 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,10 @@ int main(int argc, char **argv) { buffer[n] = '\0'; unsigned int seqno; sscanf(buffer, "%u", &seqno); prrtTimestamp_t current_time = PrrtClock_get_current_time_us(); prrtTimestamp_t prrt_time = PrrtClock_get_prrt_time_us(&s->clock); printf("C: %d\nP: %d\nD: \n%d\n\n", current_time, prrt_time, prrt_time - current_time); debug(DEBUG_RECEIVER, "[B (n: %3d, i: %3d)] %s", n, i, buffer); i++; } Loading Loading
prrt/proto/clock.c +14 −18 Original line number Diff line number Diff line #include <sys/time.h> #include <stdlib.h> #include "../util/time.h" #include "../util/common.h" #include "clock.h" Loading @@ -19,50 +20,45 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock) prrtTimestamp_t lastMeasurement = clock->lastMeasurement; prrtTimeDifference_t diff = diff_abs_ts(currentTime, lastMeasurement); prrtTimeDifference_t skew = (diff * clock->skew) / 400; return (prrtTimestamp_t) virtualTime + clock->meanDeviation + skew; return (prrtTimestamp_t) (virtualTime + clock->meanDeviation + skew); } else { return currentTime; } } bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt) bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t propagation_delay) { prrtTimestamp_t virtualTime = PrrtClock_get_prrt_time_us(clock); prrtTimestamp_t currentTime = PrrtClock_get_current_time_us(); prrtTimestamp_t virtualTime = clock->virtualTime; prrtTimeDifference_t clockSkew = clock->skew; prrtTimedelta_t delay = rtt/2; // half the rtt prrtTimeDifference_t phaseError = referenceTime - virtualTime + delay; //printf("V: %13u, C: %13u, S: %13d, R: %13u, E: %13d, D: %3u L: %u\n", virtualTime, currentTime, clockSkew, referenceTime, phaseError, delay, clock->lastMeasurement); int64_t clockSkew = clock->skew; prrtTimedelta_t delay = propagation_delay / 2; // half the rtt int64_t phaseError = PrrtTimestamp_cmp(referenceTime, virtualTime) + delay; //printf("V: %13u, C: %13u, S: %13d, R: %13u, E: %13ld, D: %3u L: %u\n", virtualTime, currentTime, clockSkew, referenceTime, phaseError, delay, clock->lastMeasurement); if(abs(phaseError) > 10000) { if(labs(phaseError) > 10000) { clock->meanDeviation = 0; clock->skew = 0; clock->lastMeasurement = currentTime; clock->virtualTime = currentTime; } prrtTimeDifference_t deviationSum = (prrtTimeDifference_t) (phaseError + 3 * clock->meanDeviation); // TODO: why 3? int64_t deviationSum =(phaseError + 3 * clock->meanDeviation); // TODO: why 3? prrtTimeDifference_t meanDeviation = (prrtTimeDifference_t) (deviationSum / 4); // TODO: find out why??? prrtTimeDifference_t period = diff_abs_ts(currentTime, clock->lastMeasurement); int64_t period = PrrtTimestamp_cmp(currentTime, clock->lastMeasurement); if(period > 0) { clockSkew = (meanDeviation / period) + 15 * clock->skew; clockSkew = (prrtTimeDifference_t) (clockSkew / 16); } virtualTime = virtualTime + meanDeviation + period * clockSkew / 400; virtualTime = clock->virtualTime + meanDeviation + period * clockSkew / 400; clock->meanDeviation = meanDeviation; clock->skew = clockSkew; clock->skew = (prrtTimeDifference_t) clockSkew; clock->lastMeasurement = currentTime; clock->virtualTime = virtualTime; if(abs(phaseError) > 10000) { clock->virtualTime = currentTime; } //printf("V: %13u, C: %13u; S: %13d; M: %13d, P:%13u\n", virtualTime, currentTime, clockSkew, meanDeviation, period); //printf("V: %13u, C: %13u; S: %13d; M: %13d, P:%13u\n\n", virtualTime, currentTime, clockSkew, meanDeviation, period); return true; } Loading
prrt/proto/clock.h +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ prrtTimestamp_t PrrtClock_get_current_time_us(void); prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock); bool PrrtClock_update(PrrtClock *clock, prrtTimestamp_t referenceTime, prrtTimedelta_t rtt); bool PrrtClock_update(PrrtClock *clock, prrtTimestamp_t referenceTime, prrtTimedelta_t propagation_delay); #define diff_abs_ts(timeA, timeB) (prrtTimeDifference_t) abs(((prrtTimeDifference_t) timeA) - ((prrtTimeDifference_t)timeB)) Loading
prrt/receiver.c +4 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,10 @@ int main(int argc, char **argv) { buffer[n] = '\0'; unsigned int seqno; sscanf(buffer, "%u", &seqno); prrtTimestamp_t current_time = PrrtClock_get_current_time_us(); prrtTimestamp_t prrt_time = PrrtClock_get_prrt_time_us(&s->clock); printf("C: %d\nP: %d\nD: \n%d\n\n", current_time, prrt_time, prrt_time - current_time); debug(DEBUG_RECEIVER, "[B (n: %3d, i: %3d)] %s", n, i, buffer); i++; } Loading