modify doxygen
[platform/core/uifw/libtdm.git] / include / tdm_types.h
1 /**************************************************************************
2
3 libtdm
4
5 Copyright 2015 Samsung Electronics co., Ltd. All Rights Reserved.
6
7 Contact: Eunchul Kim <chulspro.kim@samsung.com>,
8          JinYoung Jeon <jy0.jeon@samsung.com>,
9          Taeheon Kim <th908.kim@samsung.com>,
10          YoungJun Cho <yj44.cho@samsung.com>,
11          SooChan Lim <sc1.lim@samsung.com>,
12          Boram Park <sc1.lim@samsung.com>
13
14 Permission is hereby granted, free of charge, to any person obtaining a
15 copy of this software and associated documentation files (the
16 "Software"), to deal in the Software without restriction, including
17 without limitation the rights to use, copy, modify, merge, publish,
18 distribute, sub license, and/or sell copies of the Software, and to
19 permit persons to whom the Software is furnished to do so, subject to
20 the following conditions:
21
22 The above copyright notice and this permission notice (including the
23 next paragraph) shall be included in all copies or substantial portions
24 of the Software.
25
26 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
29 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
30 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
31 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
32 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33
34 **************************************************************************/
35
36 #ifndef _TDM_TYPES_H_
37 #define _TDM_TYPES_H_
38
39 #include <tbm_surface.h>
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 #define TDM_NAME_LEN        64
46
47 /**
48  * @file tdm_types.h
49  * @brief The header file which defines Enumerations and Structures for frontend and backend.
50  * @details
51  * Both frontend(@ref tdm.h) and backend(@ref tdm_backend.h) header files
52  * include @ref tdm_types.h
53  * @par Example
54  * @code
55    #include <tdm.h>    //for a frontend user
56  * @endcode
57  * @code
58    #include <tdm_backend.h>  //for a vendor to implement a backend module
59  * @endcode
60  */
61
62 /**
63  * @brief The error enumeration
64  */
65 typedef enum
66 {
67     TDM_ERROR_NONE                  = 0,  /**< none */
68     TDM_ERROR_BAD_REQUEST           = -1, /**< bad request */
69     TDM_ERROR_OPERATION_FAILED      = -2, /**< operaion failed */
70     TDM_ERROR_INVALID_PARAMETER     = -3, /**< wrong input parameter */
71     TDM_ERROR_PERMISSION_DENIED     = -4, /**< access denied */
72     TDM_ERROR_BUSY                  = -5, /**< hardware resource busy */
73     TDM_ERROR_OUT_OF_MEMORY         = -6, /**< no free memory */
74     TDM_ERROR_BAD_MODULE            = -7, /**< bad backend module */
75     TDM_ERROR_NOT_IMPLEMENTED       = -8, /**< not implemented */
76     TDM_ERROR_NO_CAPABILITY         = -9, /**< no capability */
77 } tdm_error;
78
79 /**
80  * @brief The transform enumeration(rotate, flip)
81  */
82 typedef enum
83 {
84     TDM_TRANSFORM_NORMAL            = 0, /**< no transform */
85     TDM_TRANSFORM_90                = 1, /**< rotate 90 */
86     TDM_TRANSFORM_180               = 2, /**< rotate 180 */
87     TDM_TRANSFORM_270               = 3, /**< rotate 270 */
88     TDM_TRANSFORM_FLIPPED           = 4, /**< no rotate and horizontal flip */
89     TDM_TRANSFORM_FLIPPED_90        = 5, /**< rotate 90 and horizontal flip */
90     TDM_TRANSFORM_FLIPPED_180       = 6, /**< rotate 180 and horizontal flip */
91     TDM_TRANSFORM_FLIPPED_270       = 7, /**< rotate 270 and horizontal flip */
92 } tdm_transform;
93
94 /**
95  * @brief The output connection status enumeration
96  */
97 typedef enum
98 {
99     TDM_OUTPUT_CONN_STATUS_DISCONNECTED, /**< output disconnected */
100     TDM_OUTPUT_CONN_STATUS_CONNECTED,    /**< output connected */
101     TDM_OUTPUT_CONN_STATUS_MODE_SETTED,  /**< output connected and setted a mode */
102 } tdm_output_conn_status;
103
104 /**
105  * @brief The output connection status enumeration
106  * @details bit compatible with the libdrm definitions.
107  */
108 typedef enum
109 {
110     TDM_OUTPUT_TYPE_Unknown,        /**< unknown */
111     TDM_OUTPUT_TYPE_VGA,            /**< VGA connection */
112     TDM_OUTPUT_TYPE_DVII,           /**< DVII connection */
113     TDM_OUTPUT_TYPE_DVID,           /**< DVID connection */
114     TDM_OUTPUT_TYPE_DVIA,           /**< DVIA connection */
115     TDM_OUTPUT_TYPE_Composite,      /**< Composite connection */
116     TDM_OUTPUT_TYPE_SVIDEO,         /**< SVIDEO connection */
117     TDM_OUTPUT_TYPE_LVDS,           /**< LVDS connection */
118     TDM_OUTPUT_TYPE_Component,      /**< Component connection */
119     TDM_OUTPUT_TYPE_9PinDIN,        /**< 9PinDIN connection */
120     TDM_OUTPUT_TYPE_DisplayPort,    /**< DisplayPort connection */
121     TDM_OUTPUT_TYPE_HDMIA,          /**< HDMIA connection */
122     TDM_OUTPUT_TYPE_HDMIB,          /**< HDMIB connection */
123     TDM_OUTPUT_TYPE_TV,             /**< TV connection */
124     TDM_OUTPUT_TYPE_eDP,            /**< eDP connection */
125     TDM_OUTPUT_TYPE_VIRTUAL,        /**< Virtual connection for WiFi Display */
126     TDM_OUTPUT_TYPE_DSI,            /**< DSI connection */
127 } tdm_output_type;
128
129 /**
130  * @brief The DPMS enumeration
131  * @details bit compatible with the libdrm definitions.
132  */
133 typedef enum
134 {
135     TDM_OUTPUT_DPMS_ON,         /**< On */
136     TDM_OUTPUT_DPMS_STANDBY,    /**< StandBy */
137     TDM_OUTPUT_DPMS_SUSPEND,    /**< Suspend */
138     TDM_OUTPUT_DPMS_OFF,        /**< Off */
139 } tdm_output_dpms;
140
141 /**
142  * @brief The layer capability enumeration
143  * @details
144  * A layer can have one of CURSOR, PRIMARY and OVERLAY capability. And a layer
145  * also can have one of GRAPHIC and VIDEO capability. And a layer also can have
146  * SCALE and TRANSFORM capability.\n
147  * @par Example
148  * @code
149    //For example
150    capabilities = TDM_LAYER_CAPABILITY_PRIMARY | TDM_LAYER_CAPABILITY_GRAPHIC;
151    capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_GRAPHIC | TDM_LAYER_CAPABILITY_SCALE;
152    capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_GRAPHIC | TDM_LAYER_CAPABILITY_SCALE | TDM_LAYER_CAPABILITY_TRANSFORM;
153    capabilities = TDM_LAYER_CAPABILITY_CURSOR | TDM_LAYER_CAPABILITY_GRAPHIC;
154    capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_VIDEO;
155  * @endcode
156  * @remark
157  * - When a video plays, in most of cases, video buffers will be displayed to
158  * a GRAPHIC layer after converting RGB buffers via PP. In this case, a backend
159  * module doesn't need to offer VIDEO layer.
160  * - But in case that s vendor wants to handle a video by their own way,
161  * a backend module offer VIDEO layers. And a display server will pass a video
162  * buffer to a VIDEO layer without converting.
163  */
164 typedef enum
165 {
166     TDM_LAYER_CAPABILITY_CURSOR         = (1<<0),   /**< cursor */
167     TDM_LAYER_CAPABILITY_PRIMARY        = (1<<1),   /**< primary */
168     TDM_LAYER_CAPABILITY_OVERLAY        = (1<<2),   /**< overlay */
169     TDM_LAYER_CAPABILITY_GRAPHIC        = (1<<4),   /**< graphic */
170     TDM_LAYER_CAPABILITY_VIDEO          = (1<<5),   /**< video */
171     TDM_LAYER_CAPABILITY_SCALE          = (1<<8),   /**< if a layer has scale capability  */
172     TDM_LAYER_CAPABILITY_TRANSFORM      = (1<<9),   /**< if a layer has transform capability  */
173 } tdm_layer_capability;
174
175 /**
176  * @brief The pp capability enumeration
177  */
178 typedef enum
179 {
180     TDM_PP_CAPABILITY_SYNC           = (1<<0),  /**< The pp device supports synchronous operation */
181     TDM_PP_CAPABILITY_ASYNC          = (1<<1),  /**< The pp device supports asynchronous operation */
182     TDM_PP_CAPABILITY_SCALE          = (1<<4),  /**< The pp device supports scale operation */
183     TDM_PP_CAPABILITY_TRANSFORM      = (1<<5),  /**< The pp device supports transform operation */
184 } tdm_pp_capability;
185
186 /**
187  * @brief The capture capability enumeration
188  */
189 typedef enum
190 {
191     TDM_CAPTURE_CAPABILITY_OUTPUT    = (1<<0),  /**< The capture device supports to dump a output */
192     TDM_CAPTURE_CAPABILITY_LAYER     = (1<<1),  /**< The capture device supports to dump a layer */
193     TDM_CAPTURE_CAPABILITY_SCALE     = (1<<4),  /**< The capture device supports scale operation */
194     TDM_CAPTURE_CAPABILITY_TRANSFORM = (1<<5),  /**< The capture device supports transform operation */
195 } tdm_capture_capability;
196
197 /**
198  * @brief The output mode type enumeration
199  * @details bit compatible with the libdrm definitions.
200  */
201 typedef enum
202 {
203     TDM_OUTPUT_MODE_TYPE_BUILTIN    = (1<<0),
204     TDM_OUTPUT_MODE_TYPE_CLOCK_C    = ((1<<1) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
205     TDM_OUTPUT_MODE_TYPE_CRTC_C     = ((1<<2) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
206     TDM_OUTPUT_MODE_TYPE_PREFERRED  = (1<<3),
207     TDM_OUTPUT_MODE_TYPE_DEFAULT    = (1<<4),
208     TDM_OUTPUT_MODE_TYPE_USERDEF    = (1<<5),
209     TDM_OUTPUT_MODE_TYPE_DRIVER     = (1<<6),
210 } tdm_output_mode_type;
211
212 /**
213  * @brief The output mode flag enumeration
214  * @details bit compatible with the libdrm definitions.
215  */
216 typedef enum
217 {
218     TDM_OUTPUT_MODE_FLAG_PHSYNC     = (1<<0),
219     TDM_OUTPUT_MODE_FLAG_NHSYNC     = (1<<1),
220     TDM_OUTPUT_MODE_FLAG_PVSYNC     = (1<<2),
221     TDM_OUTPUT_MODE_FLAG_NVSYNC     = (1<<3),
222     TDM_OUTPUT_MODE_FLAG_INTERLACE  = (1<<4),
223     TDM_OUTPUT_MODE_FLAG_DBLSCAN    = (1<<5),
224     TDM_OUTPUT_MODE_FLAG_CSYNC      = (1<<6),
225     TDM_OUTPUT_MODE_FLAG_PCSYNC     = (1<<7),
226     TDM_OUTPUT_MODE_FLAG_NCSYNC     = (1<<8),
227     TDM_OUTPUT_MODE_FLAG_HSKEW      = (1<<9), /* hskew provided */
228     TDM_OUTPUT_MODE_FLAG_BCAST      = (1<<10),
229     TDM_OUTPUT_MODE_FLAG_PIXMUX     = (1<<11),
230     TDM_OUTPUT_MODE_FLAG_DBLCLK     = (1<<12),
231     TDM_OUTPUT_MODE_FLAG_CLKDIV2    = (1<<13),
232 } tdm_output_mode_flag;
233
234 /**
235  * @brief The output mode structure
236  */
237 typedef struct _tdm_output_mode
238 {
239     unsigned int width;
240     unsigned int height;
241     unsigned int refresh;
242     unsigned int flags;
243     unsigned int type;
244     char name[TDM_NAME_LEN];
245 } tdm_output_mode;
246
247 /**
248  * @brief The property structure
249  */
250 typedef struct _tdm_prop
251 {
252     unsigned int id;
253     char name[TDM_NAME_LEN];
254 } tdm_prop;
255
256 /**
257  * @brief The size structure
258  */
259 typedef struct _tdm_size {
260     unsigned int h;     /**< width */
261     unsigned int v;     /**< height */
262 } tdm_size;
263
264 /**
265  * @brief The pos structure
266  */
267 typedef struct _tdm_pos
268 {
269     unsigned int x;
270     unsigned int y;
271     unsigned int w;
272     unsigned int h;
273 } tdm_pos;
274
275 /**
276  * @brief The value union
277  */
278 typedef union
279 {
280     void         *ptr;
281     int32_t  s32;
282     uint32_t u32;
283     int64_t  s64;
284     uint64_t u64;
285 } tdm_value;
286
287 /**
288  * @brief The info config structure
289  */
290 typedef struct _tdm_info_config
291 {
292     tdm_size size;
293     tdm_pos pos;
294     tbm_format format;
295 } tdm_info_config;
296
297 /**
298  * @brief The layer info structre
299  */
300 typedef struct _tdm_info_layer
301 {
302     tdm_info_config src_config;
303     tdm_pos dst_pos;
304     tdm_transform transform;
305 } tdm_info_layer;
306
307 /**
308  * @brief The pp info structre
309  */
310 typedef struct _tdm_info_pp
311 {
312     tdm_info_config src_config;
313     tdm_info_config dst_config;
314     tdm_transform transform;
315     int sync;
316     int flags;
317 } tdm_info_pp;
318
319 /**
320  * @brief The capture info structre
321  */
322 typedef struct _tdm_info_capture
323 {
324     tdm_info_config dst_config;
325     tdm_transform transform;
326     int oneshot;
327     int frequency;
328     int flags;
329 } tdm_info_capture;
330
331 /**
332  * @brief The tdm display object
333  */
334 typedef void tdm_display;
335
336 /**
337  * @brief The tdm output object
338  */
339 typedef void tdm_output;
340
341 /**
342  * @brief The tdm layer object
343  */
344 typedef void tdm_layer;
345
346 /**
347  * @brief The tdm capture object
348  */
349 typedef void tdm_capture;
350
351 /**
352  * @brief The tdm pp object
353  */
354 typedef void tdm_pp;
355
356 /**
357  * @brief The vblank handler
358  * @see output_set_vblank_handler() function of #tdm_func_display
359  */
360 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
361                                           unsigned int tv_sec, unsigned int tv_usec, void *user_data);
362
363 /**
364  * @brief The commit handler
365  * @see output_set_commit_handler() function of #tdm_func_display
366  */
367 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
368                                           unsigned int tv_sec, unsigned int tv_usec, void *user_data);
369
370
371 #ifdef __cplusplus
372 }
373 #endif
374
375 #endif /* _TDM_TYPES_H_ */