Зміна режиму живлення

void power_set_mode (PowerMode new_mode);

управління живленням

void power_set_controller_mode (контролер PowerController *, PowerMode new_mode);

void power_set_controller_mode_now (контролер PowerController *, PowerMode new_mode);

Зміна глобального режиму живлення

Основна функціональність, що підтримується пакетом керування живленням, полягає у зміні глобального режиму живлення системи. Це досягається викликом функції power_set_mode з одним аргументом, який повинен бути одним із PowerMode_Active, PowerMode_Idle, PowerMode_Sleep або PowerMode_Off. Зазвичай ця функція буде викликана лише в певних сценаріях:

Типова система буде містити модуль політики, який головним чином відповідає за ініціювання змін режиму живлення, і потік всередині пакета управління живленням. Модуль політики буде викликати power_set_mode, що призведе до маніпулювання деяким внутрішнім станом у пакеті управління живленням та пробудження його потоку. Коли цей потік планується запустити (його пріоритет контролюється параметром конфігурації), він буде перебирати контролери живлення та викликати кожен контролер, щоб змінити режим живлення. Існує підтримка функції зворотного виклику та окремих контролерів живлення.

Після виклику power_set_mode, але до того, як потік управління живленням мав можливість переглядати всі контролери, або навіть до того, як потік був взагалі перепланований, модуль політики може вирішити, що інший режим живлення буде більш доречним для поточного ситуація і знову викликає power_set_mode. Це призводить до скасування попередньої зміни режиму, а потім повторної ітерації потоку управління живленням над контролерами живлення для нового режиму.

Якщо немає жодного модуля політики, відповідального за зміни режиму живлення, будь-який код може викликати power_set_mode. Якщо є кілька викликів у швидкій послідовності, попередні дзвінки будуть припинені, і система повинна потрапити в режим живлення, що відповідає останньому дзвінку

Як особливий випадок, контролер живлення може викликати power_set_mode, коли його викликає потік управління живленням. Наприклад, контролер живлення може вирішити, що системі недоречно переходити в режим сну, оскільки пристрій, з яким він пов'язаний, все ще зайнятий. Ефект такий, ніби модуль політики знову викликав power_set_mode до завершення зміни режиму.