1/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.health@2.1;
18
19import @2.0::IHealth;
20import @2.0::Result;
21import HealthConfig;
22import HealthInfo;
23import IHealthInfoCallback;
24
25/**
26 * IHealth manages health info and posts events on registered callbacks.
27 *
28 * An implementation of @2.1::IHealth must be able to handle both
29 * @2.0::IHealthInfoCallback and @2.1::IHealthInfoCallback.
30 * - When registerCallback() is called, an implementation must cast the callback
31 * to @2.1::IHealthInfoCallback.
32 *   - If the cast is successful, when a health info broadcast is sent, the
33 *     implementation must call
34 *     @2.1::IHealthInfoCallback.healthInfoChanged_2_1(). All fields introduced
35 *     in 2.1 must be set appropriately. The implementation must not call
36 *     @2.0::IHealthInfoCallback.healthInfoChanged().
37 *   - If the cast is unsuccessful, the implementation must call
38 *     @2.0::IHealthInfoCallback.healthInfoChanged().
39 * - When unregisterCallback() is called, from then on, updates must not be sent
40 *   through either healthInfoChanged_2_1() or healthInfoChanged().
41 *
42 * Passthrough implementations are not required to send health info to all
43 * callbacks periodically, but they must do so when update() is called.
44 * Binderized implementations must send health info to all callbacks
45 * periodically. The intervals between two notifications must be retrieved from
46 * the passthrough implementation through the getHealthConfig() function.
47 */
48interface IHealth extends @2.0::IHealth {
49    /**
50     * Get configuration of this HAL.
51     *
52     * @return result SUCCESS if successful,
53     *                NOT_SUPPORTED if this API is not supported,
54     *                UNKNOWN for other errors.
55     * @return config HAL configuration, to be ignored if result is not
56     *                SUCCESS.
57     */
58    getHealthConfig() generates (Result result, HealthConfig config);
59
60    /**
61     * Get Health Information.
62     *
63     * @return result SUCCESS if successful,
64     *                NOT_SUPPORTED if this API is not supported,
65     *                UNKNOWN for other errors.
66     * @return value  Health information, to be ignored if result is not
67     *                SUCCESS.
68     */
69    getHealthInfo_2_1() generates (Result result, @2.1::HealthInfo value);
70
71    /**
72     * Return whether the screen should be kept on in charger mode.
73     *
74     * @return result SUCCESS if successful,
75     *                NOT_SUPPORTED if this API is not supported,
76     *                UNKNOWN for other errors.
77     * @return value whether screen should be kept on.
78     */
79    shouldKeepScreenOn() generates (Result result, bool value);
80};
81