MI HDMI RX API


REVISION HISTORY

Revision No.
Description
Date
0.1
  • Initial release
  • 05/06/2022
  • Add CEC
  • 05/11/2022
  • Add EQ
  • 05/25/2022
  • Modify HDCP/EDID Value Type
  • 12/6/2022
  • Add proc info
  • 12/29/2022
  • Modify CEC Addr
  • 01/11/2023

    1. API参考

    1.1. 概述

    HDMI (High Definition Multimedia Interface )即高清多媒体接口,是一种全数字化视频和音频发送接口,可以同时发送视频和音频信号。

    HDMI 分为RX 端和 TX端,TX 即为source 设备,用来将数据传输给RX 设备(Sink设备)。RX 端就是接收端,接收TX发送过来的HDMI信号。

    本文主要针对HDMI RX设备。

    本模块同时支持CEC (消费类电子控制)功能,旨在允许用户通过仅使用一个遥控器来命令和控制HDMI连接的设备。它是一种单总线双向串行总线。

    • CEC物理地址

      为了使CEC能够寻址及控制拥有特定物理地址的设备,所有系统内的设备必须拥有物理地址。软件通过EDID为CEC网络中的所有设备分配物理地址。每个设备有且只能有一个物理地址。

    • CEC逻辑地址

      每一个连接到CEC控制总线上的设备都必须绑定逻辑地址,定义该设备的类型。每一个逻辑地址都只能绑定唯一一个设备(15除外)。大多数设备都只绑定一个逻辑地址,少数设备最多可以绑定两个逻辑地址。

    1.2. 流程图

    下图是HDMIRX 模块间关系图。

    1.3. CEC流程图

    1.4. 规格说明

    细项 chip
    HDMI 版本 1.4
    HDCP版本 1.4
    CEC 版本 1.4 (不支持CEC wakeup 功能)
    MHL 不支持
    Sink HDMI input 最大分辨率 1920 * 1080@60Hz / 3840 * 2160@30HZ / 4096 * 2160@24HZ
    Sink DVI input 最大分辨率 2560 * 1600@60Hz
    3D 功能 不支持
    图像格式 支持RGB4:4:4 / YCbCr4:4:4
    支持YCbCr4:2:2
    Audio格式 L-PCM / L-PCM Multi-channel up to 2channels / NL-PCM
    HEAC 不支持

    1.5. 关键词说明

    • EDID

      外部显示设备标识数据

    • E-EDID

      扩展外部显示设备标识数据

    • DDC

      显示数据通道

    • HDCP

      宽带数字内容保护

    • PCM

      脉冲编码调制

    • L-PCM

      线性脉冲编码调制

    • NL-PCM

      非线性脉冲编码调制

    • S/PDIF

      索尼/飞利浦数字音频接口

    • VIC

      视频识别码

    2. 功能模块API

    如下是MI HDMIRX模块的用户接口。

    API名 功能
    系统功能类
    MI_HDMIRX_Init HDMI RX 设备初始化
    MI_HDMIRX_DeInit HDMI RX 设备去初始化
    MI_HDMIRX_Connect 连接HDMIRX 设备,选择输入口
    MI_HDMIRX_DisConnect 断开HDMIRX 设备,选择输入口
    MI_HDMIRX_GetSignalStatus 获取HDMI RX 视频信号的状态
    MI_HDMIRX_LoadHdcp 加载HDMI RX HDCP Key
    MI_HDMIRX_UpdateEdid 设置EDID 信息。
    MI_HDMIRX_GetTimingInfo 获取当前HDMI RX Video的Timing 信息
    MI_HDMIRX_GetHDMILineDetStatus 获取device ID 的 HDMI线连接状态
    MI_HDMIRX_GetFd 获取HDMIRX 信号侦测事件的设备文件句柄
    MI_HDMIRX_CloseFd 关闭HDMIRX 信号侦测事件的设备文件句柄
    MI_HDMIRX_CecEnable 启用/停止CEC
    MI_HDMIRX_CecGetPhyAddr 获取CEC设备的物理地址
    MI_HDMIRX_CecSetLogicAddr 配置CEC 逻辑地址
    MI_HDMIRX_CecClearLogicAddr 清除CEC 逻辑地址
    MI_HDMIRX_CecSendMessage 发送CEC 消息
    MI_HDMIRX_CecRegisterCallback 注册CEC 回调
    MI_HDMIRX_CecUnRegisterCallback 注销CEC 回调
    MI_HDMIRX_SetEQAttr 设置 HDMI EQ 补偿强度
    MI_HDMIRX_GetEQAttr 获取HDMI EQ 补偿强度
    MI_HDMIRX_EnableSwAutoEQ 设置Auto Eq 自动补偿强度
    MI_HDMIRX_SetHotPlug 拉低/拉高 Hotplug

    2.1. MI_HDMIRX_Init

    • 功能说明

      HDMI RX 设备初始化。

    • 语法

      MI_S32 MI_HDMIRX_Init(void);
      
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      HDMI RX初始化设置,以及退出范例

      //初始化HDMIRX模块。
      MI_HDMIRX_Init();
      
      //配置EDID 信息。
      MI_HDMIRX_Edid_t  stEdid;
      MI_U32 au32Edid[] = { XX, ……}; // EDID 参数
      stEdid.ePortId = E_MI_HDMI_RX_ID_0;
      stEdid.u32EdidLength= 256 ;
      stEdid.u64EdidDataVirAddr = (MI_U64)au32Edid;
      MI_HDMIRX_UpdateEdid(&stEdid);
      
      //配置HDCP 信息。
      MI_HDMIRX_Hdcp_t  stHdcp;
      MI_U8 au8hdcp[] = { XX, ……}; // hdcp参数
      stHdcp.u32HdcpLength = 320;
      stHdcp.u64HdcpDataVirAddr = (MI_U64)au8hdcp;
      MI_HDMIRX_LoadHdcp(E_MI_HDMI_RX_ID_0,&stHdcp);
      
      //选择对应的port口。
      MI_HDMIRX_PortId_e ePortId;
      ePortId = E_MI_HDMIRX_PORT0;
      MI_HDMIRX_Connect(E_MI_HDMIRX_PORT0);
      
      viod VideoProcess(viod *pdata)
      {
      MI_HDMIRX_SigStatus_e  eSignalStatus;
          While( running )
      {
      MI_HDMIRX_GetSignalStatus(ePortId,& eSignalStatus);
      if(eSignalStatus) == E_MI_HDMIRX_SIG_SUPPORT)
      {
              //signal stable
      }
      else
      {
              //no signal
      }
      mSleep(20)//
      }
      }
      pthread_t stMonitorThrd;
      pthread_create(&stMonitorThrd, NULL, HDMIRX_VideoProcess,NULL);
      
      //将当前的port口断开连接。
      pthread_join(&HDMIRX_VideoProcess,NULL);
      MI_HDMIRX_DisConnect(E_MI_HDMIRX_PORT0);
      
      //去初始化HDMIRX模块
      MI_HDMIRX_DeInit();
      
    • 相关API

      MI_HDMIRX_DeInit

    2.2. MI_HDMIRX_DeInit

    • 功能说明

      HDMI RX 设备去初始化。

    • 语法

      MI_S32 MI_HDMIRX_DeInit(void);
      
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_Init

    • 相关API

      MI_HDMIRX_Init

    2.3. MI_HDMIRX_Connect

    • 功能说明

      创建HDMIRX设备,选择输入口。

    • 语法

      MI_S32 MI_HDMIRX_Connect(MI_HDMIRX_PortId_e  ePortId);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId Port ID, 对应HDMI RX输入端口 ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 注意

      先做Init初始化。

    • 举例

      参考MI_HDMIRX_Init

    • 相关API

      MI_HDMIRX_DisConnect

    2.4. MI_HDMIRX_DisConnect

    • 功能说明

      创建HDMIRX设备,选择输入口。

    • 语法

      MI_S32 MI_HDMIRX_DisConnect(MI_HDMIRX_PortId_e ePortId);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId Port ID, 对应HDMI RX 输入端口 ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_Init

    • 相关API

      MI_HDMIRX_Connect

    2.5. MI_HDMIRX_GetSignalStatus

    • 功能说明

      获取HDMI RX 视频 信号的状态。

    • 语法

      MI_S32 MI_HDMIRX_GetSignalStatus(MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_SigStatus_e *peStatus);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      peStatus 设备信号状态 输出
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_Init

    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    2.6. MI_HDMIRX_LoadHdcp

    • 功能说明

      加载 HDMI RX HDCP Key。

    • 语法

      MI_S32 MI_HDMIRX_LoadHdcp(MI_HDMIRX_DeviceId_e ePortId,
      MI_HDMIRX_Hdcp_t *pstHdcp);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pstHdcp HDMI RX hdcp key 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    2.7. MI_HDMIRX_UpdateEdid

    • 功能说明

      更新EDID 数据到SRAM。

    • 语法

      MI_S32 MI_HDMIRX_UpdateEdid(MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_Edid_t *pstEdid);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pstEdid EDID 数据指针 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    2.8. MI_HDMIRX_GetTimingInfo

    • 功能说明

      获取当前HDMI RX 设备的Timing 信息

    • 语法

      MI_S32 MI_HDMIRX_GetTimingInfo(MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_Timing_Info_t *pstTimingInfo);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pstTimingInfo Timing 信息 输出
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    2.9. MI_HDMIRX_GetHDMILineDetStatus

    • 功能说明

      获取device ID 的 hdmi线连接状态

    • 语法

      MI_S32 MI_HDMIRX_GetHDMILineDetStatus(MI_HDMIRX_PortId_e ePortId,
      MI_BOOL *pbConnected);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pbConnected HDMI 线连接状态 输出
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    2.10. MI_HDMIRX_GetFd

    • 功能说明

      获取HDMIRX 信号侦测事件的设备文件句柄,用于 监听hdmi 信号是否变换,与轮询CPU相比有降低CPU使用率。

    • 语法

      MI_S32  MI_HDMIRX_GetFd (MI_HDMIRX_PortId_e ePortId);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
    • 返回值

      • HDMIRX 信号侦测事件的设备文件句柄
    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      MI_S32  s32HDMIRxFd;
      fd_set set;
      MS_S32 s32Return;
      
      s32HDMIRxFd = MI_HDMIRX_GetFd (E_MI_HDMIRX_PORT0);
      FD_ZERO(&set);       /* 将set清零使集合中不含任何s32HDMIRxFd */
      FD_SET(s32HDMIRxFd , &set);    /* 将s32HDMIRxFd 加入set集合 */
      
      s32Return = select(s32HDMIRxFd+1, &set, NULL, NULL, NULL);
      if(s32Return <0 )
      {
          Printf(“selcet err \n”);
          return E_MI_FAILED;
      }
      else if (s32Return == 0)
      {
          Printf(“selcet err \n”);
          return E_MI_FAILED;
      }
      else
      {
      
          if(FD_ISSET(s32HDMIRxFd, &set)) /* 测试fd是否在set集合中*/
          {
              MI_HDMIRX_SigStatus_e  eSignalStatus;
              MI_HDMIRX_GetSignalStatus(E_MI_HDMIRX_PORT0,&eSignalStatus);
              if(enSignalStatus) == E_MI_HDMIRX_SIG_SUPPORT)
              {
                  信号稳定行为
              }
              else
              {
                  //无信号稳定行为
              }
          }
      }
      MI_HDMIRX_CloseFd(E_MI_HDMI_RX_ID_0);
      
    • 相关API

      MI_HDMIRX_CloseFd

    2.11. MI_HDMIRX_CloseFd

    • 功能说明

      关闭HDMIRX 信号侦测事件的设备文件句柄

    • 语法

      MI_S32 MI_HDMIRX_CloseFd (MI_HDMIRX_PortId_e ePortId);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_GetFd

    • 相关API

      MI_HDMIRX_GetFd

    2.12. MI_HDMIRX_CecEnable

    • 功能说明

      启动/停止CEC Channel。

      启动:对CEC设备初始化,reset,此时设备处于idle 状态

      停止: 停止CEC 设备接收消息,对所有发过来的message 回复NACK

    • 语法

      MI_S32 MI_HDMIRX_CecEnable(MI_HDMIRX_PortId_e ePortId,
      MI_BOOL bEnable);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      bEnable 使能开关 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 注意

      Hdmi 需要连接成功

    • 举例

      MI_HDMIRX_PortId_e eHdmiRxPort0
      MI_U16 u16CECPhyAddr;
      //Enable HDMI CEC
      MI_HDMIRX_CecEnable(eHdmiRxPort0, 1);
      //Get CEC PHY addr
      u16CECPhyAddr =  MI_HDMIRX_CecGetPhyAddr(eHdmiRxPort0);
      //Setting CEC Logic addr
      MI_HDMIRX_CecSetLogicAddr(eHdmiRxPort0,CEC_LOGIC_ADDR_DEVICE_TV);
      
      //Send Message
      MI_HDMIRX_CecMessage_t msg;
      msg.u8Count = 3;
      msg.u8Opdata[0] = 0x10;
      msg.u8Opdata[1] = 0x30;
      msg.u8Opdata[2] = 0x20;
      MI_HDMIRX_CecSendMessage(eHdmiRxPort0, &msg, 100, 2);
      
      //Recieve Message
      static MI_S32 _HDMIRX_CEC_CallBack_Demo (MI_HDMIRX_PortId_e eHdmiRxPort0, MI_HDMIRX_CecMessage_t *pMessageData,void *pUsrParam)
      {
          int i = 0;
          printf("\n");
          for (i = 0; i < pMessageData->u8Count; i++)
          {
              printf("%x, ", pMessageData->u8Opdata[i]);
          }
          printf("\n");
          return 0;
      }
      MI_HDMIRX_CecRegisterCallback(eHdmiRxPort0, _HDMIRX_CEC_CallBack_Demo, NULL);
      
    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    2.13. MI_HDMIRX_CecGetPhyAddr

    • 功能说明

      获取当前CEC 设备物理地址。

      root device:0 0 0 0

    • 语法

      MI_S32 MI_HDMIRX_CecGetPhyAddr(MI_HDMIRX_PortId_e ePortId,
      MI_U16 *pu16PhyAddr);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pu16PhyAddr CEC设备物理地址 输出
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_CecEnable

    • 相关API

      MI_HDMIRX_CecSetLogicAddr

    2.14. MI_HDMIRX_CecSetLogicAddr

    • 功能说明

      设置当前CEC 设备的逻辑地址。

    • 语法

      MI_S32 MI_HDMIRX_CecSetLogicAddr (MI_HDMIRX_PortId_e ePortId,
      MI_U16 u16LogicAddr);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      u16LogicAddr CEC 逻辑地址 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 注意

      逻辑地址可以是多个组合,参考数据类MI_HDMIRX_CEC_LOGIC_ADDR。

    • 举例

      参考MI_HDMIRX_CecEnable

    • 相关API

      MI_HDMIRX_CecClearLogicAddr

      MI_HDMIRX_CecEnable

    2.15. MI_HDMIRX_CecClearLogicAddr

    • 功能说明

      清除当前CEC 设备逻辑地址。

    • 语法

      MI_S32 MI_HDMIRX_CecClearLogicAddr (MI_HDMIRX_PortId_e ePortId);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_CecEnable

    • 相关API

      MI_HDMIRX_CecSetLogicAddr

    2.16. MI_HDMIRX_CecSendMessage

    • 功能说明

      通过CEC 设备发送数据。

    • 语法

      MI_S32 MI_HDMIRX_CecSendMessage (MI_HDMIRX_PortId_e ePortId, MI_HDMIRX_CecMessage_t* pstMsg,
      MI_U32 u32TimeoutMs, MI_U8 u8RetryCount);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pstMsg 发送的消息数据 输入
      u32TimeoutMs 发送超时 输入
      u8RetryCount 发送失败后,尝试次数, 最少是1,传0会当1处理 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_CecEnable

    • 相关API

      MI_HDMIRX_CecEnable

    2.17. MI_HDMIRX_CecRegisterCallback

    • 功能说明

      注册回调函数,获取CEC收到的message。

    • 语法

      MI_S32 MI_HDMIRX_CecRegisterCallback (MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_CEC_CALL_BACK pfnHdmiRxCecCallback, void *pCallBackArgs);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pfnHdmiRxCecCallback 注册的回调函数,用来接收CEC 收到的message 输入
      pCallBackArgs 回调函数带入的用户数据 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 注意

      pCallBackArgs 在callback的时候返回给user,CEC 内部不做处理

    • 举例

      参考MI_HDMIRX_CecEnable

    • 相关API

      MI_HDMIRX_CecUnRegisterCallback

    2.18. MI_HDMIRX_CecUnRegisterCallback

    • 功能说明

      注销回调函数

    • 语法

      MI_S32 MI_HDMIRX_CecUnRegisterCallback (MI_HDMIRX_PortId_e ePortId);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 举例

      参考MI_HDMIRX_CecEnable

    • 相关API

      MI_HDMIRX_CecRegisterCallback

    2.19. MI_HDMIRX_SetEQAttr

    • 功能

      设置 HDMI EQ 补偿强度。

    • 语法

      MI_S32 MI_HDMIRX_SetEQAttr(MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_EQAttr_t *pstEqAttr);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pstEqAttr EQ 补偿强度参数 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_GetEQAttr

    2.20. MI_HDMIRX_GetEQAttr

    • 功能

      获取HDMI EQ 补偿强度。

    • 语法

      MI_S32 MI_HDMIRX_GetEQAttr(MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_EQAttr_t *pstEqAttr);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      pstEqAttr EQ 补偿强度参数 输出
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_SetEQAttr

    2.21. MI_HDMIRX_EnableSwAutoEQ

    • 功能

      设置AUTO EQ 自动补偿强度。

    • 语法

      MI_S32 MI_HDMIRX_EnableSwAutoEQ(MI_HDMIRX_PortId_e ePortId, MI_BOOL bEnable);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      bEnable 是否使能Auto Eq 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    2.22. MI_HDMIRX_SetHotPlug

    • 功能

      设置HotPlug 。

    • 语法

      MI_S32 MI_HDMIRX_SetHotPlug(MI_HDMIRX_PortId_e ePortId, MI_BOOL bHigh);
      
    • 形参

      参数名称 描述 输入/输出
      ePortId 端口 ID, 对应HDMI RX输入端口 ID 输入
      bHigh 拉高/拉低 HotPlug 输入
    • 返回值

      • MI_SUCCESS(0):成功。

      • 非0:失败,参照错误码

    • 依赖

      • 头文件:mi_hdmirx.h

      • 库文件:libmi_hdmirx.a / libmi_hdmirx.so

    • 相关API

      MI_HDMIRX_Init

      MI_HDMIRX_Connect

    3. 数据类型

    相关数据类型、数据结构定义如下:

    数据类型 定义
    MI_HDMIRX_PortId_e HDMI RX 输入端口枚举。
    MI_HDMIRX_SigStatus_e HDMI RX 信号的状态枚举
    MI_HDMIRX_Hdcp_t HDMI Rx Hdcp Key的结构体
    MI_HDMIRX_Edid_t HDMI Rx EDID的结构体
    MI_HDMIRX_QuantRange_e 定义量化 范围枚举。
    MI_HDMIRX_PixelBitWidth_e 定义像素位宽枚举
    MI_HDMIRX_OverSampleMode_e 定义过采样枚举
    MI_HDMIRX_FramePackingType_e 定义HDMIRX 视频3D 格式枚举
    MI_HDMIRX_ColorSpace_e 定义颜色空间枚举
    MI_HDMIRX_PixelFormat_e 定义HDMIRX 像素 格式枚举
    MI_HDMIRX_TimingInfo_t HDMI Rx Timing 的结构体
    MI_HDMIRX_CEC_LOGIC_ADDR 定义CEC 设备逻辑地址, 只适用MI_HDMIRX_CecSetLogicAddr
    MI_HDMIRX_CecMessage_t 定义CEC message 格式
    MI_HDMIRX_CEC_CALL_BACK 定义CEC 回调函数
    MI_HDMIRX_EQModeType_e 定义EQ 补偿强度模式枚举
    MI_HDMIRX_EQAttr_t 定义EQ 补偿强度参数的结构体

    3.1. MI_HDMIRX_PortId_e

    • 说明

      HDMI RX 输入端口枚举。

    • 定义

      typedef enum
      
      {
      
      ​    E_MI_HDMIRX_PORT0 = 0,
      
      ​    E_MI_HDMIRX_PORT_MAX
      
      } MI_HDMIRX_PortId_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_PORT0 HDMI RX 输入端口等于0

    3.2. MI_HDMIRX_SigStatus_e

    • 说明

      HDMI RX 信号的状态。

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_SIG_SUPPORT = 0,
      
          E_MI_HDMIRX_SIG_NO_SIGNAL,
      
          E_MI_HDMIRX_SIG_NOT_SUPPORT,
      
          E_MI_HDMIRX_SIG_UNSTABLE,
      
          E_MI_HDMIRX_SIG_MAX
      
      } MI_HDMIRX_SigStatus_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_SIG_SUPPORT 当前信号稳定并且支持
      E_MI_HDMIRX_SIG_NO_SIGNAL 当前是无信号状态
      E_MI_HDMIRX_SIG_NOT_SUPPORT 当前信号不支持
      E_MI_HDMIRX_SIG_UNSTABLE 当前信号不稳定

    3.3. MI_HDMIRX_Hdcp_t

    • 说明

      HDMI Rx Hdcp Key的结构体。

    • 定义

      typedef struct MI_HDMIRX_Hdcp_s
      
      {
      
          MI_U32   u32HdcpLength;
      
          MI_U64   u64HdcpDataVirAddr;
      
      }MI_HDMIRX_Hdcp_t;
      
    • 成员

      成员名称 描述
      u32HdcpLength Hdcp key 数据长度
      u64HdcpDataVirAddr Hdcp key 数据地址
    • 注意事项

      这个API不支持OTP Mode。

    3.4. MI_HDMIRX_Edid_t

    • 说明

      HDMI Rx EDID的结构体。

    • 定义

      typedef struct MI_HDMIRX_Edid_s
      
      {
      
          MI_U32   u32EdidLength;
      
          MI_U64   u64EdidDataVirAddr;
      
      }MI_HDMIRX_Edid_t;
      
    • 成员

      成员名称 描述
      u32EdidLength EDID 数据长度
      u64EdidDataVirAddr EDID 参数地址

    3.5. MI_HDMIRX_QuantRange_e

    • 说明

      定义量化范围枚举。

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_QUANTIZATION_DEFAULT,
      
          E_MI_HDMIRX_QUANTIZATION_LIMIT_RANGE,
      
          E_MI_HDMIRX_ QUANTIZATION_FULL_RANGE,
      
          E_MI_HDMIRX_ QUANTIZATION_RANGE_MAX
      
      } MI_HDMIRX_QuantRange_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_ QUANTIZATION_LIMIT_RANGE 量化 limit 范围
      E_MI_HDMIRX_ QUANTIZATION_FULL_RANGE 量化 Full范围

    3.6. MI_HDMIRX_PixelBitWidth_e

    • 说明

      定义像素位宽。

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_PIXEL_BITWIDTH_8BIT = 0,
      
          E_MI_HDMIRX_PIXEL_BITWIDTH_10BIT,
      
          E_MI_HDMIRX_PIXEL_BITWIDTH_12BIT,
      
          E_MI_HDMIRX_PIXEL_BITWIDTH_16BIT,
      
          E_MI_HDMIRX_PIXEL_BITWIDTH_MAX,
      
      } MI_HDMIRX_PixelBitWidth_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_PIXEL_BITWIDTH_8BIT 8bit 像素位宽
      E_MI_HDMIRX_PIXEL_BITWIDTH_10BIT 10bit 像素位宽
      E_MI_HDMIRX_PIXEL_BITWIDTH_12BIT 12bit 像素位宽
      E_MI_HDMIRX_PIXEL_BITWIDTH_16BIT 16bit 像素位宽

    3.7. MI_HDMIRX_OverSampleMode_e

    • 说明

      定义过采样模式。

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_OVERSAMPLE_1X = 0,
      
          E_MI_HDMIRX_OVERSAMPLE_2X,
      
          E_MI_HDMIRX_OVERSAMPLE_3X,
      
          E_MI_HDMIRX_OVERSAMPLE_4X,
      
          E_MI_HDMIRX_OVERSAMPLE_MAX,
      
      } MI_HDMIRX_OverSampleMode_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_OVERSAMPLE_1X 1倍过采样
      E_MI_HDMIRX_OVERSAMPLE_2X 2倍过采样
      E_MI_HDMIRX_OVERSAMPLE_3X 3倍过采样
      E_MI_HDMIRX_OVERSAMPLE_4X 4 倍过采样

    3.8. MI_HDMIRX_PixelFormat_e

    • 说明

      定义HDMIRX 像素 格式

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_PIXEL_FORMAT_RGB = 0,
      
          E_MI_HDMIRX_PIXEL_FORMAT_YUV444,
      
          E_MI_HDMIRX_PIXEL_FORMAT_YUV422,
      
          E_MI_HDMIRX_PIXEL_FORMAT_YUV420,
      
          E_MI_HDMIRX_PIXEL_FORMAT_MAX,
      
      } MI_HDMIRX_PixelFormat_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_PIXEL_FORMAT_RGB RGB 格式
      E_MI_HDMIRX_PIXEL_FORMAT_YUV444 YUV444 格式
      E_MI_HDMIRX_PIXEL_FORMAT_YUV422 YUV422 格式
      E_MI_HDMIRX_PIXEL_FORMAT_YUV420 YUV420 格式
    • 注意事项

      1.4b 不支持YUV420

    3.9. MI_HDMIRX_FramePackingType_e

    • 说明

      定义HDMIRX 视频3D 格式

    • 定义

      typedef enum
      {
          E_MI_HDMIRX_FRAME_PACKING_TYPE_NONE,
          E_MI_HDMIRX_FRAME_PACKING_TYPE_SIDE_BY_SIDE,
          E_MI_HDMIRX_FRAME_PACKING_TYPE_TOP_AND_BOTTOM,
          E_MI_HDMIRX_FRAME_PACKING_TYPE_TIME_INTERLACED,
          E_MI_HDMIRX_FRAME_PACKING_TYPE_FRAME_PACKING,
          E_MI_HDMIRX_FRAME_PACKING_TYPE_3D_TILE,
          E_MI_HDMIRX_FRAME_PACKING_TYPE_MAX
      }MI_HDMIRX_FramePackingType_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_FRAME_PACKING_TYPE_NONE 2D 格式
      E_MI_HDMIRX_FRAME_PACKING_TYPE_SIDE_BY_SIDE 左右
      E_MI_HDMIRX_FRAME_PACKING_TYPE_TOP_AND_BOTTOM 上下
      E_MI_HDMIRX_FRAME_PACKING_TYPE_TIME_INTERLACED, 帧交织
      E_MI_HDMIRX_FRAME_PACKING_TYPE_FRAME_PACKING 帧高清
      E_MI_HDMIRX_FRAME_PACKING_TYPE_3D_TILE 块 3D
    • 注意事项

      1.4b 不支持3D 功能

    3.10. MI_HDMIRX_ColorSpace_e

    • 说明

      定义HDMIRX 视频颜色空间格式

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_COLOR_SPACE_UNKNOWN = 0,
      
          E_MI_HDMIRX_COLOR_SPACE_BT601,
      
          E_MI_HDMIRX_COLOR_SPACE_BT709,
      
          E_MI_HDMIRX_COLOR_SPACE_MAX
      
      } MI_HDMIRX_ColorSpace_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_COLOR_SPACE_UNKNOWN
      E_MI_HDMIRX_COLOR_SPACE_BT601 ITU 601 颜色空间
      E_MI_HDMIRX_COLOR_SPACE_BT709 ITU 709 颜色空间

    3.11. MI_HDMIRX_TimingInfo_t

    • 说明

      HDMI Rx Timing 的结构体。

    • 定义

      typedef struct MI_HDMIRX_TimingInfo_s
      {
          MI_U32                          u32Width;
          MI_U32                          u32Height;
          MI_U32                          u32FrameRate;
          MI_HDMIRX_ColorSpace_e          eColorSpace;
          MI_HDMIRX_PixelFormat_e         ePixelFmt;
          MI_HDMIRX_PixelBitWidth_e       eBitWidth;
          MI_BOOL                         bInterlace;
          MI_HDMIRX_OverSampleMode_e      eOverSample;
          MI_BOOL                         bHdmiMode;
          MI_HDMIRX_FramePackingType_e    e3dFmt;
          MI_U32                          u32Vblank;
          MI_BOOL                         bPcMode;
          MI_HDMIRX_QuantRange_e            eQuantRange;
          MI_U32                          u32TimingIdx;
          MI_BOOL                         bMHL;
      }MI_HDMIRX_TimingInfo_t;
      
    • 成员

      成员名称 描述
      u32Width Timing info 的宽
      u32Height Timing info 的高
      u32FrameRate Timing info的帧率
      eColorSpace Timing info 的颜色空间
      ePixelFmt Timing info 的像素格式
      eBitWidth Timing info 的位深
      bInterlace Interlace Mode
      eOverSample HDMIRX 视频过采样大小(HDMIRX 像素重复值)
      bHdmiMode HDMIRX视频模式是HDMI还是DVI
      e3dFmt HDMIRX 视频3D格式
      u32Vblank HDMIRX Vblank值,仅在视频格式为3D Frame PACKING时有效
      bPcMode HDMIRX PC Timing标志
      eQuantRange HDMIRX 量化范围
      u32TimingIdx HDMIRX Timing 对应的Index
      bMHL HDMIRX MHL标志
    • 注意事项

      1.4b不支持3D/MHL, 结构体中的en3dFmt / bMHL / u32Vblank 都不支持。

    3.12. MI_HDMIRX_CEC_LOGIC_ADDR

    • 说明

      定义CEC 设备逻辑地址,只适用MI_HDMIRX_CecSetLogicAddr,为了同时设置多个逻辑地址

    • 定义

      #define CEC_LOGIC_ADDR_DEVICE_TV                 0
      #define CEC_LOGIC_ADDR_RECORDING_DEVICE_1        1
      #define CEC_LOGIC_ADDR_RECORDING_DEVICE_2        2
      #define CEC_LOGIC_ADDR_TUNER_1                   3
      #define CEC_LOGIC_ADDR_PLAYBACK_DEVICE_1         4
      #define CEC_LOGIC_ADDR_AUDIO_SYSTEM              5
      #define CEC_LOGIC_ADDR_TUNER_2                   6
      #define CEC_LOGIC_ADDR_TUNER_3                 7
      #define CEC_LOGIC_ADDR_PLAYBACK_DEVICE_2         8
      #define CEC_LOGIC_ADDR_RECORDING_DEVICE_3        9
      #define CEC_LOGIC_ADDR_TUNER_4             10
      #define CEC_LOGIC_ADDR_PLAYBACK_DEVICE_4         11
      #define CEC_LOGIC_ADDR_RESERVED_1         12
      #define CEC_LOGIC_ADDR_RESERVED_2         13
      #define CEC_LOGIC_ADDR_FREE_USE             14
      #define CEC_LOGIC_ADDR_UNREGISTER             15
      
    • 相关数据类型及接口

      MI_HDMIRX_CecSetLogicAddr

    3.13. MI_HDMIRX_CecMessage_t

    • 说明

      定义CEC message的数据结构。

    • 定义

      typedef struct MI_HDMIRX_CecMessage_s
      
      {
      
          MI_U8 u8Opdata[16];
      
          MI_U8 u8Count;
      
      } MI_HDMIRX_CecMessage_t;
      
    • 成员

      成员名称 描述
      u8Opdata 操作数,最多16个
      u8Count u8Opdata操作数的个数

    3.14. MI_HDMIRX_CEC_CALL_BACK

    • 说明

      定义CEC Callback的数据结构。

    • 定义

      typedef MI_S32 (*MI_HDMIRX_CEC_CALL_BACK)(MI_HDMIRX_PortId_e ePortId,
      MI_HDMIRX_CecMessage_t *pMessageData, void *pUsrParam);
      
    • 成员

      成员名称 描述
      ePortId Port ID, 对应HDMI input port ID
      pMessageData 接收到的message 数据
      pUsrParam 注册回调函数时,传入的用户数据
    • 相关数据类型及接口

      MI_HDMIRX_CecRegisterCallback

    3.15. MI_HDMIRX_EQModeType_e

    • 说明

      定义EQ 补偿强度模式枚举

    • 定义

      typedef enum
      
      {
      
          E_MI_HDMIRX_EQ_AUTO,
      
          E_MI_HDMIRX_EQ_MANUAL,
      
          E_MI_HDMIRX_EQ_MAX
      
      } MI_HDMIRX_EQModeType_e;
      
    • 成员

      成员名称 描述
      E_MI_HDMIRX_EQ_AUTO 自动模式,系统自动获取EQ 补偿强度
      E_MI_HDMIRX_EQ_MANUAL 手动模式,用户调整EQ 补偿强度

    3.16. MI_HDMIRX_EQAttr_t

    • 说明

      定义EQ 补偿强度参数的结构体

    • 定义

      typedef struct MI_HDMIRX_EQAttr_s
      {
          MI_HDMIRX_EQModeType_e eEQMode;
          MI_U8 u8ChnEqStrength[3];
      }MI_HDMIRX_EQAttr_t;
      
    • 成员

      成员名称 描述
      eEQMode EQ 补偿强度模式
      u8ChnEqStrength EQ 补偿强度参数
    • 相关数据类型及接口

      MI_HDMIRX_EQModeType_e

      MI_HDMIRX_SetEQAttr

      MI_HDMIRX_GetEQAttr

    4. 错误码

    MI HDMI RX模块错误码如下表所示:

    错误码 宏定义 描述
    0 MI_HDMIRX_RET_SUCCESS 成功
    0xA02A2001 MI_ERR_HDMIRX_NOT_INIT 模块未完成初始化
    0xA02A2002 MI_ERR_HDMIRX_DEV_ INVALID Device超出合法范围
    0xA02A2003 MI_ERR_HDMIRX_PORT_ INVALID Port超出合法范围
    0xA02A2004 MI_ERR_HDMIRX_PARAM_ INVALID 参数不合法
    0xA02A2005 MI_ERR_HDMIRX_TIMEOUT 设备运行超时
    0xA02A2006 MI_ERR_HDMIRX_NULL_PTR 输入参数空指针错误
    0xA02A2007 MI_ERR_HDMIRX_HAS_CONNECTED 设备重连
    0xA02A2008 MI_ERR_HDMIRX_HDCPKEY_INVALID HDCP Key 不正确
    0xA02A2009 MI_ERR_HDMIRX_FAILED 操作出错
    0xA02A200A MI_ERR_HDMIRX_NOT_SUPPORT 操作不支持

    5. PROCFS介绍

    5.1. cat

    • 调试信息

        cat /proc/mi_modules/mi_hdmirx/mi_hdmirx0
      
    • 调试信息分析

      记录当前HDMIRX连接状态及相应的Prepare/Timing/Audio信息,可以动态地获取到这些信息,方便调试。

    • 参数说明

      参数 描述
      Prepare HDCP/EDID Info edid ready 扩展显示识别数据是否写入成功,1:success,0: fail
      edid len 扩展显示识别数据的长度
      hdcp otp mode hdcp key 安全模式,1:高安, 0: 低安
      key ready hdcp key是否写入成功,1:success, 0: fail
      key len hdcp key 长度
      参数 描述
      Timing Info signal status 连接信号状态
      width
      height
      fps 帧率
      Htotal 水平方向像素
      Vtotal 垂直方向像素
      colorFormat 颜色格式[0-3]:RGB444,yuv444,yuv422,yuv420
      colorRange 色域参数[0-2]:default,limit,full
      colorSpace 色域参数[0-3]:none,bt.601,bt.709,extended(其它)
      bitDepth 像素深度
      interlace? 是否隔行
      DVI? 是否DVI
      aspectRatio 宽高比
      repetion 像素重复比例
      参数 描述
      Eq Info IsAuto 是否硬件Auto,1:硬件Auto ,0:软件Auto
      Chn0 通道0 Eq 值
      Chn1 通道1 Eq 值
      Chn2 通道2 Eq 值
      参数 描述
      Audio Info sampleFreq 采样率(32Khz,44KHz,48KHz,96KHz...)
      sampleSize 采样位宽(16bit,20bit,24bit)
      codeType 编码类型(PCM,AC-3,MP3,AAC,DTS,DD...)
      channel 编码通道(2CH,3CH,4CH,5CH...8Ch)
      pktMute Audio packet是否mute,true:mute,false:unmute
      fifoFlicker Audio fifo抖动,true:抖动,false:稳定
      forceMode audio是否force mute,true:force mute,false:auto mute
      audioFifo audio 水位值
      N audio 采样率fs 计算值 N ((N/Cts)*TmdsClk = fs * 128)
      Cts audio 采样率fs 计算值 Cts
      TmdsClk audio 采样率fs 计算值 TmdsClk

    5.2. hdmirx echo

    功能 读取SRAME里的EDID数据
    命令 echo [command] [port] [size] > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    参数说明 command:readedid ;port:0 ; size:256
    举例 echo readedid 0 256 > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    功能 拉低拉高Hotplug
    命令 echo [command] [port] [bHigh] > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    参数说明 command:sethpg ;port:0 ; bHigh:1----拉高,0----拉低
    举例 echo sethpg 0 1 > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    功能 开启Auto Eq
    命令 echo [command] [port] [bOpen] > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    参数说明 command:setautoeq ;port:0 ; bOpen:1----开启,0----关闭
    举例 echo setautoeq 0 1 > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    功能 发送Cec 指令
    命令 echo [command] [port] [timeout] [retrycount] [datacount] [data] > /proc/mi_modules/mi_hdmirx/mi_hdmirx0
    参数说明 command:sendcecmsg ;port:0 ;timeout:100 ; retrycount: 重发次数;datacount:指令数量;data:指令内容
    举例 echo sendcecmsg 0 100 4 5 0x5f 0x84 0x10 0x00 0x05 > /proc/mi_modules/mi_hdmirx/mi_hdmirx0