X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=CAN-binder%2Flow-can-binding%2Futils%2Ftimer.cpp;h=4584b85909aa06386771765551c0c988fae5bd5d;hb=7747851ca010a3dfe9ffee808376dd5a7af68b91;hp=7edb0d5257aa924aaf57344ffef96c61adac853c;hpb=8e67e90410d448d2dc3340795ca8de414d1fe3a9;p=apps%2Fagl-service-can-low-level.git diff --git a/CAN-binder/low-can-binding/utils/timer.cpp b/CAN-binder/low-can-binding/utils/timer.cpp index 7edb0d52..4584b859 100644 --- a/CAN-binder/low-can-binding/utils/timer.cpp +++ b/CAN-binder/low-can-binding/utils/timer.cpp @@ -24,7 +24,7 @@ long long int system_time_us() { struct timespec t_usec; - long long int timestamp_usec; + long long int timestamp_usec = 0; if(!::clock_gettime(CLOCK_MONOTONIC, &t_usec)) timestamp_usec = (t_usec.tv_nsec / 1000ll) + (t_usec.tv_sec* 1000000ll); @@ -34,7 +34,7 @@ long long int system_time_us() long long int system_time_ms() { struct timespec t_msec; - long long int timestamp_msec; + long long int timestamp_msec = 0; if(!::clock_gettime(CLOCK_MONOTONIC, &t_msec)) timestamp_msec = (t_msec.tv_nsec / 1000000ll) + (t_msec.tv_sec* 1000ll); @@ -44,7 +44,7 @@ long long int system_time_ms() long long int system_time_s() { struct timespec t_sec; - long long int timestamp_sec; + long long int timestamp_sec = 0; if(!::clock_gettime(CLOCK_MONOTONIC, &t_sec)) timestamp_sec = t_sec.tv_sec; @@ -62,18 +62,24 @@ frequency_clock_t::frequency_clock_t(float frequency) frequency_ = 1; } +frequency_clock_t::frequency_clock_t(float frequency, uint64_t last_tick, time_function_t time_function) + : unit_{1000000}, frequency_{frequency}, last_tick_{0}, time_function_{nullptr} +{ + if(frequency_ <= 0) + frequency_ = 1; +} /// @brief Return the period in ms given the frequency in hertz. /// @param[in] frequency - Frequency to convert, in hertz -float frequency_clock_t::frequency_to_period() +float frequency_clock_t::frequency_to_period() const { - return frequency_ == 0 ? 0 : 1 / frequency_ * unit_; + return frequency_ == 0 ? 0 : 1 / frequency_; } const struct timeval frequency_clock_t::get_timeval_from_period() const { struct timeval freq = {0, 0}; float f; - freq.tv_usec = (long int)std::modf(frequency_, &f); + freq.tv_usec = (long int)(std::modf(frequency_to_period(), &f) * unit_); freq.tv_sec = (time_t)f; return freq; @@ -97,7 +103,7 @@ bool frequency_clock_t::elapsed(bool stagger) last_tick_ = get_time_function()() - (rand() % int(period)); // Make sure it ticks the the first call - elapsed_time = !started() ? period : get_time_function()() - last_tick_; + elapsed_time = !started() ? period : (float)get_time_function()() - (float)last_tick_; return frequency_ == 0 || elapsed_time >= period; } @@ -109,7 +115,7 @@ float frequency_clock_t::get_frequency() const /// @brief Force the clock to tick, regardless of it its time has actually /// elapsed. -void frequency_clock_t::tick() +void frequency_clock_t::tick(uint64_t timestamp) { - last_tick_ = get_time_function()(); + last_tick_ = timestamp; } \ No newline at end of file