| Todd Poynor | 10b235e | 2013-08-07 15:25:14 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * Copyright (C) 2013 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 |  | 
 | 17 | #ifndef _HEALTHD_H_ | 
 | 18 | #define _HEALTHD_H_ | 
 | 19 |  | 
 | 20 | #include <batteryservice/BatteryService.h> | 
| Todd Poynor | e14b37e | 2014-05-20 13:54:40 -0700 | [diff] [blame] | 21 | #include <sys/types.h> | 
| Todd Poynor | 7b27f27 | 2013-09-06 15:14:24 -0700 | [diff] [blame] | 22 | #include <utils/Errors.h> | 
| Todd Poynor | f5d3012 | 2013-08-12 17:03:35 -0700 | [diff] [blame] | 23 | #include <utils/String8.h> | 
| Todd Poynor | 10b235e | 2013-08-07 15:25:14 -0700 | [diff] [blame] | 24 |  | 
| Todd Poynor | 9face5c | 2013-08-08 12:24:53 -0700 | [diff] [blame] | 25 | // periodic_chores_interval_fast, periodic_chores_interval_slow: intervals at | 
 | 26 | // which healthd wakes up to poll health state and perform periodic chores, | 
 | 27 | // in units of seconds: | 
 | 28 | // | 
 | 29 | //    periodic_chores_interval_fast is used while the device is not in | 
 | 30 | //    suspend, or in suspend and connected to a charger (to watch for battery | 
 | 31 | //    overheat due to charging).  The default value is 60 (1 minute).  Value | 
 | 32 | //    -1 turns off periodic chores (and wakeups) in these conditions. | 
 | 33 | // | 
 | 34 | //    periodic_chores_interval_slow is used when the device is in suspend and | 
 | 35 | //    not connected to a charger (to watch for a battery drained to zero | 
 | 36 | //    remaining capacity).  The default value is 600 (10 minutes).  Value -1 | 
 | 37 | //    tuns off periodic chores (and wakeups) in these conditions. | 
| Todd Poynor | f5d3012 | 2013-08-12 17:03:35 -0700 | [diff] [blame] | 38 | // | 
 | 39 | // power_supply sysfs attribute file paths.  Set these to specific paths | 
 | 40 | // to use for the associated battery parameters.  healthd will search for | 
 | 41 | // appropriate power_supply attribute files to use for any paths left empty: | 
 | 42 | // | 
 | 43 | //    batteryStatusPath: charging status (POWER_SUPPLY_PROP_STATUS) | 
 | 44 | //    batteryHealthPath: battery health (POWER_SUPPLY_PROP_HEALTH) | 
 | 45 | //    batteryPresentPath: battery present (POWER_SUPPLY_PROP_PRESENT) | 
 | 46 | //    batteryCapacityPath: remaining capacity (POWER_SUPPLY_PROP_CAPACITY) | 
 | 47 | //    batteryVoltagePath: battery voltage (POWER_SUPPLY_PROP_VOLTAGE_NOW) | 
 | 48 | //    batteryTemperaturePath: battery temperature (POWER_SUPPLY_PROP_TEMP) | 
 | 49 | //    batteryTechnologyPath: battery technology (POWER_SUPPLY_PROP_TECHNOLOGY) | 
 | 50 | //    batteryCurrentNowPath: battery current (POWER_SUPPLY_PROP_CURRENT_NOW) | 
 | 51 | //    batteryChargeCounterPath: battery accumulated charge | 
 | 52 | //                                         (POWER_SUPPLY_PROP_CHARGE_COUNTER) | 
| Todd Poynor | 9face5c | 2013-08-08 12:24:53 -0700 | [diff] [blame] | 53 |  | 
 | 54 | struct healthd_config { | 
 | 55 |     int periodic_chores_interval_fast; | 
 | 56 |     int periodic_chores_interval_slow; | 
| Todd Poynor | f5d3012 | 2013-08-12 17:03:35 -0700 | [diff] [blame] | 57 |  | 
 | 58 |     android::String8 batteryStatusPath; | 
 | 59 |     android::String8 batteryHealthPath; | 
 | 60 |     android::String8 batteryPresentPath; | 
 | 61 |     android::String8 batteryCapacityPath; | 
 | 62 |     android::String8 batteryVoltagePath; | 
 | 63 |     android::String8 batteryTemperaturePath; | 
 | 64 |     android::String8 batteryTechnologyPath; | 
 | 65 |     android::String8 batteryCurrentNowPath; | 
| Todd Poynor | bc10211 | 2013-08-27 18:11:49 -0700 | [diff] [blame] | 66 |     android::String8 batteryCurrentAvgPath; | 
| Todd Poynor | f5d3012 | 2013-08-12 17:03:35 -0700 | [diff] [blame] | 67 |     android::String8 batteryChargeCounterPath; | 
| Todd Poynor | e14b37e | 2014-05-20 13:54:40 -0700 | [diff] [blame] | 68 |  | 
 | 69 |     int (*energyCounter)(int64_t *); | 
| Ruchi Kandoi | bdf11c7 | 2014-09-25 19:44:42 -0700 | [diff] [blame] | 70 |     bool (*screen_on)(android::BatteryProperties *props); | 
| Todd Poynor | 9face5c | 2013-08-08 12:24:53 -0700 | [diff] [blame] | 71 | }; | 
 | 72 |  | 
