ecb4554ecd483d4a10f70850b60d41a3cea0d5cf
[platform/core/system/pass.git] / src / resource / resource-battery.c
1 /*
2  * PASS (Power Aware System Service) - Battery Resource Driver
3  *
4  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 /**
20  * @file        resource-battery.c
21  * @brief       TBD
22  * @ingroup     TBD
23  */
24
25 #include <glib.h>
26
27 #include <util/common.h>
28 #include <util/log.h>
29 #include <libsyscommon/resource-manager.h>
30 #include <libsyscommon/resource-type.h>
31
32 #include <resource-monitor/resource-monitor.h>
33
34 static int battery_get_info(struct syscommon_resman_resource *res,
35                                 const struct syscommon_resman_resource_attribute *attr,
36                                 void *data)
37 {
38         char *path = NULL;
39         int ret;
40         int *val = (int *)data;
41
42         if (!res || !attr || !data)
43                 return -EINVAL;
44
45         switch (attr->id) {
46         case BATTERY_ATTR_CAPACITY:
47                 path = "/sys/class/power_supply/battery/capacity";
48                 break;
49         case BATTERY_ATTR_TEMPERATURE:
50                 path = "/sys/class/power_supply/battery/temp";
51                 break;
52         case BATTERY_ATTR_VOLTAGE_NOW:
53                 path = "/sys/class/power_supply/battery/voltage_now";
54                 break;
55         case BATTERY_ATTR_CURRENT_NOW:
56                 path = "/sys/class/power_supply/battery/current_now";
57                 break;
58         case BATTERY_ATTR_PRESENT:
59                 path = "/sys/class/power_supply/battery/present";
60                 break;
61         case BATTERY_ATTR_ONLINE:
62                 path = "/sys/class/power_supply/battery/online";
63                 break;
64         default:
65                 return -EINVAL;
66         }
67
68         ret = sysfs_get_int(path, val);
69         if (ret < 0)
70                 return ret;
71
72         return 0;
73 }
74
75 static int battery_get_status(struct syscommon_resman_resource *res,
76                                 const struct syscommon_resman_resource_attribute *attr,
77                                 void *data)
78 {
79         char *buf = (char *)data;
80         int ret;
81
82         if (!res || !attr || !data)
83                 return -EINVAL;
84
85         ret = sys_get_str("/sys/class/power_supply/battery/status", buf);
86         if (ret < 0)
87                 return ret;
88
89         return 0;
90 }
91
92 static const struct syscommon_resman_resource_attribute battery_attrs[] = {
93         {
94                 .name   = "BATTERY_ATTR_CAPACITY",
95                 .id     = BATTERY_ATTR_CAPACITY,
96                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_INT,
97                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
98                 .ops    = {
99                         .get = battery_get_info,
100                 }
101         }, {
102                 .name   = "BATTERY_ATTR_STATUS",
103                 .id     = BATTERY_ATTR_STATUS,
104                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_STRING,
105                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
106                 .ops    = {
107                         .get = battery_get_status,
108                 }
109         }, {
110                 .name   = "BATTERY_ATTR_TEMPERATURE",
111                 .id     = BATTERY_ATTR_TEMPERATURE,
112                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_INT,
113                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
114                 .ops    = {
115                         .get = battery_get_info,
116                 }
117         }, {
118                 .name   = "BATTERY_ATTR_VOLTAGE_NOW",
119                 .id     = BATTERY_ATTR_VOLTAGE_NOW,
120                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_INT,
121                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
122                 .ops    = {
123                         .get = battery_get_info,
124                 }
125         }, {
126                 .name   = "BATTERY_ATTR_CURRENT_NOW",
127                 .id     = BATTERY_ATTR_CURRENT_NOW,
128                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_INT,
129                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
130                 .ops    = {
131                         .get = battery_get_info,
132                 }
133         }, {
134                 .name   = "BATTERY_ATTR_PRESENT",
135                 .id     = BATTERY_ATTR_PRESENT,
136                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_INT,
137                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
138                 .ops    = {
139                         .get = battery_get_info,
140                 }
141         }, {
142                 .name   = "BATTERY_ATTR_ONLINE",
143                 .id     = BATTERY_ATTR_ONLINE,
144                 .type   = SYSCOMMON_RESMAN_DATA_TYPE_INT,
145                 .flag   = SYSCOMMON_RESMAN_RESOURCE_ATTR_FLAG_PUBLIC,
146                 .ops    = {
147                         .get = battery_get_info,
148                 }
149         },
150 };
151
152 static const struct syscommon_resman_resource_driver battery_resource_driver = {
153         .name           = "BATTERY",
154         .type           = RESOURCE_TYPE_BATTERY,
155         .attrs          = battery_attrs,
156         .num_attrs      = ARRAY_SIZE(battery_attrs),
157 };
158 SYSCOMMON_RESMAN_RESOURCE_DRIVER_REGISTER(&battery_resource_driver)