diff --git a/a8/xtimer.cc b/a8/xtimer.cc index a1c5dec..b8fcff8 100644 --- a/a8/xtimer.cc +++ b/a8/xtimer.cc @@ -342,6 +342,18 @@ namespace a8 InternalDelete(base_->running_timer, false, true); } + long long GetIdleTime() + { + int idle_time = 1; + for (int lv1_idx = base_->timer_tick & TVR_MASK; lv1_idx < TVR_SIZE; ++lv1_idx) { + if (!list_empty(base_->tv1.vec + lv1_idx)) { + return idle_time <= 1 ? 1 : idle_time - 1; + } + ++idle_time; + } + return idle_time <= 1 ? 1 : idle_time - 1; + } + private: void AddToFreeList(xtimer_list* timer) @@ -574,4 +586,9 @@ namespace a8 impl_->DeleteCurrentTimer(); } + long long XTimer::GetIdleTime() + { + return impl_->GetIdleTime(); + } + } diff --git a/a8/xtimer.h b/a8/xtimer.h index 4fbf377..63277b5 100644 --- a/a8/xtimer.h +++ b/a8/xtimer.h @@ -32,6 +32,7 @@ namespace a8 long long GetRemainTime(XTimerWp& timer_wp); void DeleteCurrentTimer(); bool IsRunning(); + long long GetIdleTime(); private: void ClearAttacher(Attacher* attacher);