/*
  timestamp jitter correction class
 */

#pragma once

class JitterCorrection {
public:
    // constructor
    JitterCorrection(uint16_t max_lag_ms=500, uint16_t convergence_loops=100);

    // correct an offboard timestamp to a jitter-free local
    // timestamp. See JitterCorrection.cpp for details
    uint64_t correct_offboard_timestamp_usec(uint64_t offboard_usec, uint64_t local_usec);

    // correct an offboard timestamp to a jitter-free local
    // timestamp. See JitterCorrection.cpp for details
    uint32_t correct_offboard_timestamp_msec(uint32_t offboard_ms, uint32_t local_ms);

    int64_t get_link_offset_usec(void) const { return link_offset_usec; }

private:
    const uint16_t max_lag_ms;
    const uint16_t convergence_loops;
    int64_t link_offset_usec;
    int64_t min_sample_us;
    bool initialised;
    uint16_t min_sample_counter;
};