99ed3d25a3781fb70b5eec92512b7b5b4748c9c9
[platform/hal/api/common.git] / include / hal-common.h
1 /*
2  * HAL (Hardware Abstract Layer) Common API
3  *
4  * Copyright (c) 2020 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 #ifndef __HAL_COMMON__
20 #define __HAL_COMMON__
21
22 #include "hal-common-interface.h"
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 enum hal_license {
29         HAL_LICENSE_UNKNOWN = 0,
30         HAL_LICENSE_APACHE_2_0,
31         HAL_LICENSE_FLORA,
32         HAL_LICENSE_MIT,
33         HAL_LICENSE_END,
34 };
35
36 enum hal_group {
37         HAL_GROUP_UNKNOWN = 0,
38         HAL_GROUP_GRAPHICS,
39         HAL_GROUP_MULTIMEDIA,
40         HAL_GROUP_CONNECTIVITY,
41         HAL_GROUP_TELEPHONY,
42         HAL_GROUP_LOCATION,
43         HAL_GROUP_SYSTEM,
44         HAL_GROUP_END,
45 };
46
47 static const char *const hal_group_string[] = {
48         [HAL_GROUP_UNKNOWN] = "HAL_GROUP_UNKNOWN",
49         [HAL_GROUP_GRAPHICS] = "HAL_GROUP_GRAPHICS",
50         [HAL_GROUP_MULTIMEDIA] = "HAL_GROUP_MULTIMEDIA",
51         [HAL_GROUP_CONNECTIVITY] = "HAL_GROUP_CONNECTIVITY",
52         [HAL_GROUP_TELEPHONY] = "HAL_GROUP_TELEPHONY",
53         [HAL_GROUP_LOCATION] = "HAL_GROUP_LOCATION",
54         [HAL_GROUP_SYSTEM] = "HAL_GROUP_SYSTEM",
55 };
56
57 enum hal_module {
58         HAL_MODULE_UNKNOWN = 0,
59
60         /* HAL_GROUP_GRAPHICS */
61         HAL_MODULE_TBM,
62         HAL_MODULE_TDM,
63         HAL_MODULE_COREGL,
64         HAL_MODULE_INPUT,
65
66         /* HAL_GROUP_MULTIMEDIA */
67         HAL_MODULE_AUDIO,
68         HAL_MODULE_CAMERA,
69         HAL_MODULE_RADIO,
70         HAL_MODULE_CODEC,
71         HAL_MODULE_USB_AUDIO,
72         HAL_MODULE_ALSAUCM,
73
74         /* HAL_GROUP_CONNECTIVITY */
75         HAL_MODULE_BLUETOOTH,
76         HAL_MODULE_WIFI,
77         HAL_MODULE_NAN,
78         HAL_MODULE_NFC,
79         HAL_MODULE_ZIGBEE,
80         HAL_MODULE_UWB,
81         HAL_MODULE_MTP,
82
83         /* HAL_GROUP_TELEPHONY */
84         HAL_MODULE_TELEPHONY,
85
86         /* HAL_GROUP_LOCATION */
87         HAL_MODULE_LOCATION,
88
89         /* HAL_GROUP_SYSTEM */
90         HAL_MODULE_COMMON,
91         HAL_MODULE_POWER,
92         HAL_MODULE_SENSOR,
93         HAL_MODULE_PERIPHERAL,
94         HAL_MODULE_DEVICE_BATTERY,
95         HAL_MODULE_DEVICE_BEZEL,
96         HAL_MODULE_DEVICE_DISPLAY,
97         HAL_MODULE_DEVICE_IR,
98         HAL_MODULE_DEVICE_TOUCHSCREEN,
99         HAL_MODULE_DEVICE_LED,
100         HAL_MODULE_DEVICE_BOARD,
101         HAL_MODULE_DEVICE_EXTERNAL_CONNECTION,
102         HAL_MODULE_DEVICE_THERMAL,
103         HAL_MODULE_DEVICE_USB_GADGET,
104         HAL_MODULE_DEVICE_HAPTIC,
105
106         /*
107          * TODO: If need to add new module, have to add it below
108          * without modifying already defined module id.
109          */
110
111         HAL_MODULE_END,
112 };
113
114 static const char *const hal_module_string[] = {
115         [HAL_MODULE_UNKNOWN] = "HAL_MODULE_UNKNOWN",
116
117         /* HAL_GROUP_GRAPHICS */
118         [HAL_MODULE_TBM] = "HAL_MODULE_TBM",
119         [HAL_MODULE_TDM] = "HAL_MODULE_TDM",
120         [HAL_MODULE_COREGL] = "HAL_MODULE_COREGL",
121         [HAL_MODULE_INPUT] = "HAL_MODULE_INPUT",
122
123         /* HAL_GROUP_MULTIMEDIA */
124         [HAL_MODULE_AUDIO] = "HAL_MODULE_AUDIO",
125         [HAL_MODULE_CAMERA] = "HAL_MODULE_CAMERA",
126         [HAL_MODULE_RADIO] = "HAL_MODULE_RADIO",
127         [HAL_MODULE_CODEC] = "HAL_MODULE_CODEC",
128         [HAL_MODULE_USB_AUDIO] = "HAL_MODULE_USB_AUDIO",
129         [HAL_MODULE_ALSAUCM] = "HAL_MODULE_ALSAUCM",
130
131         /* HAL_GROUP_CONNECTIVITY */
132         [HAL_MODULE_BLUETOOTH] = "HAL_MODULE_BLUETOOTH",
133         [HAL_MODULE_WIFI] = "HAL_MODULE_WIFI",
134         [HAL_MODULE_NAN] = "HAL_MODULE_NAN",
135         [HAL_MODULE_NFC] = "HAL_MODULE_NFC",
136         [HAL_MODULE_ZIGBEE] = "HAL_MODULE_ZIGBEE",
137         [HAL_MODULE_UWB] = "HAL_MODULE_UWB",
138         [HAL_MODULE_MTP] = "HAL_MODULE_MTP",
139
140         /* HAL_GROUP_TELEPHONY */
141         [HAL_MODULE_TELEPHONY] = "HAL_MODULE_TELEPHONY",
142
143         /* HAL_GROUP_LOCATION */
144         [HAL_MODULE_LOCATION] = "HAL_MODULE_LOCATION",
145
146         /* HAL_GROUP_SYSTEM */
147         [HAL_MODULE_COMMON] = "HAL_MODULE_COMMON",
148         [HAL_MODULE_POWER] = "HAL_MODULE_POWER",
149         [HAL_MODULE_SENSOR] = "HAL_MODULE_SENSOR",
150         [HAL_MODULE_PERIPHERAL] = "HAL_MODULE_PERIPHERAL",
151         [HAL_MODULE_DEVICE_BATTERY] = "HAL_MODULE_DEVICE_BATTERY",
152         [HAL_MODULE_DEVICE_BEZEL] = "HAL_MODULE_DEVICE_BEZEL",
153         [HAL_MODULE_DEVICE_DISPLAY] = "HAL_MODULE_DEVICE_DISPLAY",
154         [HAL_MODULE_DEVICE_IR] = "HAL_MODULE_DEVICE_IR",
155         [HAL_MODULE_DEVICE_TOUCHSCREEN] = "HAL_MODULE_DEVICE_TOUCHSCREEN",
156         [HAL_MODULE_DEVICE_LED] = "HAL_MODULE_DEVICE_LED",
157         [HAL_MODULE_DEVICE_BOARD] = "HAL_MODULE_DEVICE_BOARD",
158         [HAL_MODULE_DEVICE_EXTERNAL_CONNECTION] = "HAL_MODULE_DEVICE_EXTERNAL_CONNECTION",
159         [HAL_MODULE_DEVICE_THERMAL] = "HAL_MODULE_DEVICE_THERMAL",
160         [HAL_MODULE_DEVICE_USB_GADGET] = "HAL_MODULE_DEVICE_USB_GADGET",
161         [HAL_MODULE_DEVICE_HAPTIC] = "HAL_MODULE_DEVICE_HAPTIC",
162
163         [HAL_MODULE_END] = "HAL_MODULE_END",
164 };
165
166 /**
167  * @brief Get the backend library name according to the type of HAL module
168  * @param[in] HAL module id among enum hal_moudle
169  * @param[out] Backend Library name of HAL module
170  * @param[in] Arrary size of name[]
171  * @return @c 0 on success, otherwise a negative error value
172  */
173 int hal_common_get_backend_library_name(enum hal_module module, char *name, int size);
174
175 /**
176  * @brief Get the backend symbol name according to the type of HAL module
177  * @param[in] HAL module id among enum hal_moudle
178  * @param[out] Backend symbol name of HAL module
179  * @param[in] Arrary size of name[]
180  * @return @c 0 on success, otherwise a negative error value
181  */
182 int hal_common_get_backend_symbol_name(enum hal_module module, char *name, int size);
183
184 /**
185  * @brief Get the backend data according to the type of HAL module
186  * @param[in] HAL module id among enum hal_moudle
187  * @param[out] Data pointer where 'hal_backend_[module]_funcs' instance
188  *             should be stored from HAL backend binary.
189  * @return @c 0 on success, otherwise a negative error value
190  */
191 int hal_common_get_backend(enum hal_module module, void **data);
192
193 /**
194  * @brief Put the backend data according to the type of HAL module
195  * @param[in] HAL module id among enum hal_moudle
196  * @param[in] Data pointer where 'hal_backend_[module]_funcs' instance
197  * @return @c 0 on success, otherwise a negative error value
198  */
199 int hal_common_put_backend(enum hal_module module, void *data);
200
201 /**
202  * @brief Check HAL ABI version whehter is suppored or not on current platform
203  * @param[in] HAL module id among enum hal_moudle
204  * @param[in] HAL ABI version of backend module among enum hal_abi_version
205  * @return @c 0 on success, otherwise a negative error value
206  */
207 int hal_common_check_backend_abi_version(enum hal_module module,
208                                         enum hal_abi_version abi_version);
209
210 #ifdef __cplusplus
211 }
212 #endif
213 #endif /* __HAL_COMMON__ */