1 Star 0 Fork 334

sunxuejiao / drivers_interface

forked from OpenHarmony / drivers_interface 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

外设驱动HDI接口定义

简介

该仓库用于管理各模块HDI(Hardware Device Interface)接口定义,接口定义使用IDL语言描述并以·idl文件形式保存。

图 1 HDI原理图

使用IDL语法描述HDI接口并保存为.idl文件,.idl文件在编译过程中转换为C/C++语言的函数接口声明、客户端与服务端IPC相关过程代码,开发者只需要基于生成的ifoo.h函数接口实现具体服务功能即可。代码生成与编译功能已经集成在//drivers/hdf_core/adapter/uhdf2/hdi.gni编译模板,基于该编译模板编写idl文件的BUILD.gn就可以简单的生成客户端、服务端代码并编译为共享库。

目录

├── 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接口定义
├── face_auth                       #faceauth HDI接口定义
├── format                          #format HDI接口定义
├── input                           #input HDI接口定义
├── misc                            #misc HDI接口定义
├── pinauth                         #pinauth HDI接口定义
├── usb                             #usb HDI接口定义
├── fingerprint_auth                #fingerprintauth HDI接口定义
└── wlan                            #wlan HDI接口定义

使用说明

  1. 使用IDL语法编写 .idl 文件

    • 参考上节目录结构创建对应模块/版本接口目录,初始版本定义为v1_0,如 drivers/interface/foo/v1.0/

    • 定义接口 IFoo.idl

      package ohos.hdi.foo.v1_0;
      
      import ohos.hdi.foo.v1_0.IFooCallback;
      import ohos.hdi.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 ohos.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 ohos.hdi.foo.v1_0;
      
      [callback] interface IFooCallback {
          PushData([in] String message);
      }
  2. 编写 idl文件的BUILD.gn

    • 在上述drivers/interface/foo/v1.0/目录中添加BUILD.gn文件,内容参考如下:
      import("//drivers/hdf_core/adapter/uhdf2/hdi.gni")   # 编译idl必须要导入的模板
      hdi("foo") {                                # 目标名称,会生成两个so,分别对应 libfoo_client_v1.0.z.so 和 libfoo_stub_v1.0.z.so
          package = "ohos.hdi.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`
      }
  3. 实现 HDI 服务

    在上述步骤中idl编译后将在out目录out/[product_name]/gen/drivers/interfaces/foo/v1_0生成中间代码。

    • 实现HDI服务接口

      基于工具自动生成的foo_interface_service.h,实现其中的服务接口,并将相关源码编译为FooService.z.so。

      实现服务业务接口:

      namespace OHOS {
      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<IFooCallback>& cbObj) override;
      };
      
      } // namespace V1_0
      } // namespace Foo
      } // namespace Hdi
      } // namespace OHOS
    • 实现驱动入口

      HDI服务发布是基于用户态HDF驱动框架,所以需要实现一个驱动入口。驱动实现代码参考已经在out目录中生成,如out/gen/xxx/foo_interface_driver.cpp,可以根据业务需要直接使用该文件或参考该文件按业务需要重新实现。 然后将驱动入口源码编译为libfoo_driver.z.so(该名称无强制规定,与hcs配置中配套即可)。

  4. 发布服务

    在产品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";
                }
            }
        }
  5. 调用HDI服务

    • 客户端在BUILD.gn中增加依赖: //drivers/interface/foo/v1.0:libfoo_proxy_1.0"

    • 在代码中调用HDI接口(以CPP为例)

      #include <v1_0/ifoo_interface.h>
      
      int WorkFunc(void) {
          sptr<IFoo> foo = OHOS::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作为后缀。
  2. 接口命名规则

    类型 命名风格
    类、结构体、枚举、联合体等类型名,包名 大驼峰
    方法 大驼峰
    函数参数,类、结构体和联合体中的成员变量 小驼峰
    宏,常量(const),枚举值 全大写,下划线分割
  3. 接口版本号命名规则

    HDI接口版本号使用语义化版本号定义,即[major].[minor]。

    • major版本号不同表示接口间不兼容;
    • minor版本不同但是major版本号相同表示接口相互兼容,这种情况下不允许修改以前接口的接口名称、参数类型/个数、返回值类型/个数。

相关仓

驱动子系统

drivers_adapter

drivers_peripheral

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

简介

Peripheral driver HDI interface definition | 外设驱动HDI接口定义 展开 收起
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/sunxuejiao1/drivers_interface.git
git@gitee.com:sunxuejiao1/drivers_interface.git
sunxuejiao1
drivers_interface
drivers_interface
master

搜索帮助