11#if PC_ENABLE_SLEEP_SCHED
13uint32_t pc_sleep_next(uint32_t now, uint32_t last_active_ms,
const pc_sleep_cfg *cfg)
20 uint32_t idle = (uint32_t)(now - last_active_ms);
21 if (idle < cfg->idle_ms)
26 uint32_t ceil_ms = cfg->max_ms < cfg->min_ms ? cfg->min_ms : cfg->max_ms;
27 if (cfg->ramp_ms == 0)
34 uint32_t doublings = (idle - cfg->idle_ms) / cfg->ramp_ms;
35 uint32_t window = cfg->min_ms ? cfg->min_ms : 1;
36 for (uint32_t i = 0; i < doublings; i++)
38 if (window >= ceil_ms || window > ceil_ms / 2)
55 if (window < cfg->min_ms)
Dynamic sleep-cycle scheduler (PC_ENABLE_SLEEP_SCHED).