From 4f057ccbe1ccb6f3ba2c365ba8eeb8883605409b Mon Sep 17 00:00:00 2001 From: yuanbo Date: Tue, 11 Jan 2022 15:50:24 +0800 Subject: [PATCH] fix: fix readme review comments Signed-off-by: yuanbo --- README_zh.md | 33 ++++++++++++++++++--------------- figures/hdi-schematic.png | Bin 21344 -> 17452 bytes 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/README_zh.md b/README_zh.md index 46bd384d..8df49594 100644 --- a/README_zh.md +++ b/README_zh.md @@ -2,7 +2,7 @@ ## 简介 -该仓库用于管理各模块HDI接口定义,接口定义使用IDL语言描述并以`·idl`文件形式保存。 +该仓库用于管理各模块HDI(Hardward Driver Interface)接口定义,接口定义使用IDL语言描述并以`·idl`文件形式保存。 IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/doc-references/idl-file-structure-0000001050722806) @@ -11,7 +11,7 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ ![](figures/hdi-schematic.png) -使用IDL语法描述HDI接口并保存为`.idl`文件后,hdi-gen工具可以将idl文件转换为C/C++语言的函数接口声明、客户端与服务端IPC相关过程代码,开发者只需要基于生成的ifoo.h函数接口实现具体服务功能即可。代码生成与编译功能已经集成在`//drivers/adapter/uhdf2/hdi.gni`编译模板,基于该编译模板编写idl文件的BUILD.gn就可以简单的生成客户端、服务代码并编译为共享库。 +使用IDL语法描述HDI接口并保存为`.idl`文件,`.idl`文件在编译过程中转换为C/C++语言的函数接口声明、客户端与服务端IPC相关过程代码,开发者只需要基于生成的`ifoo.h`函数接口实现具体服务功能即可。代码生成与编译功能已经集成在`//drivers/adapter/uhdf2/hdi.gni`编译模板,基于该编译模板编写`idl`文件的`BUILD.gn`就可以简单的生成客户端、服务代码并编译为共享库。 ## 目录 @@ -38,11 +38,11 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ ## 使用说明 -1. 使用HDI语法编写 .idl 文件 +1. 使用HDI语法编写 `.idl` 文件 - - 参考上节目录结构创建对应模块/版本接口目录,初始版本定义为v1_0, 如 `drivers/interface/foo/v1.0/` + - 参考上节目录结构创建对应模块/版本接口目录,初始版本定义为`v1_0`,如 `drivers/interface/foo/v1.0/` - - 定义接口 IFoo.idl, + - 定义接口 `IFoo.idl` ``` package Hdi.Foo.V1_0; @@ -57,7 +57,7 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ SendCallbackObj([in] IFooCallback cbObj); } ``` - - 如果interface中用到了自定义数据类型,将自定义类型定义到MyTypes.idl + - 如果`interface`中用到了自定义数据类型,将自定义类型定义到`MyTypes.idl` ``` package Hdi.Foo.V1_0; @@ -72,7 +72,7 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ enum FooType type; }; ``` - - 如果需要从服务端回调可以端,可以定义callback接口类IFooCallback.idl + - 如果需要从服务端回调,可以定义`callback`接口类`IFooCallback.idl` ``` package Foo.V1_0; @@ -81,8 +81,8 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ } ``` -1. 编写 idl BUILD.gn - - 在上述`drivers/interface/foo/v1.0/`目录中添加BUILD.gn文件,内容参考如下 +1. 编写 `idl`文件的`BUILD.gn` + - 在上述`drivers/interface/foo/v1.0/`目录中添加`BUILD.gn`文件,内容参考如下: ``` import("//drivers/adapter/uhdf2/hdi.gni") # 编译idl必须要导入的模板 hdi("foo") { # 目标名称,会生成两个so,分别对应 libfoo_client_v1.0.z.so 和 libfoo_stub_v1.0.z.so @@ -97,9 +97,9 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ } ``` -1. 实现 HDI服务 +1. 实现 HDI 服务 - 在上述步骤中idl编译后将在out目录`out/[product_name]/gen/drivers/interfaces/foo/v1_0`生成中间代码, + 在上述步骤中idl编译后将在out目录`out/[product_name]/gen/drivers/interfaces/foo/v1_0`生成中间代码。 - 实现HDI服务接口 @@ -146,7 +146,7 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ 1. 发布服务 - 在产品hcs配置中声明HDI服务,以标准系统Hi3516DV300单板为例,HDF设备配置路径为`vendor/hisilicon/Hi3516DV300/hdf_config/uhdf/device_info.hcs`,在其中新增以下配置: + 在产品hcs配置中声明HDI服务,以标准系统Hi3516DV300单板为例,HDF设备配置路径为`vendor/hisilicon/Hi3516DV300/hdf_config/uhdf/device_info.hcs`,在其中新增以下配置: ``` fooHost :: host { hostName = "fooHost"; @@ -165,7 +165,8 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ 1. 调用HDI服务 - - 客户端在BUILD.gn中增加依赖`//drivers/interface/foo/v1.0:libfoo_client_v1.0"` + - 客户端在BUILD.gn中增加依赖: + `//drivers/interface/foo/v1.0:libfoo_client_v1.0"` - 在代码中调用HDI接口(以CPP为例) ``` @@ -193,14 +194,16 @@ IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/ | 类型 | 命名风格 | | ----- | ------- | - | 类类型,结构体类型,枚举类型,联合体类型等类型定义,包名 | 大驼峰 | + | 类、结构体、枚举、联合体等类型名,包名 | 大驼峰 | | 方法 | 大驼峰 | | 函数参数,类、结构体和联合体中的成员变量 | 小驼峰 | | 宏,常量(const),枚举值 | 全大写,下划线分割 | 1. 接口版本号命名规则 - HDI接口版本号使用语义化版本号定义,即[major].[minor]。major版本号不同表示接口间不兼容;major版本号相同,但是minor版本不同的接口表示相互兼容,这种情况下不允许修改以前接口的接口名称、参数类型/个数、返回值类型/个数。 + HDI接口版本号使用语义化版本号定义,即[major].[minor]。 + - major版本号不同表示接口间不兼容; + - minor版本不同但是major版本号相同表示接口相互兼容,这种情况下不允许修改以前接口的接口名称、参数类型/个数、返回值类型/个数。 ## 相关仓 diff --git a/figures/hdi-schematic.png b/figures/hdi-schematic.png index af182c0b756726cff3f588ac4ec7b93db6eb9cb5..a063a67a9f3e1a1c9bf3e71048c2f757c0c47c7d 100644 GIT binary patch literal 17452 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 rcc9>2&;-K05aR!