display: Relocate ambient-mode file to core
[platform/core/system/deviced.git] / src / display / display-plugin.c
1 /*
2  * deviced
3  *
4  * Copyright (c) 2023 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 #include <errno.h>
20 #include "display-plugin.h"
21 #include "shared/log-macro.h"
22
23 struct display_plugin g_display_plugin;
24
25 void* display_plugin_handle(void)
26 {
27         return g_display_plugin.handle;
28 }
29
30 int display_plugin_pm_lock_internal(pid_t pid, int s_bits, int flags, int timeout)
31 {
32         if (g_display_plugin.pm_lock_internal)
33                 return g_display_plugin.pm_lock_internal(pid, s_bits, flags, timeout);
34
35         return 0;
36 }
37
38 int display_plugin_pm_unlock_internal(pid_t pid, int s_bits, int flags)
39 {
40         if (g_display_plugin.pm_unlock_internal)
41                 return g_display_plugin.pm_unlock_internal(pid, s_bits, flags);
42
43         return 0;
44 }
45
46 int display_plugin_pm_change_internal(pid_t pid, int s_bits)
47 {
48         if (g_display_plugin.pm_change_internal)
49                 return g_display_plugin.pm_change_internal(pid, s_bits);
50
51         return 0;
52 }
53
54 int display_plugin_update_pm_setting(int key_idx, int val)
55 {
56         if (g_display_plugin.update_pm_setting)
57                 return g_display_plugin.update_pm_setting(key_idx, val);
58
59         return 0;
60 }
61
62 /* FIXME: return 0 can be value of get_lock_screen_state, it is hard to distinguish error or not */
63 int display_plugin_get_lock_screen_state(void)
64 {
65         if (g_display_plugin.get_lock_screen_state)
66                 return g_display_plugin.get_lock_screen_state();
67
68         return 0;
69 }
70
71 int display_plugin_get_system_wakeup_flag(bool *flag)
72 {
73         *flag = g_display_plugin.system_wakeup_flag;
74
75         return 0;
76 }
77
78 int display_plugin_set_system_wakeup_flag(bool flag)
79 {
80         g_display_plugin.system_wakeup_flag = flag;
81
82         return 0;
83 }
84
85 const char* display_plugin_device_flags_to_string(enum device_flags flags)
86 {
87         if (g_display_plugin.device_flags_to_string)
88                 return g_display_plugin.device_flags_to_string(flags);
89
90         return NULL;
91 }
92
93 int display_plugin_auto_brightness_control(enum brightness_request_e request, int set_brightness)
94 {
95         if (g_display_plugin.auto_brightness_control)
96                 return g_display_plugin.auto_brightness_control(request, set_brightness);
97
98         return 0;
99 }
100
101 int display_plugin_backlight_get_lcd_power(void)
102 {
103         if (g_display_plugin.backlight && g_display_plugin.backlight->get_lcd_power)
104                 return g_display_plugin.backlight->get_lcd_power();
105
106         return -EOPNOTSUPP;
107 }
108
109 int display_plugin_backlight_set_brightness(int brightness)
110 {
111         if (g_display_plugin.backlight && g_display_plugin.backlight->set_brightness)
112                 return g_display_plugin.backlight->set_brightness(brightness);
113
114         return -EOPNOTSUPP;
115 }
116
117 int display_plugin_backlight_get_brightness(int *brightness)
118 {
119         if (g_display_plugin.backlight && g_display_plugin.backlight->get_brightness)
120                 return g_display_plugin.backlight->get_brightness(brightness);
121
122         return -EOPNOTSUPP;
123 }
124
125 int display_plugin_backlight_transit_state(int state)
126 {
127         if (g_display_plugin.backlight && g_display_plugin.backlight->transit_state)
128                 return g_display_plugin.backlight->transit_state(state);
129
130         return -EOPNOTSUPP;
131 }
132
133 int display_plugin_backlight_transit_brightness(int start, int end, int step)
134 {
135         if (g_display_plugin.backlight && g_display_plugin.backlight->transit_brt) {
136                 g_display_plugin.backlight->transit_brt(start, end, step);
137                 return 0;
138         }
139
140         return -EOPNOTSUPP;
141 }
142
143 /* FIXME: Below functions are temorary to separtate display state transition functions */
144 int display_plugin_state_do_default_trans(enum state_t state, int evt)
145 {
146         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->trans)
147                 return g_display_plugin.display_states[state]->trans(evt);
148
149         return -EOPNOTSUPP;
150 }
151
152 bool display_plugin_state_is_there_default_trans(enum state_t state)
153 {
154         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->trans)
155                 return true;
156
157         return false;
158 }
159
160 int display_plugin_state_do_default_action(enum state_t state, int timeout)
161 {
162         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->action)
163                 return g_display_plugin.display_states[state]->action(timeout);
164
165         return -EOPNOTSUPP;
166 }
167
168 int display_plugin_state_do_default_check(enum state_t state, int curr, int next)
169 {
170         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->check)
171                 return g_display_plugin.display_states[state]->check(curr, next);
172
173         return -EOPNOTSUPP;
174 }
175
176 int display_plugin_state_delete_state_cond(void *data, enum state_t s_state)
177 {
178         if (g_display_plugin.delete_state_cond) {
179                 g_display_plugin.delete_state_cond(data, s_state);
180                 return 0;
181         }
182
183         return -EOPNOTSUPP;
184 }
185
186 int display_plugin_state_get_name(enum state_t state, const char **state_name)
187 {
188         if (!state_name)
189                 return -EINVAL;
190
191         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->name) {
192                 *state_name = g_display_plugin.display_states[state]->name;
193                 return 0;
194         }
195
196         return -EOPNOTSUPP;
197 }
198
199 int display_plugin_state_set_timeout(enum state_t state, int state_timeout)
200 {
201         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->timeout) {
202                 g_display_plugin.display_states[state]->timeout = state_timeout;
203                 return 0;
204         }
205
206         return -EOPNOTSUPP;
207 }
208
209 int display_plugin_state_get_timeout(enum state_t state, int* state_timeout)
210 {
211         if (!state_timeout)
212                 return -EINVAL;
213
214         if (g_display_plugin.display_states[state] && g_display_plugin.display_states[state]->timeout) {
215                 *state_timeout = g_display_plugin.display_states[state]->timeout;
216                 return 0;
217         }
218
219         return -EOPNOTSUPP;
220 }
221
222 int display_plugin_config_get_timeout_enable(bool *timeout_enable)
223 {
224         if (!timeout_enable)
225                 return -EINVAL;
226
227         if (g_display_plugin.config) {
228                 *timeout_enable = g_display_plugin.config->timeout_enable;
229                 return 0;
230         }
231
232         return -EOPNOTSUPP;
233 }
234
235 int display_plugin_set_dim_state(bool on)
236 {
237         if (g_display_plugin.set_dim_state) {
238                 g_display_plugin.set_dim_state(on);
239                 return 0;
240         }
241
242         return -EOPNOTSUPP;
243 }