fix doxygen bug
[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  * - GRAPHIC layers have fixed zpos. But the zpos of VIDEO layer will be decided
164  * by a backend module side.
165  * - The frontend only can set the relative zpos to
166  * VIDEO layers via layer_set_video_pos() function of #tdm_func_display
167  */
168 typedef enum
169 {
170     TDM_LAYER_CAPABILITY_CURSOR         = (1<<0),   /**< cursor */
171     TDM_LAYER_CAPABILITY_PRIMARY        = (1<<1),   /**< primary */
172     TDM_LAYER_CAPABILITY_OVERLAY        = (1<<2),   /**< overlay */
173     TDM_LAYER_CAPABILITY_GRAPHIC        = (1<<4),   /**< graphic */
174     TDM_LAYER_CAPABILITY_VIDEO          = (1<<5),   /**< video */
175     TDM_LAYER_CAPABILITY_SCALE          = (1<<8),   /**< if a layer has scale capability  */
176     TDM_LAYER_CAPABILITY_TRANSFORM      = (1<<9),   /**< if a layer has transform capability  */
177 } tdm_layer_capability;
178
179 /**
180  * @brief The pp capability enumeration
181  */
182 typedef enum
183 {
184     TDM_PP_CAPABILITY_SYNC           = (1<<0),  /**< The pp device supports synchronous operation */
185     TDM_PP_CAPABILITY_ASYNC          = (1<<1),  /**< The pp device supports asynchronous operation */
186     TDM_PP_CAPABILITY_SCALE          = (1<<4),  /**< The pp device supports scale operation */
187     TDM_PP_CAPABILITY_TRANSFORM      = (1<<5),  /**< The pp device supports transform operation */
188 } tdm_pp_capability;
189
190 /**
191  * @brief The capture capability enumeration
192  */
193 typedef enum
194 {
195     TDM_CAPTURE_CAPABILITY_OUTPUT    = (1<<0),  /**< The capture device supports to dump a output */
196     TDM_CAPTURE_CAPABILITY_LAYER     = (1<<1),  /**< The capture device supports to dump a layer */
197     TDM_CAPTURE_CAPABILITY_SCALE     = (1<<4),  /**< The capture device supports scale operation */
198     TDM_CAPTURE_CAPABILITY_TRANSFORM = (1<<5),  /**< The capture device supports transform operation */
199 } tdm_capture_capability;
200
201 /**
202  * @brief The output mode type enumeration
203  * @details bit compatible with the libdrm definitions.
204  */
205 typedef enum
206 {
207     TDM_OUTPUT_MODE_TYPE_BUILTIN    = (1<<0),
208     TDM_OUTPUT_MODE_TYPE_CLOCK_C    = ((1<<1) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
209     TDM_OUTPUT_MODE_TYPE_CRTC_C     = ((1<<2) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
210     TDM_OUTPUT_MODE_TYPE_PREFERRED  = (1<<3),
211     TDM_OUTPUT_MODE_TYPE_DEFAULT    = (1<<4),
212     TDM_OUTPUT_MODE_TYPE_USERDEF    = (1<<5),
213     TDM_OUTPUT_MODE_TYPE_DRIVER     = (1<<6),
214 } tdm_output_mode_type;
215
216 /**
217  * @brief The output mode flag enumeration
218  * @details bit compatible with the libdrm definitions.
219  */
220 typedef enum
221 {
222     TDM_OUTPUT_MODE_FLAG_PHSYNC     = (1<<0),
223     TDM_OUTPUT_MODE_FLAG_NHSYNC     = (1<<1),
224     TDM_OUTPUT_MODE_FLAG_PVSYNC     = (1<<2),
225     TDM_OUTPUT_MODE_FLAG_NVSYNC     = (1<<3),
226     TDM_OUTPUT_MODE_FLAG_INTERLACE  = (1<<4),
227     TDM_OUTPUT_MODE_FLAG_DBLSCAN    = (1<<5),
228     TDM_OUTPUT_MODE_FLAG_CSYNC      = (1<<6),
229     TDM_OUTPUT_MODE_FLAG_PCSYNC     = (1<<7),
230     TDM_OUTPUT_MODE_FLAG_NCSYNC     = (1<<8),
231     TDM_OUTPUT_MODE_FLAG_HSKEW      = (1<<9), /* hskew provided */
232     TDM_OUTPUT_MODE_FLAG_BCAST      = (1<<10),
233     TDM_OUTPUT_MODE_FLAG_PIXMUX     = (1<<11),
234     TDM_OUTPUT_MODE_FLAG_DBLCLK     = (1<<12),
235     TDM_OUTPUT_MODE_FLAG_CLKDIV2    = (1<<13),
236 } tdm_output_mode_flag;
237
238 /**
239  * @brief The output mode structure
240  */
241 typedef struct _tdm_output_mode
242 {
243     unsigned int width;
244     unsigned int height;
245     unsigned int refresh;
246     unsigned int flags;
247     unsigned int type;
248     char name[TDM_NAME_LEN];
249 } tdm_output_mode;
250
251 /**
252  * @brief The property structure
253  */
254 typedef struct _tdm_prop
255 {
256     unsigned int id;
257     char name[TDM_NAME_LEN];
258 } tdm_prop;
259
260 /**
261  * @brief The size structure
262  */
263 typedef struct _tdm_size {
264     unsigned int h;     /**< width */
265     unsigned int v;     /**< height */
266 } tdm_size;
267
268 /**
269  * @brief The pos structure
270  */
271 typedef struct _tdm_pos
272 {
273     unsigned int x;
274     unsigned int y;
275     unsigned int w;
276     unsigned int h;
277 } tdm_pos;
278
279 /**
280  * @brief The value union
281  */
282 typedef union
283 {
284     void         *ptr;
285     int32_t  s32;
286     uint32_t u32;
287     int64_t  s64;
288     uint64_t u64;
289 } tdm_value;
290
291 /**
292  * @brief The info config structure
293  */
294 typedef struct _tdm_info_config
295 {
296     tdm_size size;
297     tdm_pos pos;
298     tbm_format format;
299 } tdm_info_config;
300
301 /**
302  * @brief The layer info structre
303  */
304 typedef struct _tdm_info_layer
305 {
306     tdm_info_config src_config;
307     tdm_pos dst_pos;
308     tdm_transform transform;
309 } tdm_info_layer;
310
311 /**
312  * @brief The pp info structre
313  */
314 typedef struct _tdm_info_pp
315 {
316     tdm_info_config src_config;
317     tdm_info_config dst_config;
318     tdm_transform transform;
319     int sync;
320     int flags;
321 } tdm_info_pp;
322
323 /**
324  * @brief The capture info structre
325  */
326 typedef struct _tdm_info_capture
327 {
328     tdm_info_config dst_config;
329     tdm_transform transform;
330     int oneshot;
331     int frequency;
332     int flags;
333 } tdm_info_capture;
334
335 /**
336  * @brief The tdm display object
337  */
338 typedef void tdm_display;
339
340 /**
341  * @brief The tdm output object
342  */
343 typedef void tdm_output;
344
345 /**
346  * @brief The tdm layer object
347  */
348 typedef void tdm_layer;
349
350 /**
351  * @brief The tdm capture object
352  */
353 typedef void tdm_capture;
354
355 /**
356  * @brief The tdm pp object
357  */
358 typedef void tdm_pp;
359
360 /**
361  * @brief The vblank handler
362  * @see output_set_vblank_handler() function of #tdm_func_display
363  */
364 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
365                                           unsigned int tv_sec, unsigned int tv_usec, void *user_data);
366
367 /**
368  * @brief The commit handler
369  * @see output_set_commit_handler() function of #tdm_func_display
370  */
371 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
372                                           unsigned int tv_sec, unsigned int tv_usec, void *user_data);
373
374
375 #ifdef __cplusplus
376 }
377 #endif
378
379 #endif /* _TDM_TYPES_H_ */