1 | /* |
2 | Copyright (c) 2012, Broadcom Europe Ltd |
3 | All rights reserved. |
4 | |
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the following conditions are met: |
7 | * Redistributions of source code must retain the above copyright |
8 | notice, this list of conditions and the following disclaimer. |
9 | * Redistributions in binary form must reproduce the above copyright |
10 | notice, this list of conditions and the following disclaimer in the |
11 | documentation and/or other materials provided with the distribution. |
12 | * Neither the name of the copyright holder nor the |
13 | names of its contributors may be used to endorse or promote products |
14 | derived from this software without specific prior written permission. |
15 | |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY |
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ |
27 | |
28 | /* |
29 | * TV service host API, |
30 | * See vc_hdmi.h for HDMI related constants |
31 | * See vc_sdtv.h for SDTV related constants |
32 | */ |
33 | |
34 | #ifndef _VC_TVSERVICE_H_ |
35 | #define _VC_TVSERVICE_H_ |
36 | |
37 | #include "vcinclude/common.h" |
38 | #include "interface/vcos/vcos.h" |
39 | #include "interface/vchi/vchi.h" |
40 | #include "interface/vmcs_host/vc_tvservice_defs.h" |
41 | #include "interface/vmcs_host/vc_hdmi.h" |
42 | #include "interface/vmcs_host/vc_sdtv.h" |
43 | |
44 | /** |
45 | * \file |
46 | * |
47 | * This API defines the controls for both HDMI and analogue TVs. It allows |
48 | * the user to dynamically switch between HDMI and SDTV without having |
49 | * to worry about switch one off before turning the other on. It also |
50 | * allows the user to query the supported HDMI resolutions and audio |
51 | * formats and turn on/off copy protection. |
52 | * |
53 | * There are three ways to turn on HDMI: preferred mode; best matched mode |
54 | * and explicit mode. See the three power on functions for details. |
55 | */ |
56 | |
57 | /** |
58 | * TVSERVICE_CALLBACK_T is the callback function for host side notification. |
59 | * Host applications register a single callback for all TV related notifications. |
60 | * See <DFN>VC_HDMI_NOTIFY_T</DFN> and <DFN>VC_SDTV_NOTIFY_T</DFN> in vc_hdmi.h and vc_sdtv.h |
61 | * respectively for list of reasons and respective param1 and param2 |
62 | * |
63 | * @param callback_data is the context passed in during the call to vc_tv_register_callback |
64 | * |
65 | * @param reason is the notification reason |
66 | * |
67 | * @param param1 is the first optional parameter |
68 | * |
69 | * @param param2 is the second optional parameter |
70 | * |
71 | * @return void |
72 | */ |
73 | typedef void (*TVSERVICE_CALLBACK_T)(void *callback_data, uint32_t reason, uint32_t param1, uint32_t param2); |
74 | |
75 | /* API at application start time */ |
76 | /** |
77 | * <DFN>vc_vchi_tv_init</DFN> is called at the beginning of the application |
78 | * to initialise the client to TV service |
79 | * |
80 | * @param initialise_instance is the VCHI instance |
81 | * |
82 | * @param array of pointers of connections |
83 | * |
84 | * @param number of connections (currently this is always <DFN>1</DFN> |
85 | * |
86 | * @return Zero is successful A negative return value indicates failure (which may mean it has not been started on VideoCore). |
87 | */ |
88 | VCHPRE_ int vc_vchi_tv_init(VCHI_INSTANCE_T initialise_instance, VCHI_CONNECTION_T **connections, uint32_t num_connections ); |
89 | |
90 | /** |
91 | * <DFN>vc_vchi_tv_stop</DFN> is called to stop the host side of TV service. |
92 | * |
93 | * @param none |
94 | * |
95 | * @return void |
96 | */ |
97 | VCHPRE_ void vc_vchi_tv_stop( void ); |
98 | |
99 | /** |
100 | * Host applications should call <DFN>vc_tv_register_callback</DFN> at |
101 | * the beginning to register a callback function to handle all notifications. |
102 | * See <DFN>TVSERVICE_CALLBACK_T </DFN> |
103 | * |
104 | * @param callback function |
105 | * |
106 | * @param callback_data is the context to be passed when function is called |
107 | * |
108 | * @return void |
109 | */ |
110 | VCHPRE_ void vc_tv_register_callback(TVSERVICE_CALLBACK_T callback, void *callback_data); |
111 | |
112 | /** |
113 | * <DFN>vc_tv_unregister_callback</DFN> removes a function registered with |
114 | * <DFN>vc_tv_register_callback</DFN> from the list of callbacks. |
115 | * |
116 | * @param callback function |
117 | * |
118 | * @return void |
119 | */ |
120 | VCHPRE_ void vc_tv_unregister_callback(TVSERVICE_CALLBACK_T callback); |
121 | |
122 | /** |
123 | * <DFN>vc_tv_unregister_callback</DFN> removes a function registered with |
124 | * <DFN>vc_tv_register_callback</DFN> from the list of callbacks. |
125 | * In contrast to vc_tv_unregister_callback this one matches not only the |
126 | * function pointer but also the data pointer before removal. |
127 | * |
128 | * @param callback function |
129 | * |
130 | * @return void |
131 | */ |
132 | VCHPRE_ void vc_tv_unregister_callback_full(TVSERVICE_CALLBACK_T callback, void *callback_data); |
133 | |
134 | /** |
135 | * In the following API any functions applying to HDMI only will have hdmi_ |
136 | * in the name, ditto for SDTV only will have sdtv_ in the name, |
137 | * Otherwise the function applies to both SDTV and HDMI (e.g. power off) |
138 | */ |
139 | |
140 | /** |
141 | * <DFN>vc_tv_get_state</DFN> is used to obtain the current TV state. |
142 | * Host applications should call this function right after registering |
143 | * a callback in case any notifications are missed. |
144 | * |
145 | * Now deprecated - use vc_tv_get_display_state instead |
146 | * |
147 | * @param pointer to TV_GET_STATE_RESP_T |
148 | * |
149 | * @return zero if the command is sent successfully, non zero otherwise |
150 | * If the command fails to be sent, passed in state is unchanged |
151 | * |
152 | */ |
153 | VCHPRE_ int VCHPOST_ vc_tv_get_state(TV_GET_STATE_RESP_T *tvstate); |
154 | VCHPRE_ int VCHPOST_ vc_tv_get_state_id(uint32_t display_id, TV_GET_STATE_RESP_T *tvstate); |
155 | |
156 | /** |
157 | * <DFN>vc_tv_get_display_state</DFN> is used to obtain the current TV display |
158 | * state. This function supersedes vc_tv_get_state (which is only kept for |
159 | * backward compatibility. |
160 | * Host applications should call this function right after registering |
161 | * a callback in case any notifications are missed. |
162 | * |
163 | * @param pointer to TV_DISPLAY_STATE_T |
164 | * |
165 | * @return zero if the command is sent successfully, non zero otherwise |
166 | * If the command fails to be sent, passed in state is unchanged |
167 | * |
168 | */ |
169 | VCHPRE_ int VCHPOST_ vc_tv_get_display_state(TV_DISPLAY_STATE_T *tvstate); |
170 | VCHPRE_ int VCHPOST_ vc_tv_get_display_state_id(uint32_t display_id, TV_DISPLAY_STATE_T *tvstate); |
171 | |
172 | /** |
173 | * Use <DFN>vc_tv_hdmi_power_on_preferred</DFN> if you don't care what resolutions |
174 | * a TV supports and just want to turn on its native resolution. Analogue TV will |
175 | * be powered down if on (same for the following two HDMI power on functions.) |
176 | * If power on is successful, a host application must wait for the power on complete |
177 | * callback before attempting to open the display. |
178 | * |
179 | * @param none |
180 | * |
181 | * @return single value interpreted as HDMI_RESULT_T (zero means success) |
182 | * if successful, there will be a callback when the power on is complete |
183 | * |
184 | **/ |
185 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_preferred( void ); |
186 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_preferred_id(uint32_t display_id); |
187 | |
188 | /** |
189 | * Same as above, but tell the TV to enter 3D mode. The TV will go to 2D mode |
190 | * if the preferred mode doesn't support 3D. |
191 | **/ |
192 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_preferred_3d( void ); |
193 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_preferred_3d_id(uint32_t display_id); |
194 | |
195 | /** |
196 | * Use <DFN>vc_tv_hdmi_power_on_best</DFN> to power on HDMI at best matched resolution |
197 | * based on passed in parameters. Use HDMI_MODE_MATCH_FRAMERATE if you want to |
198 | * match the frame rate; use HDMI_MODE_MATCH_RESOLUTION if you want to match on |
199 | * screen size; add HDMI_MODE_MATCH_SCANMODE if you want to force |
200 | * interlaced/progressive mode. If no matching mode is found, the native resolution |
201 | * will be used instead. |
202 | * |
203 | * @param width is the desired minimum screen width |
204 | * |
205 | * @param height is the desired minimum screen height |
206 | * |
207 | * @param rate is the desired frame rate |
208 | * |
209 | * @param scan_mode (HDMI_NONINTERLACED / HDMI_INTERLACED) is the desired scan mode |
210 | * |
211 | * @param match flags is the matching flag <DFN>EDID_MODE_MATCH_FLAG_T</DFN> |
212 | * |
213 | * @return same as <DFN>vc_tv_hdmi_power_on_preferred</DFN> |
214 | */ |
215 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_best(uint32_t width, uint32_t height, uint32_t frame_rate, |
216 | HDMI_INTERLACED_T scan_mode, EDID_MODE_MATCH_FLAG_T match_flags); |
217 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_best_id(uint32_t display_id, uint32_t width, uint32_t height, uint32_t frame_rate, |
218 | HDMI_INTERLACED_T scan_mode, EDID_MODE_MATCH_FLAG_T match_flags); |
219 | |
220 | /** |
221 | * Same as above, but tell the TV to enter 3D mode. The TV will go to 2D mode |
222 | * if no suitable 3D mode can be found. |
223 | **/ |
224 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_best_3d(uint32_t width, uint32_t height, uint32_t frame_rate, |
225 | HDMI_INTERLACED_T scan_mode, EDID_MODE_MATCH_FLAG_T match_flags); |
226 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_best_3d_id(uint32_t display_id, uint32_t width, uint32_t height, uint32_t frame_rate, |
227 | HDMI_INTERLACED_T scan_mode, EDID_MODE_MATCH_FLAG_T match_flags); |
228 | |
229 | /** |
230 | * Use <DFN>vc_tv_hdmi_power_on_explicit</DFN> if you want full control over what mode |
231 | * the TV is driven. This function is used, for example, when the host has the EDID |
232 | * and HDMI middleware does not know. If HDMI middleware has knowledge of EDID, the |
233 | * passed in mode is still subject to TV's supported modes |
234 | * |
235 | * @param mode (HDMI_MODE_HDMI/HDMI_MODE_DVI/HDMI_MODE_3D) |
236 | * |
237 | * @param group (HDMI_RES_GROUP_CEA/HDMI_RES_GROUP_DMT) |
238 | * |
239 | * @param code either <DFN>HDMI_CEA_RES_CODE_T</DFN> or <DFN>HDMI_DMT_RES_CODE_T</DFN> |
240 | * |
241 | * @return same as <DFN>vc_tv_hdmi_power_on_preferred</DFN> |
242 | */ |
243 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_explicit_new(HDMI_MODE_T mode, HDMI_RES_GROUP_T group, uint32_t code); |
244 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_explicit_new_id(uint32_t display_id, HDMI_MODE_T mode, HDMI_RES_GROUP_T group, uint32_t code); |
245 | |
246 | /** |
247 | * <DFN>vc_tv_sdtv_power_on</DFN> is used to turn on analogue TV. HDMI will |
248 | * automatically be powered off if on. |
249 | * |
250 | * @param SDTV mode <DFN>SDTV_MODE_T</DFN> |
251 | * |
252 | * @param options <DFN>SDTV_OPTIONS_T</DFN> |
253 | * |
254 | * @return single value (zero means success) if successful, there will be a callback when the power on is complete |
255 | * |
256 | */ |
257 | VCHPRE_ int VCHPOST_ vc_tv_sdtv_power_on(SDTV_MODE_T mode, SDTV_OPTIONS_T *options); |
258 | VCHPRE_ int VCHPOST_ vc_tv_sdtv_power_on_id(uint32_t display_id, SDTV_MODE_T mode, SDTV_OPTIONS_T *options); |
259 | |
260 | /** |
261 | * <DFN>vc_tv_power_off</DFN> is used to turn off either analogue or HDMI output. |
262 | * If HDMI is powered down, there will be a callback with reason UNPLUGGED (if no |
263 | * cable is attached) or STANDBY (if a cable is attached) |
264 | * |
265 | * @param none |
266 | * |
267 | * @return whether command is succcessfully sent |
268 | * |
269 | */ |
270 | VCHPRE_ int VCHPOST_ vc_tv_power_off( void ); |
271 | VCHPRE_ int VCHPOST_ vc_tv_power_off_id(uint32_t display_id); |
272 | |
273 | /** |
274 | * <DFN>vc_tv_hdmi_get_supported_modes</DFN> is used to get a list of supported |
275 | * modes for a particular standard (CEA/DMT/CEA3D). Prefer resolution (group and mode) |
276 | * is also returned, if needed. If there are more modes supported than the size of the array |
277 | * supply, only the array will be filled. |
278 | * |
279 | * @param group(HDMI_RES_GROUP_CEA/HDMI_RES_GROUP_DMT) |
280 | * |
281 | * @param array of <DFN>TV_SUPPORT_MODE_T</DFN> struct |
282 | * |
283 | * @param length of array above (in elements, not bytes) |
284 | * |
285 | * @pointer to preferred group (can be NULL) |
286 | * |
287 | * @pointer to prefer mode code (can be NULL) |
288 | * |
289 | * @return the number of modes actually written in the array, |
290 | * zero means no modes (no EDID or cable unplugged) |
291 | * |
292 | */ |
293 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_supported_modes_new(HDMI_RES_GROUP_T group, |
294 | TV_SUPPORTED_MODE_NEW_T *supported_modes, |
295 | uint32_t max_supported_modes, |
296 | HDMI_RES_GROUP_T *preferred_group, |
297 | uint32_t *preferred_mode); |
298 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_supported_modes_new_id(uint32_t display_id, |
299 | HDMI_RES_GROUP_T group, |
300 | TV_SUPPORTED_MODE_NEW_T *supported_modes, |
301 | uint32_t max_supported_modes, |
302 | HDMI_RES_GROUP_T *preferred_group, |
303 | uint32_t *preferred_mode); |
304 | /** |
305 | * <DFN>vc_tv_hdmi_mode_supported</DFN> is used to query whether a particular mode |
306 | * is supported or not. |
307 | * |
308 | * @param resolution standard (HDMI_RES_GROUP_CEA/HDMI_RES_GROUP_DMT) |
309 | * |
310 | * @param mode code |
311 | * |
312 | * @return > 0 means supported, 0 means unsupported, < 0 means error |
313 | * |
314 | */ |
315 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_mode_supported(HDMI_RES_GROUP_T group, |
316 | uint32_t mode); |
317 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_mode_supported_id(uint32_t display_d, HDMI_RES_GROUP_T group, |
318 | uint32_t mode); |
319 | |
320 | /** |
321 | * <DFN>vc_tv_hdmi_audio_supported</DFN> is used to query whether a |
322 | * particular audio format is supported. By default a device has to support |
323 | * 16-bit stereo PCM at 32/44.1/48 kHz if audio is supported at all. |
324 | * Support of other audio formats allow SPDIF to be used. |
325 | * A return value of zero means the audio format is completely supported. |
326 | * Any non-zero values are interpreted as bit mask (EDID_AUDIO_SUPPORT_FLAG_T). |
327 | * For example, if EDID_AUDIO_NO_SUPPORT is set, the audio format is not supported. |
328 | * If EDID_AUDIO_CHAN_UNSUPPORTED is set, the max no. of channels has exceeded. |
329 | * |
330 | * @param audio format supplied as (<DFN>EDID_AudioFormat</DFN> + <DFN>EDID_AudioCodingExtension</DFN>) |
331 | * |
332 | * @param no. of channels (1-8) |
333 | * |
334 | * @param sample rate <DFN>EDID_AudioSampleRate</DFN> but NOT "refer to header" |
335 | * |
336 | * @param bit rate (or sample size if pcm) use <DFN>EDID_AudioSampleSize</DFN> as sample size argument |
337 | * |
338 | * @return: single value return interpreted as flags in <DFN>EDID_AUDIO_SUPPORT_FLAG_T</DFN> |
339 | * |
340 | */ |
341 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_audio_supported(uint32_t audio_format, uint32_t num_channels, |
342 | EDID_AudioSampleRate fs, uint32_t bitrate); |
343 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_audio_supported_id(uint32_t display_id, uint32_t audio_format, uint32_t num_channels, |
344 | EDID_AudioSampleRate fs, uint32_t bitrate); |
345 | |
346 | /** |
347 | * Use <DFN>vc_tv_enable_copyprotect</DFN> to turn on copy protection. |
348 | * For HDMI, only HDMI_CP_HDCP is recognised. |
349 | * For SDTV, use one of the values in SDTV_CP_MODE_T |
350 | * |
351 | * @param copy protect mode |
352 | * |
353 | * @param time out in milliseconds (only applicable to HDMI) |
354 | * |
355 | * @return 0 means success, additional result via callback |
356 | * |
357 | */ |
358 | VCHPRE_ int VCHPOST_ vc_tv_enable_copyprotect(uint32_t cp_mode, uint32_t timeout); |
359 | VCHPRE_ int VCHPOST_ vc_tv_enable_copyprotect_id(uint32_t display_id, uint32_t cp_mode, uint32_t timeout); |
360 | |
361 | /** |
362 | * Use <DFN>vc_tv_disable_copyprotect</DFN> to turn off copy protection |
363 | * |
364 | * @param none |
365 | * |
366 | * @rturn 0 means success, additional result via callback |
367 | * |
368 | */ |
369 | VCHPRE_ int VCHPOST_ vc_tv_disable_copyprotect( void ); |
370 | VCHPRE_ int VCHPOST_ vc_tv_disable_copyprotect_id(uint32_t display_id); |
371 | |
372 | /** |
373 | * Use <DFN>vc_tv_show_info</DFN> to show or hide info screen. |
374 | * Only usable in HDMI at the moment. |
375 | * |
376 | * @param show (1) or hide (0) info screen |
377 | * |
378 | * @return zero if command is successfully sent |
379 | * |
380 | */ |
381 | VCHPRE_ int VCHPOST_ vc_tv_show_info(uint32_t show); |
382 | VCHPRE_ int VCHPOST_ vc_tv_show_info_id(uint32_t display_id, uint32_t show); |
383 | |
384 | /** |
385 | * <DFN>vc_tv_hdmi_get_av_latency</DFN> is used to get the AV latency |
386 | * (in ms) for HDMI (lipsync), only valid if HDMI is currently powered on, |
387 | * otherwise you get zero. The latency is defined as the relative delay |
388 | * of the video stream to the audio stream |
389 | * |
390 | * @param none |
391 | * |
392 | * @return latency (zero if error or latency is not defined), |
393 | * < 0 if failed to send command) |
394 | * |
395 | */ |
396 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_av_latency( void ); |
397 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_av_latency_id(uint32_t display_id); |
398 | |
399 | /** |
400 | * Use <DFN>vc_tv_hdmi_set_hdcp_key</DFN> to download HDCP key to HDCP middleware |
401 | * |
402 | * @param AES encrypted key block (328 bytes) |
403 | * |
404 | * @return single value return indicating queued status |
405 | * Callback indicates the validity of key |
406 | */ |
407 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_hdcp_key(const uint8_t *key); |
408 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_hdcp_key_id(uint32_t display_id, const uint8_t *key); |
409 | |
410 | /** |
411 | * Use <DFN>vc_tv_hdmi_set_hdcp_revoked_list</DFN> to download SRM |
412 | * revoked list |
413 | * |
414 | * @param list |
415 | * |
416 | * @param size of list (no. of keys) |
417 | * |
418 | * @return single value return indicating queued status |
419 | * Callback indicates the number of keys set (zero if failed, unless you are clearing the list) |
420 | * |
421 | */ |
422 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_hdcp_revoked_list(const uint8_t *list, uint32_t num_keys); |
423 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_hdcp_revoked_list_id(uint32_t display_id, const uint8_t *list, uint32_t num_keys); |
424 | |
425 | /** |
426 | * <DFN>vc_tv_hdmi_set_spd</DFN> is used to set the SPD infoframe. |
427 | * |
428 | * @param manufacturer (max. 8 characters) |
429 | * |
430 | * @param description (max. 16 characters) |
431 | * |
432 | * @param product type <DFN>HDMI_SPD_TYPE_CODE_T</DFN> |
433 | * |
434 | * @return whether command was sent successfully (zero means success) |
435 | * |
436 | */ |
437 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_spd(const char *manufacturer, const char *description, HDMI_SPD_TYPE_CODE_T type); |
438 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_spd_id(uint32_t display_id, const char *manufacturer, const char *description, HDMI_SPD_TYPE_CODE_T type); |
439 | |
440 | /** |
441 | * <DFN>vc_tv_hdmi_set_display_options</DFN> is used to set the |
442 | * active area for HDMI (bar width/height should be set to zero if absent) |
443 | * This information is conveyed in AVI infoframe. |
444 | * |
445 | * @param aspect ratio <DFN>HDMI_ASPECT_T</DFN> |
446 | * |
447 | * @param left bar width |
448 | * |
449 | * @param right bar width |
450 | * |
451 | * @param top bar height |
452 | * |
453 | * @param bottom bar height |
454 | * |
455 | * @return whether command was sent successfully (zero means success) |
456 | * |
457 | */ |
458 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_display_options(HDMI_ASPECT_T aspect, uint32_t left_bar_width, uint32_t right_bar_width, uint32_t top_bar_height, uint32_t bottom_bar_height, uint32_t overscan_flags); |
459 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_display_options_id(uint32_t display_id, HDMI_ASPECT_T aspect, uint32_t left_bar_width, uint32_t right_bar_width, uint32_t top_bar_height, uint32_t bottom_bar_height, uint32_t overscan_flags); |
460 | |
461 | /** |
462 | * Use <DFN>vc_tv_test_mode_start</DFN> to generate test signal. |
463 | * At the moment only DVI test signal is supported. |
464 | * HDMI must be powered off before this function is called. |
465 | * |
466 | * @param 24-bit background colour (if applicable) |
467 | * |
468 | * @param test mode <DFN>TV_TEST_MODE_T</DFN> |
469 | * |
470 | * @return whether command was sent successfully (zero means success) |
471 | * |
472 | */ |
473 | VCHPRE_ int VCHPOST_ vc_tv_test_mode_start(uint32_t colour, TV_TEST_MODE_T test_mode); |
474 | VCHPRE_ int VCHPOST_ vc_tv_test_mode_start_id(uint32_t display_id, uint32_t colour, TV_TEST_MODE_T test_mode); |
475 | |
476 | /** |
477 | * Use <DFN>vc_tv_test_mode_stop</DFN> to stop the test signal and power down |
478 | * HDMI. |
479 | * |
480 | * @param none |
481 | * |
482 | * @return whether command was sent successfully (zero means success) |
483 | * |
484 | */ |
485 | VCHPRE_ int VCHPOST_ vc_tv_test_mode_stop( void ); |
486 | VCHPRE_ int VCHPOST_ vc_tv_test_mode_stop_id(uint32_t display_id); |
487 | |
488 | /** |
489 | * <DFN>vc_tv_hdmi_ddc_read</DFN> allows an host application to read EDID |
490 | * with DDC protocol. |
491 | * |
492 | * @param offset |
493 | * |
494 | * @param length to read (this is typically 128 bytes to coincide with EDID block size) |
495 | * |
496 | * @param pointer to buffer, must be 16 byte aligned |
497 | * |
498 | * @returns length of data read (so zero means error) and the buffer will be filled |
499 | * only if there is no error |
500 | * |
501 | */ |
502 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_ddc_read(uint32_t offset, uint32_t length, uint8_t *buffer); |
503 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_ddc_read_id(uint32_t display_id, uint32_t offset, uint32_t length, uint8_t *buffer); |
504 | |
505 | /** |
506 | * Sets the TV state to attached. |
507 | * Required when hotplug interrupt is not handled by VideoCore. |
508 | * |
509 | * @param attached non-zero if the TV is attached or zero for unplugged. |
510 | */ |
511 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_attached(uint32_t attached); |
512 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_attached_id(uint32_t display_id, uint32_t attached); |
513 | |
514 | /** |
515 | * Sets one of the HDMI properties. HDMI properties persist |
516 | * between HDMI power on/off |
517 | * |
518 | * @param property [in] |
519 | * |
520 | * @return zero if successful, non-zero otherwise |
521 | */ |
522 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_property(const HDMI_PROPERTY_PARAM_T *property); |
523 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_set_property_id(uint32_t display_id, const HDMI_PROPERTY_PARAM_T *property); |
524 | |
525 | /** |
526 | * Gets the current value of an HDMI property. |
527 | * |
528 | * @param property [in/out] |
529 | * |
530 | * @return zero if success (param1/param2 will be set), non-zero otherwise (param1/param2 will not be set) |
531 | */ |
532 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_property(HDMI_PROPERTY_PARAM_T *property); |
533 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_property_id(uint32_t display_id, HDMI_PROPERTY_PARAM_T *property); |
534 | |
535 | /** |
536 | * Converts the notification reason to a string. |
537 | * |
538 | * @param reason is the notification reason |
539 | * @return The notification reason as a string. |
540 | */ |
541 | VCHPRE_ const char* vc_tv_notification_name(VC_HDMI_NOTIFY_T reason); |
542 | VCHPRE_ const char* vc_tv_notification_name_id(uint32_t display_id, VC_HDMI_NOTIFY_T reason); |
543 | |
544 | /** |
545 | * Get the unique device ID from the EDID |
546 | * @param pointer to device ID struct |
547 | * @return zero if successful, non-zero if failed. |
548 | */ |
549 | VCHPRE_ int VCHPOST_ vc_tv_get_device_id(TV_DEVICE_ID_T *id); |
550 | VCHPRE_ int VCHPOST_ vc_tv_get_device_id_id(uint32_t display_id, TV_DEVICE_ID_T *id); |
551 | |
552 | /** |
553 | * Get list of attached devices |
554 | * @param pointer to attached devices struc |
555 | * @return zero if successful, non-zero if failed. |
556 | */ |
557 | VCHPRE_ int VCHPOST_ vc_tv_get_attached_devices(TV_ATTACHED_DEVICES_T *devices); |
558 | |
559 | // temporary: maintain backwards compatibility |
560 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_T group, |
561 | TV_SUPPORTED_MODE_T *supported_modes, |
562 | uint32_t max_supported_modes, |
563 | HDMI_RES_GROUP_T *preferred_group, |
564 | uint32_t *preferred_mode); |
565 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_get_supported_modes_id(uint32_t display_id, |
566 | HDMI_RES_GROUP_T group, |
567 | TV_SUPPORTED_MODE_T *supported_modes, |
568 | uint32_t max_supported_modes, |
569 | HDMI_RES_GROUP_T *preferred_group, |
570 | uint32_t *preferred_mode); |
571 | |
572 | // temporary: maintain backwards compatibility |
573 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_explicit(HDMI_MODE_T mode, HDMI_RES_GROUP_T group, uint32_t code); |
574 | VCHPRE_ int VCHPOST_ vc_tv_hdmi_power_on_explicit_id(uint32_t display_id, HDMI_MODE_T mode, HDMI_RES_GROUP_T group, uint32_t code); |
575 | |
576 | #endif |
577 | |