diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/stateless/dp/trex_stateless_dp_core.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp index 19eface1..f8d6d828 100644 --- a/src/stateless/dp/trex_stateless_dp_core.cpp +++ b/src/stateless/dp/trex_stateless_dp_core.cpp @@ -394,12 +394,27 @@ bool TrexStatelessDpCore::set_stateless_next_node(CGenNodeStateless * cur_node, void TrexStatelessDpCore::idle_state_loop() { + const int SHORT_DELAY_MS = 2; + const int LONG_DELAY_MS = 50; + const int DEEP_SLEEP_LIMIT = 2000; + + int counter = 0; + while (m_state == STATE_IDLE) { bool had_msg = periodic_check_for_cp_messages(); - /* if no message - backoff for some time */ - if (!had_msg) { - delay(200); + if (had_msg) { + counter = 0; + continue; + } + + /* enter deep sleep only if enough time had passed */ + if (counter < DEEP_SLEEP_LIMIT) { + delay(SHORT_DELAY_MS); + counter++; + } else { + delay(LONG_DELAY_MS); } + } } |