1// Copyright 2014 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5syntax = "proto2"; 6 7option optimize_for = LITE_RUNTIME; 8 9package power_manager; 10 11// Included in powerd's SuspendImminent signal, sent when the system is about to 12// suspend. If any clients previously called RegisterSuspendDelay, suspending 13// will be deferred until they've called powerd's HandleSuspendReadiness method. 14// 15// The general flow is as follows: 16// 17// 1. A client that needs to perform some work before the system can be 18// suspended listens for SuspendImminent and SuspendDone signals from powerd. 19// 2. The client passes a RegisterSuspendDelayRequest message to powerd's 20// RegisterSuspendDelay method and receives a RegisterSuspendDelayReply 21// message in response. The client saves the |delay_id| field from the 22// response. 23// 3. When the power manager is about to suspend the system, it emits a 24// SuspendImminent signal containing a SuspendImminent message. 25// 4. Upon receipt of the signal, the client performs any last minute work 26// that it needs to do and then calls powerd's HandleSuspendReadiness method, 27// including a SuspendReadinessInfo message with its |delay_id| and the 28// |suspend_id| field from the SuspendImminent signal. 29// 5. Once powerd has received notification that all registered clients are 30// ready to suspend, the system will be suspended. If the initial suspend 31// attempt fails, it will be retried automatically, but additional 32// SuspendImminent signals will not be emitted. 33// 6. After the suspend request is complete, powerd emits a SuspendDone signal 34// containing a SuspendDone message. The client should undo any pre-suspend 35// work that was done in response to the SuspendImminent signal. 36// 7. Before the client exits, it calls UnregisterSuspendDelayRequest with a 37// UnregisterSuspendDelayRequest message containing its delay ID. 38message SuspendImminent { 39 // Next ID to use: 2 40 41 // Unique ID corresponding to this suspend request. This is included in the 42 // SuspendReadinessInfo message passed via HandleSuspendReadiness. 43 optional int32 suspend_id = 1; 44} 45 46// Included in powerd's SuspendDone signal, sent after the system has completed 47// a suspend request. Each SuspendImminent signal will be followed by a 48// SuspendDone signal. 49message SuspendDone { 50 // Next ID to use: 3 51 52 // Unique ID corresponding to the suspend request. 53 optional int32 suspend_id = 1; 54 55 // Wall time that the system was suspended, as given by 56 // base::TimeDelta::ToInternalValue(). 57 optional int64 suspend_duration = 2; 58} 59 60// Included in calls to powerd's RegisterSuspendDelay method. 61message RegisterSuspendDelayRequest { 62 // Next ID to use: 3 63 64 // Upper bound on the amount of time that the power manager will wait for this 65 // client to call HandleSuspendReadiness before suspending the system, as 66 // given by base::TimeDelta::ToInternalValue(). 67 optional int64 timeout = 1; 68 69 // Human-readable description of the delay's purpose (e.g. the name of 70 // the daemon that requested the delay). Only used for debugging. 71 optional string description = 2; 72} 73 74// Included in responses to powerd's RegisterSuspendDelay method. 75message RegisterSuspendDelayReply { 76 // Next ID to use: 2 77 78 // Unique ID assigned to the client that registered this suspend delay. This 79 // is included in later HandleSuspendReadiness and UnregisterSuspendDelay 80 // calls. 81 optional int32 delay_id = 1; 82} 83 84// Included in calls to powerd's UnregisterSuspendDelay method. 85message UnregisterSuspendDelayRequest { 86 // Next ID to use: 2 87 88 // ID that was returned in response to the original RegisterSuspendDelay call. 89 optional int32 delay_id = 1; 90} 91 92// Included in calls to powerd's HandleSuspendReadiness method. 93message SuspendReadinessInfo { 94 // Next ID to use: 3 95 96 // ID that was returned to the client in response to its invocation of 97 // RegisterSuspendDelay. 98 optional int32 delay_id = 1; 99 100 // ID that was included in the SuspendImminent signal that provoked this 101 // readiness call. 102 optional int32 suspend_id = 2; 103} 104 105// Included in calls to powerd's RecordDarkResumeWakeReason method. 106message DarkResumeWakeReason { 107 // Next ID to use: 2 108 109 // Wake reason that caused the current dark resume. 110 optional string wake_reason = 1; 111} 112 113