Schimbarea modurilor de alimentare

void power_set_mode (PowerMode new_mode);

gestionare energiei

void power_set_controller_mode (PowerController * controller, PowerMode new_mode);

void power_set_controller_mode_now (controller PowerController *, PowerMode new_mode);

Schimbarea modului Global Power

Funcționalitatea principală acceptată de pachetul de gestionare a energiei este schimbarea modului global de alimentare a sistemului. Acest lucru se realizează apelând funcția power_set_mode cu un singur argument, care ar trebui să fie unul dintre PowerMode_Active, PowerMode_Idle, PowerMode_Sleep sau PowerMode_Off. De obicei, această funcție va fi invocată numai în anumite scenarii:

Un sistem tipic va conține un modul de politică care este în primul rând responsabil pentru inițierea modificărilor modului de alimentare și un fir din pachetul de gestionare a energiei. Modulul de politică va numi power_set_mode, care are ca efect manipularea unei stări interne din pachetul de gestionare a energiei și trezirea firului său. Când acest thread este programat să ruleze (prioritatea sa este controlată de o opțiune de configurare), va itera asupra controlerelor de putere și va invoca fiecare controler pentru a-și schimba modul de alimentare. Există suport pentru o funcție de apel invers și pentru controlere de putere detașate.

După un apel către power_set_mode, dar înainte ca firul de gestionare a energiei să aibă șansa de a itera pe toate controlerele sau chiar înainte ca firul să fie reprogramat, modulul de politică poate decide că un alt mod de alimentare ar fi mai potrivit pentru actualul situație și apelează din nou power_set_mode. Acest lucru are ca efect întreruperea modificării de mod anterioare, urmată de firul de gestionare a energiei care repetă controlerele de putere pentru noul mod.

Dacă nu există un singur modul de politică responsabil pentru modificările modului de alimentare, orice cod poate apela power_set_mode. Dacă există mai multe apeluri în succesiune rapidă, apelurile anterioare vor fi întrerupte și sistemul ar trebui să ajungă în modul de alimentare corespunzător ultimului apel

Ca un caz special, este posibil ca un controler de putere să apeleze power_set_mode atunci când este invocat de firul de gestionare a energiei. De exemplu, un controler de putere ar putea decide că este inadecvat ca sistemul să intre în repaus, deoarece dispozitivul cu care este asociat este încă ocupat. Efectul este ca și cum modulul de politică ar fi apelat din nou power_set_mode înainte de finalizarea modificării modului.