/* * Copyright (c) 2021 Huawei Device Co., Ltd. * * HDF is dual licensed: you can use it either under the terms of * the GPL, or the BSD license, at your option. * See the LICENSE file in the root of this repository for complete details. */ /** * @addtogroup HDMI * @{ * * @brief Declares standard APIs of basic High-Definition Multimedia Interface (HDMI) capabilities. * * You can use this module to access the HDMI and enable the driver to operate an HDMI sink device. * These capabilities include start and stop tramnsfer on HDMI, setting some attributes, * and read sink device's EDID data. * * @since 1.0 */ /** * @file hdmi_if.h * * @brief Declares the standard HDMI interface functions. * * @since 1.0 */ #ifndef HDMI_IF_H #define HDMI_IF_H #include "platform_if.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* __cplusplus */ /** * @brief Indicates that maximum length of an HDMI sink device's EDID is 512 bytes. * * @since 1.0 */ #define HDMI_EDID_MAX_LEN 512 /** * @brief Enumerates deep color, * see the section 6.2.4 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiDeepColor { HDMI_DEEP_COLOR_24BITS = 0, HDMI_DEEP_COLOR_30BITS = 1, HDMI_DEEP_COLOR_36BITS = 2, HDMI_DEEP_COLOR_48BITS = 3, HDMI_DEEP_COLOR_OFF = 0xff, HDMI_DEEP_COLOR_BUTT, }; /** * @brief Enumerates video bit depth * see the section 6.6 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiVideoBitDepth { HDMI_VIDEO_BIT_DEPTH_8 = 0, HDMI_VIDEO_BIT_DEPTH_10 = 1, HDMI_VIDEO_BIT_DEPTH_12 = 2, HDMI_VIDEO_BIT_DEPTH_16 = 3, HDMI_VIDEO_BIT_DEPTH_OFF, }; /** * @brief Enumerates color space, * see the section 6 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiColorSpace { HDMI_COLOR_SPACE_RGB = 0, HDMI_COLOR_SPACE_YCBCR422 = 1, HDMI_COLOR_SPACE_YCBCR444 = 2, HDMI_COLOR_SPACE_YCBCR420 = 3, HDMI_COLOR_SPACE_BUTT, }; /** * @brief Enumerates colorimetry, see the section 6.7 of HDMI Specification 1.4 and * the section 7.2 of HDMI Specification 2.0 for details. * * @since 1.0 */ enum HdmiColorimetry { HDMI_COLORIMETRY_NO_DATA = 0, HDMI_COLORIMETRY_ITU601 = 1, HDMI_COLORIMETRY_ITU709 = 2, HDMI_COLORIMETRY_EXTENDED = 3, }; /** * @brief Enumerates extended colorimetry, see the section 6.7 of HDMI Specification 1.4 and * the section 7.2 of HDMI Specification 2.0 for details. * * @since 1.0 */ enum HdmiExtendedColorimetry { HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0, HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1, HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2, HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3, HDMI_EXTENDED_COLORIMETRY_OPRGB = 4, HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5, HDMI_EXTENDED_COLORIMETRY_BT2020 = 6, HDMI_EXTENDED_COLORIMETRY_ADDITIONAL = 7, HDMI_EXTENDED_COLORIMETRY_BUTT, }; /** * @brief Enumerates quantization range, see the section 6.6 of HDMI Specification 1.4 and * the section 7.3 of HDMI Specification 2.0 for details. * * @since 1.0 */ enum HdmiQuantizationRange { HDMI_QUANTIZATION_RANGE_DEFAULT = 0, HDMI_QUANTIZATION_RANGE_LIMITED = 1, HDMI_QUANTIZATION_RANGE_FULL = 2, HDMI_QUANTIZATION_RANGE_BUTT, }; /** * @brief Enumerates YCC quantization range, see the section 6.6 of HDMI Specification 1.4 and * the section 7.3 of HDMI Specification 2.0 for details. * * @since 1.0 */ enum HdmiYccQuantizationRange { HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0, HDMI_YCC_QUANTIZATION_RANGE_FULL = 1, HDMI_YCC_QUANTIZATION_RANGE_BUTT, }; /** * @brief Enumerates video 3d structure, * see the section 8.2.3 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiVideo3dStructure { HDMI_VS_VIDEO_3D_FRAME_PACKING = 0, HDMI_VS_VIDEO_3D_FIELD_ALTERNATIVE = 1, HDMI_VS_VIDEO_3D_LINE_ALTERNATIVE = 2, HDMI_VS_VIDEO_3D_SIDE_BY_SIDE_FULL = 3, HDMI_VS_VIDEO_3D_L_DEPTH = 4, HDMI_VS_VIDEO_3D_L_DEPTH_GFX_GFX_DEPTH = 5, HDMI_VS_VIDEO_3D_TOP_AND_BOTTOM = 6, HDMI_VS_VIDEO_3D_SIDE_BY_SIDE_HALF = 8, HDMI_VS_VIDEO_3D_BUTT, }; /** * @brief Enumerates video timing, * see the section 8.2.3 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiVideoTiming { HDMI_VIDEO_TIMING_NONE = 0, HDMI_VIDEO_TIMING_640X480P60 = 1, HDMI_VIDEO_TIMING_720X480P60 = 2, HDMI_VIDEO_TIMING_720X480P120 = 3, HDMI_VIDEO_TIMING_720X480P240 = 4, HDMI_VIDEO_TIMING_720X576P50 = 5, HDMI_VIDEO_TIMING_720X576P100 = 6, HDMI_VIDEO_TIMING_720X576P200 = 7, HDMI_VIDEO_TIMING_1280X720P24 = 8, HDMI_VIDEO_TIMING_1280X720P25 = 9, HDMI_VIDEO_TIMING_1280X720P30 = 10, HDMI_VIDEO_TIMING_1280X720P48 = 11, HDMI_VIDEO_TIMING_1280X720P50 = 12, HDMI_VIDEO_TIMING_1280X720P60 = 13, HDMI_VIDEO_TIMING_1280X720P100 = 14, HDMI_VIDEO_TIMING_1280X720P120 = 15, HDMI_VIDEO_TIMING_1440X240P60 = 16, HDMI_VIDEO_TIMING_1440X288P50 = 17, HDMI_VIDEO_TIMING_1440X480I60 = 18, HDMI_VIDEO_TIMING_1440X480P60 = 19, HDMI_VIDEO_TIMING_1440X480I120 = 20, HDMI_VIDEO_TIMING_1440X480I240 = 21, HDMI_VIDEO_TIMING_1440X576I50 = 22, HDMI_VIDEO_TIMING_1440X576P50 = 23, HDMI_VIDEO_TIMING_1440X576I60 = 24, HDMI_VIDEO_TIMING_1440X576I100 = 25, HDMI_VIDEO_TIMING_1440X576I200 = 26, HDMI_VIDEO_TIMING_2880X288P50 = 27, HDMI_VIDEO_TIMING_2880X480I60 = 28, HDMI_VIDEO_TIMING_2880X480P60 = 29, HDMI_VIDEO_TIMING_2880X240I60 = 30, HDMI_VIDEO_TIMING_2880X576I50 = 31, HDMI_VIDEO_TIMING_2880X576P50 = 32, HDMI_VIDEO_TIMING_1680X720P24 = 33, HDMI_VIDEO_TIMING_1680X720P25 = 34, HDMI_VIDEO_TIMING_1680X720P30 = 35, HDMI_VIDEO_TIMING_1680X720P48 = 36, HDMI_VIDEO_TIMING_1680X720P50 = 37, HDMI_VIDEO_TIMING_1680X720P60 = 38, HDMI_VIDEO_TIMING_1680X720P100 = 39, HDMI_VIDEO_TIMING_1680X720P120 = 40, HDMI_VIDEO_TIMING_2560X1080P24 = 41, HDMI_VIDEO_TIMING_2560X1080P25 = 42, HDMI_VIDEO_TIMING_2560X1080P30 = 43, HDMI_VIDEO_TIMING_2560X1080P48 = 44, HDMI_VIDEO_TIMING_2560X1080P50 = 45, HDMI_VIDEO_TIMING_2560X1080P60 = 46, HDMI_VIDEO_TIMING_2560X1080P100 = 47, HDMI_VIDEO_TIMING_2560X1080P120 = 48, HDMI_VIDEO_TIMING_1920X1080I60 = 49, HDMI_VIDEO_TIMING_1920X1080P60 = 50, HDMI_VIDEO_TIMING_1920X1080I50 = 51, HDMI_VIDEO_TIMING_1920X1080P50 = 52, HDMI_VIDEO_TIMING_1920X1080P24 = 53, HDMI_VIDEO_TIMING_1920X1080P25 = 54, HDMI_VIDEO_TIMING_1920X1080P30 = 55, HDMI_VIDEO_TIMING_1920X1080P48 = 56, HDMI_VIDEO_TIMING_1920X1080I100 = 57, HDMI_VIDEO_TIMING_1920X1080I120 = 58, HDMI_VIDEO_TIMING_1920X1080P120 = 59, HDMI_VIDEO_TIMING_1920X1080P100 = 60, HDMI_VIDEO_TIMING_3840X2160P24 = 61, HDMI_VIDEO_TIMING_3840X2160P25 = 62, HDMI_VIDEO_TIMING_3840X2160P30 = 63, HDMI_VIDEO_TIMING_3840X2160P48 = 64, HDMI_VIDEO_TIMING_3840X2160P50 = 65, HDMI_VIDEO_TIMING_3840X2160P60 = 66, HDMI_VIDEO_TIMING_3840X2160P100 = 67, HDMI_VIDEO_TIMING_3840X2160P120 = 68, HDMI_VIDEO_TIMING_4096X2160P24 = 69, HDMI_VIDEO_TIMING_4096X2160P25 = 70, HDMI_VIDEO_TIMING_4096X2160P30 = 71, HDMI_VIDEO_TIMING_4096X2160P48 = 72, HDMI_VIDEO_TIMING_4096X2160P50 = 73, HDMI_VIDEO_TIMING_4096X2160P60 = 74, HDMI_VIDEO_TIMING_4096X2160P100 = 75, HDMI_VIDEO_TIMING_4096X2160P120 = 76, HDMI_VIDEO_TIMING_5120X2160P24 = 77, HDMI_VIDEO_TIMING_5120X2160P25 = 78, HDMI_VIDEO_TIMING_5120X2160P30 = 79, HDMI_VIDEO_TIMING_5120X2160P48 = 80, HDMI_VIDEO_TIMING_5120X2160P50 = 81, HDMI_VIDEO_TIMING_5120X2160P60 = 82, HDMI_VIDEO_TIMING_5120X2160P100 = 83, HDMI_VIDEO_TIMING_5120X2160P120 = 84, HDMI_VIDEO_TIMING_7680X4320P24 = 85, HDMI_VIDEO_TIMING_7680X4320P25 = 86, HDMI_VIDEO_TIMING_7680X4320P30 = 87, HDMI_VIDEO_TIMING_7680X4320P48 = 88, HDMI_VIDEO_TIMING_7680X4320P50 = 89, HDMI_VIDEO_TIMING_7680X4320P60 = 90, HDMI_VIDEO_TIMING_7680X4320P100 = 91, HDMI_VIDEO_TIMING_7680X4320P120 = 92, HDMI_VIDEO_TIMING_10240X4320P24 = 93, HDMI_VIDEO_TIMING_10240X4320P25 = 94, HDMI_VIDEO_TIMING_10240X4320P30 = 95, HDMI_VIDEO_TIMING_10240X4320P48 = 96, HDMI_VIDEO_TIMING_10240X4320P50 = 97, HDMI_VIDEO_TIMING_10240X4320P60 = 98, HDMI_VIDEO_TIMING_10240X4320P100 = 99, HDMI_VIDEO_TIMING_10240X4320P120 = 100, HDMI_VIDEO_TIMING_VESA_DEFINE = 101, HDMI_VIDEO_TIMING_VESA_800X600_60 = 102, HDMI_VIDEO_TIMING_VESA_848X480_60 = 103, HDMI_VIDEO_TIMING_VESA_1024X768_60 = 104, HDMI_VIDEO_TIMING_VESA_1280X720_60 = 105, HDMI_VIDEO_TIMING_VESA_1280X768_60 = 106, HDMI_VIDEO_TIMING_VESA_1280X768_60_RB = 107, HDMI_VIDEO_TIMING_VESA_1280X800_60 = 108, HDMI_VIDEO_TIMING_VESA_1280X800_60_RB = 109, HDMI_VIDEO_TIMING_VESA_1280X960_60 = 110, HDMI_VIDEO_TIMING_VESA_1280X1024_60 = 111, HDMI_VIDEO_TIMING_VESA_1360X768_60 = 112, HDMI_VIDEO_TIMING_VESA_1366X768_60 = 113, HDMI_VIDEO_TIMING_VESA_1400X1050_60 = 114, HDMI_VIDEO_TIMING_VESA_1440X900_60 = 115, HDMI_VIDEO_TIMING_VESA_1440X900_60_RB = 116, HDMI_VIDEO_TIMING_VESA_1440X1050_60 = 117, HDMI_VIDEO_TIMING_VESA_1440X1050_60_RB = 118, HDMI_VIDEO_TIMING_VESA_1600X900_60_RB = 119, HDMI_VIDEO_TIMING_VESA_1600X1200_60 = 120, HDMI_VIDEO_TIMING_VESA_1680X1050_60 = 113, HDMI_VIDEO_TIMING_VESA_1680X1050_60_RB = 114, HDMI_VIDEO_TIMING_VESA_1792X1344_60 = 115, HDMI_VIDEO_TIMING_VESA_1856X1392_60 = 116, HDMI_VIDEO_TIMING_VESA_1920X1080_60 = 117, HDMI_VIDEO_TIMING_VESA_1920X1200_60 = 118, HDMI_VIDEO_TIMING_VESA_1920X1200_60_RB = 119, HDMI_VIDEO_TIMING_VESA_1920X1440_60 = 120, HDMI_VIDEO_TIMING_VESA_2048X1152_60 = 121, HDMI_VIDEO_TIMING_VESA_2560X1440_60_RB = 122, HDMI_VIDEO_TIMING_VESA_2560X1600_60 = 123, HDMI_VIDEO_TIMING_VESA_2560X1600_60_RB = 124, HDMI_VIDEO_TIMING_USER_DEFINE = 125, HDMI_VIDEO_TIMING_USER_1920X2160_30 = 126, HDMI_VIDEO_TIMING_USER_2560X1440_30 = 127, HDMI_VIDEO_TIMING_USER_2560X1440_60 = 128, HDMI_VIDEO_TIMING_USER_1280X720_60 = 129, HDMI_VIDEO_TIMING_USER_1366X768_60 = 130, HDMI_VIDEO_TIMING_USER_1600X900_60_RB = 131, HDMI_VIDEO_TIMING_USER_1920X1080_60 = 132, HDMI_VIDEO_TIMING_USER_2048X1152_60 = 133, HDMI_VIDEO_TIMING_BUTT, }; /** * @brief Enumerates picture aspect ratio, * see the section 8.2.1 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiPictureAspectRatio { HDMI_PICTURE_ASPECT_NO_DATA = 0, HDMI_PICTURE_ASPECT_4_3 = 1, HDMI_PICTURE_ASPECT_16_9 = 2, HDMI_PICTURE_ASPECT_64_27 = 3, HDMI_PICTURE_ASPECT_256_135 = 4, HDMI_PICTURE_ASPECT_BUTT = 5, }; /** * @brief Enumerates active format aspect ratio, * see the section 8.2.1 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiActiveFormatAspectRatio { HDMI_ACTIVE_FORMAT_ASPECT_16_9_TOP = 2, HDMI_ACTIVE_FORMAT_ASPECT_14_9_TOP = 3, HDMI_ACTIVE_FORMAT_ASPECT_16_9_CENTER = 4, HDMI_ACTIVE_FORMAT_ASPECT_PICTURE = 8, HDMI_ACTIVE_FORMAT_ASPECT_4_3 = 9, HDMI_ACTIVE_FORMAT_ASPECT_16_9 = 10, HDMI_ACTIVE_FORMAT_ASPECT_14_9 = 11, HDMI_ACTIVE_FORMAT_ASPECT_4_3_SP_14_9 = 13, HDMI_ACTIVE_FORMAT_ASPECT_16_9_SP_14_9 = 14, HDMI_ACTIVE_FORMAT_ASPECT_16_9_SP_4_3 = 15, HDMI_ACTIVE_FORMAT_ASPECT_BUTT, }; /** * @brief Enumerates Nups(non-uniform picture scaling), * see the section 8.2.1 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiNups { HDMI_NUPS_UNKNOWN = 0, /* No Known non-uniform scaling */ HDMI_NUPS_HORIZONTAL = 1, /* Picture has been scaled horizontally */ HDMI_NUPS_VERTICAL = 2, /* Picture has been scaled vertically */ HDMI_NUPS_BOTH = 3, /* Picture has been scaled horizontally and vertically */ }; /** * @brief Defines the video attribute struct. * * @since 1.0 */ struct HdmiVideoAttr { uint32_t tmdsClock; /* unit: KHz */ uint32_t pixelClock; /* unit: KHz */ uint32_t pixelRepeat; enum HdmiColorSpace colorSpace; enum HdmiColorimetry colorimetry; enum HdmiExtendedColorimetry extColorimetry; enum HdmiQuantizationRange quantization; enum HdmiYccQuantizationRange yccQuantization; enum HdmiDeepColor deepColor; enum HdmiVideo3dStructure _3dStruct; enum HdmiVideoTiming timing; enum HdmiPictureAspectRatio aspect; enum HdmiActiveFormatAspectRatio activeAspect; enum HdmiNups nups; bool xvycc; }; /** * @brief Enumerates audio coding type, * see the section 7 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiAudioCodingType { HDMI_AUDIO_CODING_TYPE_STREAM = 0, HDMI_AUDIO_CODING_TYPE_LPCM = 1, HDMI_AUDIO_CODING_TYPE_AC3 = 2, HDMI_AUDIO_CODING_TYPE_MPEG1 = 3, HDMI_AUDIO_CODING_TYPE_MP3 = 4, HDMI_AUDIO_CODING_TYPE_MPEG2 = 5, HDMI_AUDIO_CODING_TYPE_AAC_LC = 6, HDMI_AUDIO_CODING_TYPE_DTS = 7, HDMI_AUDIO_CODING_TYPE_ATRAC = 8, HDMI_AUDIO_CODING_TYPE_OBA = 9, HDMI_AUDIO_CODING_TYPE_EAC3 = 10, HDMI_AUDIO_CODING_TYPE_DTS_HD = 11, HDMI_AUDIO_CODING_TYPE_MLP = 12, HDMI_AUDIO_CODING_TYPE_DST = 13, HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14, HDMI_AUDIO_CODING_TYPE_CXT = 15, }; /** * @brief Enumerates audio interface type. * * @since 1.0 */ enum HdmiAudioInterfaceType { HDMI_AUDIO_IF_TYPE_I2S = 0, /* Inter-IC Sound */ HDMI_AUDIO_IF_TYPE_SPDIF = 1, /* Sony/Philips Digital Interface */ HDMI_AUDIO_IF_TYPE_OTHER, }; /** * @brief Enumerates audio bit depth, * see the section 7 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiAudioBitDepth { HDMI_ADIO_BIT_DEPTH_UNKNOWN, HDMI_ADIO_BIT_DEPTH_8 = 8, HDMI_ADIO_BIT_DEPTH_16 = 16, HDMI_ADIO_BIT_DEPTH_18 = 18, HDMI_ADIO_BIT_DEPTH_20 = 20, HDMI_ADIO_BIT_DEPTH_24 = 24, HDMI_ADIO_BIT_DEPTH_32 = 32, HDMI_ADIO_BIT_DEPTH_BUTT, }; /** * @brief Enumerates sample rate used for audio, * see the section 7.3 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiSampleRate { HDMI_SAMPLE_RATE_UNKNOWN, HDMI_SAMPLE_RATE_8K = 8000, HDMI_SAMPLE_RATE_11K = 11025, HDMI_SAMPLE_RATE_12K = 12000, HDMI_SAMPLE_RATE_16K = 16000, HDMI_SAMPLE_RATE_22K = 22050, HDMI_SAMPLE_RATE_24K = 24000, HDMI_SAMPLE_RATE_32K = 32000, HDMI_SAMPLE_RATE_44K = 44100, HDMI_SAMPLE_RATE_48K = 48000, HDMI_SAMPLE_RATE_88K = 88200, HDMI_SAMPLE_RATE_96K = 96000, HDMI_SAMPLE_RATE_176K = 176400, HDMI_SAMPLE_RATE_192K = 192000, HDMI_SAMPLE_RATE_768K = 768000, HDMI_SAMPLE_RATE_BUTT, }; /** * @brief Enumerates audio format channel, * see the section 7 of HDMI Specification 1.4 for details. * * @since 1.0 */ enum HdmiAudioFormatChannel { HDMI_AUDIO_FORMAT_CHANNEL_2 = 2, HDMI_AUDIO_FORMAT_CHANNEL_3, HDMI_AUDIO_FORMAT_CHANNEL_4, HDMI_AUDIO_FORMAT_CHANNEL_5, HDMI_AUDIO_FORMAT_CHANNEL_6, HDMI_AUDIO_FORMAT_CHANNEL_7, HDMI_AUDIO_FORMAT_CHANNEL_8, HDMI_AUDIO_FORMAT_CHANNEL_BUTT, }; /** * @brief Defines the audio attribute struct. * * @since 1.0 */ struct HdmiAudioAttr { enum HdmiAudioCodingType codingType; enum HdmiAudioInterfaceType ifType; enum HdmiAudioBitDepth bitDepth; enum HdmiSampleRate sampleRate; bool downSample; enum HdmiAudioFormatChannel channels; }; /** * @brief Enumerates Electro-Optical Transfer Function (EOTF), * see the section 6.9 of CTA-861-G for details. * * @since 1.0 */ enum HdmiEotfType { HDMI_EOTF_SDR_LUMIN = 0, /* Traditional gamma - SDR Luminance Range */ HDMI_EOTF_HDR_LUMIN = 1, /* Traditional gamma - HDR Luminance Range */ HDMI_EOTF_SMPTE_ST_2048 = 2, /* SMPTE ST 2048 */ HDMI_EOTF_HLG = 3, /* Hybrid Log-Gamma (HLG) based on ITU-R BT.2100-0 */ HDMI_EOTF_BUTT, }; /** * @brief Enumerates hdr colormetry, * see HDMI Specification 2.1 for details. * * @since 1.0 */ enum HdmiHdrColormetry { HDMI_HDR_COLORIMETRY_NONE, HDMI_HDR_COLORIMETRY_ITU_601, HDMI_HDR_COLORIMETRY_ITU_709, HDMI_HDR_COLORIMETRY_EXTENDED, HDMI_HDR_EXTENDED_COLORIMETRY_XV_YCC_601, HDMI_HDR_EXTENDED_COLORIMETRY_XV_YCC_709, HDMI_HDR_EXTENDED_COLORIMETRY_S_YCC_601, HDMI_HDR_EXTENDED_COLORIMETRY_ADOBE_YCC_601, HDMI_HDR_EXTENDED_COLORIMETRY_ADOBE_RGB, HDMI_HDR_EXTENDED_COLORIMETRY_2020_CONST_LUMINOUS, /* BT2020 c_ycc */ HDMI_HDR_EXTENDED_COLORIMETRY_2020_NON_CONST_LUMINOUW }; /** * @brief Enumerates hdr mode, * see HDMI Specification 2.1 for details. * * @since 1.0 */ enum HdmiHdrMode { HDMI_HDR_MODE_DISABLE, /* HDR & dolby mode disable */ HDMI_HDR_MODE_DOLBY_NORMAL, /* dolby normal(ycbcr422-12bit) mode enable */ HDMI_HDR_MODE_DOLBY_TUNNELING, /* dolby tunneling(RGB-8bit) mode enable */ HDMI_HDR_MODE_CEA_861_3, /* HDR standard mode enable(according to ) */ HDMI_HDR_MODE_CEA_861_3_AUTHEN, /* HDR authen mode */ HDMI_HDR_MODE_BUTT }; /** * @brief Enumerates hdr user mode, * see HDMI Specification 2.1 for details. * * @since 1.0 */ enum HdmiHdrUserMode { HDMI_HDR_USERMODE_SDR, HDMI_HDR_USERMODE_HDR10, HDMI_HDR_USERMODE_DOLBY, HDMI_HDR_USERMODE_BUTT }; /** * @brief Enumerates static metadata type, * see the section 6.9 of CTA-861-G for details. * * @since 1.0 */ enum HdmiStaticMetadataType { HDMI_DRM_STATIC_METADATA_TYPE_1 = 0, /* Static Metadata Type 1 */ HDMI_DRM_STATIC_METADATA_BUTT, }; /** * @brief Enumerates static metadata descriptor1st, * see the section 6.9 of CTA-861-G for details. * * @since 1.0 */ struct HdmiStaticMetadataDescriptor1st { uint16_t displayPrimaries0X; /* display_primaries_x[0], in units of 0.00002 */ uint16_t displayPrimaries0Y; /* display_primaries_y[0], in units of 0.00002 */ uint16_t displayPrimaries1X; /* display_primaries_x[1], in units of 0.00002 */ uint16_t displayPrimaries1Y; /* display_primaries_y[1], in units of 0.00002 */ uint16_t displayPrimaries2X; /* display_primaries_x[2], in units of 0.00002 */ uint16_t displayPrimaries2Y; /* display_primaries_y[2], in units of 0.00002 */ uint16_t whitePointX; /* white_point_x, in units of 0.00002 */ uint16_t whitePointY; /* white_point_y, in units of 0.00002 */ uint16_t maxDisplayMasteringLuminance; /* max_display_mastering_luminance, in units of 1 cd/m^2 */ uint16_t minDisplayMasteringLuminance; /* min_display_mastering_luminance, in units of 0.0001 cd/m^2 */ uint16_t maxContentLightLevel; /* Maximum Content Light Level, in units of 1 cd/m^2 */ uint16_t maxFrameAverageLightLevel; /* Maximum Frame-average Light Level, in units of 1 cd/m^2 */ }; /** * @brief Defines the static metadata descriptor, * see the section 6.9 of CTA-861-G for details. * * @since 1.0 */ union HdmiStaticMetadataDescriptor { struct HdmiStaticMetadataDescriptor1st type1; }; /** * @brief Defines the hdr attribute struct. * * @since 1.0 */ struct HdmiHdrAttr { enum HdmiHdrMode mode; enum HdmiHdrUserMode userMode; /* The following members are valid, when mode is HDMI_HDR_MODE_CEA_861_3. */ enum HdmiEotfType eotfType; enum HdmiStaticMetadataType metadataType; union HdmiStaticMetadataDescriptor descriptor; enum HdmiHdrColormetry colorimetry; }; /** * @brief Defines the hdmi HPD(Hot Plug Detect) callback info. * * @since 1.0 */ struct HdmiHpdCallbackInfo { void *data; void (*callbackFunc)(void *data, bool hdp); }; /** * @brief Opens an HDMI controller with a specified bus number. * * Before using the HDMI interface, you can obtain the device handle of the HDMI controller * by calling {@link HdmiOpen}. This function is used in pair with {@link HdmiClose}. * * @param busNum Indicates the bus number. * * @return Returns the device handle {@link DevHandle} of the HDMI controller if the operation is successful; * returns NULL otherwise. * * @since 1.0 */ DevHandle HdmiOpen(uint16_t busNum); /** * @brief HDMI transmission start. * * This function is used in pair with {@link HdmiStop}. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiStart(DevHandle handle); /** * @brief HDMI transmission stop. * * This function is used in pair with {@link HdmiStart}. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiStop(DevHandle handle); /** * @brief HDMI Avmute set. * * First put the display device into the black screen mute state, waitting for the HDMI output device switch, * and then send a Clear AVMute signal, so that the display device to boot, so that the switching process of * the screen will be shielded. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param enable Indicates whether to enable avmute. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiAvmuteSet(DevHandle handle, bool enable); /** * @brief HDMI deep color set. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param color Indicates the deep color to be set, see {@link HdmiDeepColor}. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiDeepColorSet(DevHandle handle, enum HdmiDeepColor color); /** * @brief HDMI deep color get. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param color Indicates the pointer to the deep color to read, see {@link HdmiDeepColor}. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiDeepColorGet(DevHandle handle, enum HdmiDeepColor *color); /** * @brief HDMI set video attribute. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param attr Indicates the pointer to the video attribute to set, see {@link HdmiVideoAttr}. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiSetVideoAttribute(DevHandle handle, struct HdmiVideoAttr *attr); /** * @brief HDMI set audio attribute. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param attr Indicates the pointer to the audio attribute to set, see {@link HdmiAudioAttr}. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiSetAudioAttribute(DevHandle handle, struct HdmiAudioAttr *attr); /** * @brief HDMI set hdr attribute. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param attr Indicates the pointer to the hdr attribute to set, see {@link HdmiHdrAttr}. * * @return Returns 0 if the operation is successful; returns a negative value if the operation fails. * * @since 1.0 */ int32_t HdmiSetHdrAttribute(DevHandle handle, struct HdmiHdrAttr *attr); /** * @brief HDMI read sink device's raw EDID data. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param buffer Indicates the pointer to the data to read. * @param len Indicates the length of the data to read. * * @return Returns the length of the data read if the operation is successful; * returns a negative value or 0 if the operation fails. * * @since 1.0 */ int32_t HdmiReadSinkEdid(DevHandle handle, uint8_t *buffer, uint32_t len); /** * @brief HDMI register HPD(Hot Plug Detect) callback function. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * @param callback Indicates the pointer to the callback info. * * @return Returns the length of the data read if the operation is successful; * returns a negative value or 0 if the operation fails. * * @since 1.0 */ int32_t HdmiRegisterHpdCallbackFunc(DevHandle handle, struct HdmiHpdCallbackInfo *callback); /** * @brief HDMI unregister HPD(Hot Plug Detect) callback function. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * * @return Returns the length of the data read if the operation is successful; * returns a negative value or 0 if the operation fails. * * @since 1.0 */ int32_t HdmiUnregisterHpdCallbackFunc(DevHandle handle); /** * @brief Closes an HDMI controller. * * After the HDMI interface is used, you can close the HDMI controller by calling {@link HdmiClose}. * This function is used in pair with {@link HdmiOpen}. * * @param handle Indicates the pointer to the device handle of the HDMI controller. * * @since 1.0 */ void HdmiClose(DevHandle handle); #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* HDMI_IF_H */