| Todd Poynor | 7b27f27 | 2013-09-06 15:14:24 -0700 | [diff] [blame] | 73 | // Global helper functions | 
 | 74 |  | 
| Todd Poynor | 98c23d8 | 2013-09-09 20:02:55 -0700 | [diff] [blame] | 75 | int healthd_register_event(int fd, void (*handler)(uint32_t)); | 
| Todd Poynor | 7b27f27 | 2013-09-06 15:14:24 -0700 | [diff] [blame] | 76 | void healthd_battery_update(); | 
 | 77 | android::status_t healthd_get_property(int id, | 
 | 78 |     struct android::BatteryProperty *val); | 
| Todd Poynor | 020369d | 2013-09-18 20:09:33 -0700 | [diff] [blame] | 79 | void healthd_dump_battery_state(int fd); | 
| Todd Poynor | 7b27f27 | 2013-09-06 15:14:24 -0700 | [diff] [blame] | 80 |  | 
| Todd Poynor | c7464c9 | 2013-09-10 12:40:00 -0700 | [diff] [blame] | 81 | struct healthd_mode_ops { | 
 | 82 |     void (*init)(struct healthd_config *config); | 
 | 83 |     int (*preparetowait)(void); | 
 | 84 |     void (*heartbeat)(void); | 
 | 85 |     void (*battery_update)(struct android::BatteryProperties *props); | 
 | 86 | }; | 
 | 87 |  | 
 | 88 | extern struct healthd_mode_ops *healthd_mode_ops; | 
 | 89 |  | 
| Todd Poynor | fea5b4d | 2013-09-09 12:09:08 -0700 | [diff] [blame] | 90 | // Charger mode | 
 | 91 |  | 
 | 92 | void healthd_mode_charger_init(struct healthd_config *config); | 
 | 93 | int healthd_mode_charger_preparetowait(void); | 
 | 94 | void healthd_mode_charger_heartbeat(void); | 
 | 95 | void healthd_mode_charger_battery_update( | 
 | 96 |     struct android::BatteryProperties *props); | 
 | 97 |  | 
| Todd Poynor | 10b235e | 2013-08-07 15:25:14 -0700 | [diff] [blame] | 98 | // The following are implemented in libhealthd_board to handle board-specific | 
 | 99 | // behavior. | 
 | 100 | // | 
| Todd Poynor | f5d3012 | 2013-08-12 17:03:35 -0700 | [diff] [blame] | 101 | // healthd_board_init() is called at startup time to modify healthd's | 
 | 102 | // configuration according to board-specific requirements.  config | 
 | 103 | // points to the healthd configuration values described above.  To use default | 
 | 104 | // values, this function can simply return without modifying the fields of the | 
 | 105 | // config parameter. | 
| Todd Poynor | 10b235e | 2013-08-07 15:25:14 -0700 | [diff] [blame] | 106 |  | 
| Todd Poynor | 9face5c | 2013-08-08 12:24:53 -0700 | [diff] [blame] | 107 | void healthd_board_init(struct healthd_config *config); | 
| Todd Poynor | 10b235e | 2013-08-07 15:25:14 -0700 | [diff] [blame] | 108 |  | 
 | 109 | // Process updated battery property values.  This function is called when | 
 | 110 | // the kernel sends updated battery status via a uevent from the power_supply | 
 | 111 | // subsystem, or when updated values are polled by healthd, as for periodic | 
 | 112 | // poll of battery state. | 
 | 113 | // | 
 | 114 | // props are the battery properties read from the kernel.  These values may | 
 | 115 | // be modified in this call, prior to sending the modified values to the | 
 | 116 | // Android runtime. | 
 | 117 | // | 
 | 118 | // Return 0 to indicate the usual kernel log battery status heartbeat message | 
 | 119 | // is to be logged, or non-zero to prevent logging this information. | 
 | 120 |  | 
 | 121 | int healthd_board_battery_update(struct android::BatteryProperties *props); | 
 | 122 |  | 
 | 123 | #endif /* _HEALTHD_H_ */ |