From 3b755d11584f6cfb56a9c3f92595b753d5563cc5 Mon Sep 17 00:00:00 2001
From: king_he <6384784@qq.com>
Date: Thu, 12 May 2022 11:13:22 +0000
Subject: [PATCH] update
zh-cn/device-dev/driver/driver-platform-hdmi-develop.md. Signed-off-by:
king_he <6384784@qq.com>
---
.../driver/driver-platform-hdmi-develop.md | 114 +++++++++---------
1 file changed, 56 insertions(+), 58 deletions(-)
diff --git a/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md b/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md
index 83f705b231..e5ba8f5244 100755
--- a/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md
+++ b/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md
@@ -5,19 +5,17 @@
### 功能简介
-HDMI(High Definition Multimedia Interface),即高清多媒体接口,主要用于DVD、机顶盒等音视频source到TV、显示器等Sink设备的传输。
+HDMI(High Definition Multimedia Interface),即高清多媒体接口,是Hitachi、Panasonic、Philips、Silicon Image、Sony、Thomson、Toshiba共同发布的一款音视频传输协议,主要用于DVD、机顶盒等音视频source到TV、显示器等Sink设备的传输。HDMI传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。
### 基本概念
-HDMI是Hitachi、Panasonic、Philips、Silicon Image、Sony、Thomson、Toshiba共同发布的一款音视频传输协议。传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。
-
- TMDS(Transition Minimized Differential signal):过渡调制差分信号,也被称为最小化传输差分信号,用于发送音频、视频及各种辅助数据。
- DDC(Display Data Channel):显示数据通道,发送端与接收端可利用DDC通道得知彼此的发送与接收能力,但HDMI仅需单向获知接收端(显示器)的能力。
- CEC(Consumer Electronics Control):消费电子控制,该功能应该能够在连接HDMI的发送设备与接收设备之间实现交互操作。
-- FRL(Fixed Rate Link):TMDS 的架构进行讯号传输时,最高带宽可达 18Gbps,而 FRL 模式的带宽则提升到 48 Gbps。
+- FRL(Fixed Rate Link):TMDS 的架构进行讯号传输时,最高带宽可达18Gbps,而 FRL 模式的带宽则提升到48Gbps。
- HDCP(High-bandwidth Digital Content Protection):即高带宽数字内容保护技术,当用户对高清晰信号进行非法复制时,该技术会进行干扰,降低复制出来的影像的质量,从而对内容进行保护。
@@ -85,57 +83,57 @@ struct HdmiCntlrOps {
| 函数成员 | 入参 | 出参 | 返回值 | 功能 |
| ------------------------ | ------------------------------------------------------------ | -------------------------------------- | ------------------ | -------------------------------------------------- |
-| hardWareInit | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | 初始化HDMI硬件 |
-| hardWareStatusGet | **cntlr**: 结构体指针,核心层HDMI控制器;
| **status**:HDMI硬件状态 ; | 无 | 获取HDMI当前硬件状态 |
-| controllerReset | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | 复位HDMI控制器 |
-| hotPlugStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔状态 | 获取HDMI热插拔状态 |
-| hotPlugInterruptStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 |
-| lowPowerSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 |
-| tmdsModeSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**mode**:TMDS模式 | 无 | 无 | 设置TMDS模式 |
-|tmdsConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**mode**: TMDS参数|无|HDF_STATUS相关状态|配置TMDS参数|
-|infoFrameEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**enable**: bool,使能/去使能|无|无|使能/去使能infoFrame|
-|infoFrameSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**data**: infoFrame数据
**len**:数据长度|无|HDF_STATUS相关状态|发送infoFrame|
-|cecMsgSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**msg**: CEC消息|无|HDF_STATUS相关状态|发送CEC消息|
-|audioPathEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio通路|
-|audioPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: 配置信息|无|无|设置audio通路配置信息|
-|phyOutputEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能物理层输出状态|
-|phyOutputSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**: 配置信息|无|无|设置物理层配置信息|
-|blackDataSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|设置黑屏|
-|videoMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能video静音|
-|videoPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**attr**: 配置信息|无|无|设置viedo通路配置信息|
-|audioMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio静音|
-|avmuteSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能声音图像消隐|
-|ddcTransfer|**cntlr**: 结构体指针,核心层HDMI控制器;
**ddcCfg**:DDC配置参数|**ddcCfg**:DDC配置参数|HDF_STATUS相关状态|读写DDC数据|
-|scdcSourceScrambleGet|**cntlr**: 结构体指针,核心层HDMI控制器;|无|bool,加扰状态|获取source端的加扰状态|
-|scdcSourceScrambleSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能source端的加扰|
-|frlEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能FRL|
-|audioNctsSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:N/CTS配 置参数|无|HDF_STATUS相关状态|设置audio的N/CTS信息|
-|frlTrainingConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:FRL Traning配置参数|无|无|设置FRL Traning配置信息|
-|frlTrainingStart|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|开始FRL Traning流程|
-|frlGetTriningRslt|**cntlr**: 结构体指针,核心层HDMI控制器;|**rslt**:FRL Traning结果|无|获取FRL Traning结果|
-|hdcpRegInit|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|初始化HDCP流程相关的寄存器|
-|hdcpGenerateAksvAndAn|**cntlr**: 结构体指针,核心层HDMI控制器;|无|HDF_STATUS相关状态|HDCP流程中生成aksv和an|
-|hdcpOptReg|**cntlr**: 结构体指针,核心层HDMI控制器;
**type**: 操作类型
**data**: 寄存器数据
**len**: 数据长度|**data**: 寄存器数据|HDF_STATUS相关状态|HDCP流程中读写相关寄存器|
-|hdrTimerSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: timer配置信息|无|无|设置HDR相关的timer配置信息|
+| hardWareInit | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | 无 | 初始化HDMI硬件 |
+| hardWareStatusGet | **cntlr**: 结构体指针,核心层HDMI控制器
| **status**:HDMI硬件状态 ; | 无 | 获取HDMI当前硬件状态 |
+| controllerReset | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | 无 | 复位HDMI控制器 |
+| hotPlugStateGet | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | bool: HDMI热插拔状态 | 获取HDMI热插拔状态 |
+| hotPlugInterruptStateGet | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | bool: HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 |
+| lowPowerSet | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 |
+| tmdsModeSet | **cntlr**: 结构体指针,核心层HDMI控制器
**mode**:TMDS模式 | 无 | 无 | 设置TMDS模式 |
+| tmdsConfigSet | **cntlr**: 结构体指针,核心层HDMI控制器
**mode**: TMDS参数 | 无 | HDF_STATUS相关状态 | 配置TMDS参数 |
+| infoFrameEnable | **cntlr**: 结构体指针,核心层HDMI控制器
**infoFrameType**: packet类型
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能infoFrame |
+| infoFrameSend | **cntlr**: 结构体指针,核心层HDMI控制器
**infoFrameType**: packet类型
**data**: infoFrame数据
**len**:数据长度 | 无 | HDF_STATUS相关状态 | 发送infoFrame |
+| cecMsgSend | **cntlr**: 结构体指针,核心层HDMI控制器
**msg**: CEC消息 | 无 | HDF_STATUS相关状态 | 发送CEC消息 |
+| audioPathEnable | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能| 无 | 无 | 使能/去使能audio通路 |
+| audioPathSet | **cntlr**: 结构体指针,核心层HDMI控制器
**config**: 配置信息 | 无 | 无 | 设置audio通路配置信息 |
+| phyOutputEnable | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能物理层输出状态 |
+| phyOutputSet | **cntlr**: 结构体指针,核心层HDMI控制器
**cfg**: 配置信息 | 无 | 无 | 设置物理层配置信息 |
+| blackDataSet | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | 无 | 设置黑屏 |
+| videoMuteEnable | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能video静音 |
+| videoPathSet | **cntlr**: 结构体指针,核心层HDMI控制器
**attr**: 配置信息| 无 | 无 | 设置viedo通路配置信息 |
+|audioMuteEnable | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能audio静音 |
+| avmuteSet | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能| 无 | 无 | 使能/去使能声音图像消隐 |
+| ddcTransfer | **cntlr**: 结构体指针,核心层HDMI控制器
**ddcCfg**:DDC配置参数 |**ddcCfg**:DDC配置参数 |HDF_STATUS相关状态 | 读写DDC数据 |
+| scdcSourceScrambleGet | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | bool,加扰状态 | 获取source端的加扰状态 |
+| scdcSourceScrambleSet | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | HDF_STATUS相关状态 | 使能/去使能source端的加扰 |
+| frlEnable | **cntlr**: 结构体指针,核心层HDMI控制器
**enable**: bool,使能/去使能 | 无 | HDF_STATUS相关状态 | 使能/去使能FRL |
+| audioNctsSet | **cntlr**: 结构体指针,核心层HDMI控制器
**cfg**:N/CTS配置参数 | 无 | HDF_STATUS相关状态 | 设置audio的N/CTS信息 |
+| frlTrainingConfigSet | **cntlr**: 结构体指针,核心层HDMI控制器
**cfg**:FRL Traning配置参数 | 无 | 无| 设置FRL Traning配置信息 |
+| frlTrainingStart | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | 无 | 开始FRL Traning流程 |
+| frlGetTriningRslt | **cntlr**: 结构体指针,核心层HDMI控制器 | **rslt**:FRL Traning结果 | 无 | 获取FRL Traning结果 |
+| hdcpRegInit | **cntlr**: 结构体指针,核心层HDMI控制器 | 无 | 无 | 初始化HDCP流程相关的寄存器 |
+|hdcpGenerateAksvAndAn |**cntlr**: 结构体指针,核心层HDMI控制器 | 无 | HDF_STATUS相关状态 | HDCP流程中生成aksv和an |
+| hdcpOptReg | **cntlr**: 结构体指针,核心层HDMI控制器
**type**: 操作类型
**data**: 寄存器数据
**len**: 数据长度 | **data**: 寄存器数据 | HDF_STATUS相关状态 | HDCP流程中读写相关寄存器 |
+| hdrTimerSet | **cntlr**: 结构体指针,核心层HDMI控制器
**config**: timer配置信息 | 无 | 无 | 设置HDR相关的timer配置信息 |
### 开发步骤
HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以及实例化HDMI控制器对象。
-- **实例化驱动入口:**
+- 实例化驱动入口:
- 实例化HdfDriverEntry结构体成员。
- 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。
-- **配置属性文件:**
+- 配置属性文件:
- 在device_info.hcs文件中添加deviceNode描述。
- 【可选】添加hdmi_config.hcs器件属性文件。
-- **实例化HDMI控制器对象:**
+- 实例化HDMI控制器对象:
- 初始化HdmiCntlr成员。
- 实例化HdmiCntlr成员HdmiCntlrOps方法集合。
-1. **实例化驱动入口**
+1. 实例化驱动入口
驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。
@@ -151,16 +149,16 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
.Release = HdmiAdapterRelease,
.moduleName = "adapter_hdmi_driver",//【必要】与HCS里面的名字匹配
};
- HDF_INIT(g_hdmiDriverEntry); //调用HDF_INIT将驱动入口注册到HDF框架中
+ HDF_INIT(g_hdmiDriverEntry); // 调用HDF_INIT将驱动入口注册到HDF框架中
```
-2. **配置属性文件**
+2. 配置属性文件
完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在hdmi_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层HdmiCntlr相关成员的默认值或限制范围有密切关系。
从第一个节点开始配置具体HDMI控制器信息,此节点并不表示某一路HDMI控制器,而是代表一个资源性质设备,用于描述一类HDMI控制器的信息。本例只有一个HDMI控制器,如有多个控制器,则需要在device_info文件增加deviceNode信息,以及在hdmi_config文件中增加对应的器件属性。
- - device_info.hcs 配置参考
+ - device_info.hcs配置参考
```c
root {
@@ -228,13 +226,13 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
}
```
-3. **实例化控制器对象**
+3. 实例化控制器对象
最后一步,完成驱动入口注册之后,要以核心层HdmiCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化HdmiCntlr成员HdmiCntlrOps(让用户可以通过接口来调用驱动底层函数),实现HdfDriverEntry成员函数(Bind,Init,Release)。
- 自定义结构体参考
- >  **说明:**
+ >  **说明:**
> 从驱动角度看,自定义结构体是参数和数据的载体。HDF会读取hdmi_config.hcs文件中的数值并通过DeviceResourceIface来初始化结构体成员,且其中一些重要数值(例如设备号、总线号等)也会被传递给核心层HdmiCntlr对象。
```c
@@ -316,17 +314,17 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
- Bind函数参考
**入参:**
- HdfDeviceObject 是整个驱动对外呈现的接口参数,具备 HCS 配置文件的信息
+ HdfDeviceObject是整个驱动对外呈现的接口参数,具备hcs配置文件的信息
**返回值:**
- HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义)
+ HDF_STATUS相关状态(下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义)
|状态(值)|状态描述|
|:-|:-|
|HDF_ERR_INVALID_OBJECT|控制器对象非法|
|HDF_ERR_INVALID_PARAM |参数非法|
|HDF_ERR_MALLOC_FAIL |内存分配失败|
- |HDF_ERR_IO |I/O 错误|
+ |HDF_ERR_IO |I/O错误|
|HDF_SUCCESS |传输成功|
|HDF_FAILURE |传输失败|
@@ -355,13 +353,13 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
cntlr->ops = &g_hdmiHostOps; //【必要】HdmiCntlrOps的实例化对象的挂载
cntlr->hdfDevObj = obj; //【必要】使HdfDeviceObject与HdmiCntlr可以相互转化的前提
obj->service = &cntlr->service; //【必要】使HdfDeviceObject与HdmiCntlr可以相互转化的前提
- ret = HdmiAdapterCntlrParse(cntlr, obj); //【必要】 初始化 cntlr. 失败则 goto __ERR;
+ ret = HdmiAdapterCntlrParse(cntlr, obj); //【必要】 初始化cntlr. 失败则 goto __ERR;
...
- ret = HdmiAdapterHostParse(host, obj); //【必要】 初始化 host对象的相关属性,失败则 goto __ERR;
+ ret = HdmiAdapterHostParse(host, obj); //【必要】 初始化host对象的相关属性,失败则 goto __ERR;
...
- ret = HdmiAdapterHostInit(host, cntlr); //厂商自定义的初始化,失败则 goto __ERR;
+ ret = HdmiAdapterHostInit(host, cntlr); // 厂商自定义的初始化,失败则 goto __ERR;
...
- ret = HdmiCntlrAdd(cntlr); //调用核心层函数 失败则 goto __ERR;
+ ret = HdmiCntlrAdd(cntlr); // 调用核心层函数 失败则 goto __ERR;
...
HDF_LOGD("HdmiAdapterBind: success.");
return HDF_SUCCESS;
@@ -375,7 +373,7 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
- Init函数参考
**入参:**
- HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息
+ HdfDeviceObject是整个驱动对外暴露的接口参数,具备hcs配置文件的信息
**返回值:**
HDF_STATUS相关状态
@@ -394,25 +392,25 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以
- Release 函数参考
**入参:**
- HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息
+ HdfDeviceObject是整个驱动对外暴露的接口参数,具备hcs配置文件的信息
**返回值:**
无
**函数说明:**
- 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。
+ 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给Release接口,当HDF框架调用Init函数初始化驱动失败时,可以调用Release释放驱动资源。
```c
static void HdmiAdapterRelease(struct HdfDeviceObject *obj)
{
struct HdmiCntlr *cntlr = NULL;
...
- cntlr = (struct HdmiCntlr *)obj->service;//这里有HdfDeviceObject到HdmiCntlr的强制转化,通过service成员,赋值见Bind函数
+ cntlr = (struct HdmiCntlr *)obj->service;// 这里有HdfDeviceObject到HdmiCntlr的强制转化,通过service成员,赋值见Bind函数
...
- HimciDeleteHost((struct HimciAdapterHost *)cntlr->priv);//厂商自定义的内存释放函数,这里有HdmiCntlr到HimciAdapterHost的强制转化
+ HimciDeleteHost((struct HimciAdapterHost *)cntlr->priv);// 厂商自定义的内存释放函数,这里有HdmiCntlr到HimciAdapterHost的强制转化
}
```
- >  **说明:**
+ >  **说明:**
> 所有强制转换获取相应对象的操作前提是在Init函数中具备对应赋值的操作。
--
GitLab