diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..651e02cef6e623d3385eb4c83d633d73e141cd56 --- /dev/null +++ b/.gitee/ISSUE_TEMPLATE.zh-CN.md @@ -0,0 +1,11 @@ +### 该问题是怎么引起的? + + + +### 重现步骤 + + + +### 报错信息 + + diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..86dd358d3c204cd20eb207d5b1db7582f3632eea --- /dev/null +++ b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md @@ -0,0 +1,12 @@ +### 相关的Issue + + +### 原因(目的、解决的问题等) + + +### 描述(做了什么,变更了什么) + + +### 测试用例(新增、改动、可能影响的功能) + + diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000000000000000000000000000000000000..e454a52586f29b8ce8a6799163eac1f875e9ac01 --- /dev/null +++ b/LICENSE @@ -0,0 +1,178 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/README.md b/README.md index 39328b529f64e70b0ac4e6506d075f7c182a6905..b7afe52e770f59153d17be9e4f814cfdd6823acd 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,213 @@ # drivers_interface -#### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} +## 简介 -#### 软件架构 -软件架构说明 +该仓库用于管理各模块HDI接口定义,接口定义使用IDL语言描述并以.idl文件形式保存。HDI接口使用语义化版本号定义,接口定义需要尽可能保持稳定,变更需要在对应SIG会议讨论后再实施。 +IDL语法参考: [LINK](https://developer.harmonyos.com/cn/docs/documentation/doc-references/idl-file-structure-0000001050722806) -#### 安装教程 -1. xxxx -2. xxxx -3. xxxx +**图 1** HDI原理图 -#### 使用说明 +![](figures/hdi-schematic.png) -1. xxxx -2. xxxx -3. xxxx +使用IDL描述接口并输出.idl文件后,通过hdi-gen工具可以以.idl为输入,生成C/C++语言的函数接口、客户端与服务端IPC相关过程代码,开发者只需要基于生成的ifoo.h函数接口实现具体服务功能即可。代码生成与编译功能已经集成在`//drivers/adapter/uhdf2/hdi.gni`编译模板,基于该编译模板编写.idl文件的BUILD.gn就可以简单的生成客户端、服务代码并编译为共享库。 -#### 参与贡献 +## 目录 -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +``` +├── README.en.md +├── README.md +├── sensor #sensor HDI 接口定义 +│   └── v1_0 #sensor HDI 接口 v1.0版本定义 +│   ├── BUILD.gn #sensor idl文件编译脚本 +│   ├── ISensorCallback.idl #sensor callback 接口定义idl文件 +│   ├── ISensorInterface.idl #sensor interface 接口定义idl文件 +│   └── SensorTypes.idl #sensor 数据类型定义idl文件 +├── audio #audio HDI 接口定义 +│   └── ... +├── camera #camera HDI接口定义 +├── codec #codec HDI接口定义 +├── display #display HDI接口定义 +├── format #format HDI接口定义 +├── input #input HDI接口定义 +├── misc #misc HDI接口定义 +├── usb #usb HDI接口定义 +└── wlan #wlan HDI接口定义 +``` +## 使用说明 -#### 特技 +1. 使用HDI语法编写 .idl 文件 -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) + - 参考上节目录结构创建对应模块/版本接口目录,初始版本定义为v1_0, 如 `drivers/interface/foo/v1.0/` + + - 定义接口 IFoo.idl, + ``` + package Hdi.Foo.V1_0; + + import Foo.V1_0.IFooCallback; + import Foo.v1_0.MyTypes; + + interface IFoo { + Ping([in] String sendMsg, [out] String recvMsg); + + GetData([out] struct FooInfo info); + + SendCallbackObj([in] IFooCallback cbObj); + } + ``` + - 如果interface中用到了自定义数据类型,将自定义类型定义到MyTypes.idl + ``` + package Hdi.Foo.V1_0; + + enum FooType { + FOO_TYPE_ONE = 1, + FOO_TYPE_TWO, + }; + + struct FooInfo { + unsigned int id; + String name; + enum FooType type; + }; + ``` + - 如果需要从服务端回调可以端,可以定义callback接口类IFooCallback.idl + ``` + package Foo.V1_0; + + [callback] interface IFooCallback { + PushData([in] String message); + } + ``` + +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 + package = "Foo.V1_0" # 包名,必须与idl路径匹配 + module_name = "foo" # module_name控制dirver文件中驱动描 述符(struct HdfDriverEntry)的moduleName + sources = [ # 参与编译的idl文件 + "IFoo.idl", # 接口idl + "IFooCallback.idl", # 用于回调的idl + "MyTypes.idl", # 自定义类型idl + ] + language = "cpp" # 控制idl生成c或c++代码 可选择`c`或`cpp` + } + ``` + +1. 实现 HDI服务 + + 在上述步骤中idl编译后将在out目录`out/[product_name]/gen/drivers/interfaces/foo/v1_0`生成中间代码, + + - 实现HDI服务接口 + + 基于自动成的`foo_interface_service.h`,实现其中的服务接口,相关源码编译为FooService.z.so。 + + 实现服务业务接口: + ``` + namespace Hdi { + namespace Foo { + namespace V1_0 { + + class FooService : public IFoo { //继承接口类,并重写接口 + public: + virtual ~FooService() {} + + int32_t Ping(const std::string& sendMsg, std::string& recvMsg) override; + int32_t FooService::GetData(FooInfo& info) override; + int32_t FooService::SendCallbackObj(const sptr& cbObj) override; + }; + + } // V1_0 + } // Foo + } // Hdi + ``` + 除了服务本身的接口,还需要实现对应的服务实例化接口: + ``` + #ifdef __cplusplus + extern "C" { + #endif /* __cplusplus */ + + Hdi::Foo::V1_0::IFooInterface *FooInterfaceServiceConstruct(); + + void FooInterfaceServiceRelease(Hdi::Foo::V1_0::IFooInterface *obj); + + #ifdef __cplusplus + } + #endif /* __cplusplus */ + ``` + + - 实现驱动入口 + + HDI服务发布是基于用户态HDF驱动框架,所以需要实现一个驱动入口。驱动实现代码参考已经在out目录中生成,如`out/gen/xxx/foo_interface_driver.cpp`,可以根据业务需要直接使用该文件或参考该文件按业务需要重新实现。 + 然后将驱动入口源码编译为`foo_driver.z.so`(该名称无强制规定,与hcs配置中配套即可)。 + +1. 发布服务 + + 在产品hcs配置中声明HDI服务,以标准系统Hi3516DV300单板为例,HDF设备配置路径为`vendor/hisilicon/Hi3516DV300/hdf_config/uhdf/device_info.hcs`,在其中新增以下配置: + ``` + fooHost :: host { + hostName = "fooHost"; + priority = 50; + fooDevice :: device { + device0 :: deviceNode { + policy = 2; + priority = 100; + preload = 2; + moduleName = "libfoo_driver.z.so"; + serviceName = "foo_service"; + } + } + } + ``` + +1. 调用HDI服务 + + - 客户端在BUILD.gn中增加依赖`//drivers/interface/foo/v1.0:libfoo_client_v1.0"` + + - 在代码中调用HDI接口(以CPP为例) + ``` + #include + + int WorkFunc(void) { + sptr foo = Hdi::Foo::V1_0::Foo::Get(); // 使用Foo对象的内置静态方法获取该服务客户端实例 + if (foo == nullptr) { + // hdi service not exist, handle error + } + + foo->Bar(); // do interface call + } + ``` + 如果服务存在多实例可以通过指定实例名称的方法获取对应实例`Hdi::Foo::V1_0::Foo::GetInstance(const std::string& serviceName)`; + +## 约定 + +1. idl 文件命名规则 + + - idl 文件以大驼峰命名,与接口名称保持一致,一般以字母‘I’开头。 + - 接口描述文件以`.idl`作为后缀。 + +1. 接口命名规则 + + | 类型 | 命名风格 | + | ----- | ------- | + | 类类型,结构体类型,枚举类型,联合体类型等类型定义,包名 | 大驼峰 | + | 方法 | 大驼峰 | + | 函数参数,类、结构体和联合体中的成员变量 | 小驼峰 | + | 宏,常量(const),枚举值 | 全大写,下划线分割 | + +1. 接口版本号命名规则 + + HDI接口版本号使用语义化版本号定义,即[major].[minor]。major版本号不同表示接口间不兼容;major版本号相同,但是minor版本不同的接口表示相互兼容,这种情况下不允许修改以前接口的接口名称、参数类型/个数、返回值类型/个数。 + +## 相关仓 + +[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) + + +[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) + + +[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral/blob/master/README_zh.md) \ No newline at end of file diff --git a/figures/hdi-schematic.png b/figures/hdi-schematic.png new file mode 100644 index 0000000000000000000000000000000000000000..af182c0b756726cff3f588ac4ec7b93db6eb9cb5 Binary files /dev/null and b/figures/hdi-schematic.png differ