当前位置:   article > 正文

Android HIDL接口添加

Android HIDL接口添加

一.HIDL介绍

HIDL的全称是HAL interface definition language(硬件抽象层接口定义语言),是Android
Framework 与Android HAL之间的接口。HIDL 旨在用于进程间通信 (IPC),进程之间的通信
采用 Binder 机制。

二.HIDL 与AIDL 的对比

三.HIDL接口添加 

HIDL接口路径:

hardware\interfaces\imw\1.0\

路径下有两个文件:

  1. Android.bp
  2. IImwManager.hal

Android.bp:

  1. hidl_interface {
  2. name: "vendor.isolution.hardware.imw@1.0", //FQName 的全名
  3. root: "vendor.isolution.hardware", //定义好的 package root name
  4. //system_ext_specific: true,
  5. srcs: [
  6. "IImwManager.hal",
  7. ],
  8. interfaces: [
  9. "android.hidl.base@1.0", //编译过程中依赖的接口名称
  10. ],
  11. gen_java: true, //是否编译为 Java 使用的接口
  12. }

IImwManager.hal文件:

  1. package vendor.isolution.hardware.imw@1.0; // 当前package包名
  2. import IImwManagerClientCallback; // 导入其它package包
  3. import IUpdateEngineClientCallback;
  4. interface IImwManager // 定义一个interface
  5. {
  6. onCreate();
  7. onInitStart();
  8. onInitCompleted();
  9. onStart();
  10. onSystemAppStart();
  11. onBootanimationExit();
  12. onBootCompleted();
  13. onReboot();
  14. onRecovery();
  15. onSleep();
  16. onShutdown();
  17. };

HIDL生成的文件路径:

/out/soong/.intermediates/vendor/isolution/hardware/interfaces/imw/1.0/vendor.isolution.hardware.imw@1.0

编译后模块对应的文件:

vendor.isolution.hardware.imw@1.0.so

当 IHelloworld.hal 创建完成就可以创建对应的 HIDL 实现代码(Hidl Interface 和 service):

service.端java代码:

  1. import vendor.isolution.hardware.imw.V1_0.IImwManager; // 导入package包
  2. private IImwManager halManager = null;
  3. halManager.onCreate();
  4. halManager.onInitStart();
  5. halManager.onInitCompleted();
  6. halManager.onStart();
  7. halManager.onSystemAppStart();
  8. halManager.onBootanimationExit();
  9. halManager.onBootCompleted();
  10. halManager.onReboot();
  11. halManager.onRecovery();
  12. halManager.onSleep();
  13. halManager.onShutdown();

实现Hidl Interface:

hardware\interfaces\imw\1.0\default\ImwManager.h

  1. #ifndef VENDOR_ISOLUTION_HARDWARE_IMW_V1_0_IMWMANAGER_H_
  2. #define VENDOR_ISOLUTION_HARDWARE_IMW_V1_0_IMWMANAGER_H_
  3. #include <log/log.h>
  4. #include <android/log.h>
  5. #include <hardware/hardware.h>
  6. #include <hardware/fingerprint.h>
  7. #include <hidl/MQDescriptor.h>
  8. #include <hidl/Status.h>
  9. #include <vendor/isolution/hardware/imw/1.0/IImwManager.h>
  10. using ::vendor::isolution::hardware::imw::V1_0::IImwManager;
  11. using ::android::hardware::Return;
  12. using ::android::hardware::Void;
  13. using ::android::hardware::hidl_vec;
  14. using ::android::hardware::hidl_string;
  15. using ::android::sp;
  16. namespace vendor {
  17. namespace isolution {
  18. namespace hardware {
  19. namespace imw {
  20. namespace V1_0 {
  21. namespace implementation {
  22. struct ImwManager : public IImwManager {
  23. public:
  24. ImwManager();
  25. ~ImwManager();
  26. static IImwManager* getInstance();
  27. Return<void> setNotify(const sp<IImwManagerClientCallback>& clientCallback) override;
  28. Return<void> setNotifyUpdateEngine(const sp<IUpdateEngineClientCallback>& clientCallback) override;
  29. Return<void> onCreate() override;
  30. Return<void> onInitStart() override;
  31. Return<void> onInitCompleted() override;
  32. Return<void> onStart() override;
  33. Return<void> onSystemAppStart() override;
  34. Return<void> onBootanimationExit() override;
  35. Return<void> onBootCompleted() override;
  36. Return<void> onReboot() override;
  37. Return<void> onRecovery() override;
  38. Return<void> onSleep() override;
  39. Return<void> onShutdown() override;
  40. };
  41. } // namespace implementation
  42. } // namespace V1_0
  43. } // namespace imw
  44. } // namespace hardware
  45. } // namespace isolution
  46. } // namespace vendor

hardware\interfaces\imw\1.0\default\ImwManager.cpp

  1. #include <utils/Log.h>
  2. #include <log/log.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <sys/time.h>
  6. #include <dirent.h>
  7. #include <unistd.h>
  8. #include <string.h>
  9. #include <cutils/atomic.h>
  10. #include <cutils/properties.h> // for property_get
  11. #include <utils/misc.h>
  12. #include <stdio.h>
  13. #include <utils/threads.h>
  14. #include <fcntl.h>
  15. #include <dlfcn.h>
  16. #include <sys/shm.h>
  17. #include <signal.h>
  18. #include "ImwManager.h"
  19. namespace vendor {
  20. namespace isolution {
  21. namespace hardware {
  22. namespace imw {
  23. namespace V1_0 {
  24. namespace implementation {
  25. ImwManager::ImwManager() : mClientCallback(nullptr) {
  26. sInstance = this; // keep track of the most recent instance
  27. onCreate();
  28. }
  29. ImwManager::~ImwManager()
  30. {
  31. ALOGW("~ImwManager\n");
  32. }
  33. IImwManager* ImwManager::getInstance() {
  34. if (!sInstance) {
  35. sInstance = new ImwManager();
  36. }
  37. return sInstance;
  38. }
  39. Return<void> ImwManager::onCreate()
  40. {
  41. ALOGW("onCreate\n");
  42. return Void();
  43. }
  44. Return<void> ImwManager::onInitStart()
  45. {
  46. ALOGW("onInitStart\n");
  47. return Void();
  48. }
  49. Return<void> ImwManager::onInitCompleted()
  50. {
  51. ALOGW("onInitCompleted\n");
  52. return Void();
  53. }
  54. Return<void> ImwManager::onStart()
  55. {
  56. ALOGW("onStart\n");
  57. return Void();
  58. }
  59. Return<void> ImwManager::onSystemAppStart()
  60. {
  61. ALOGW("onSystemAppStart\n");
  62. return Void();
  63. }
  64. Return<void> ImwManager::onBootanimationExit()
  65. {
  66. ALOGW("onBootanimationExit\n");
  67. return Void();
  68. }
  69. Return<void> ImwManager::onBootCompleted()
  70. {
  71. ALOGW("onBootCompleted\n");
  72. return Void();
  73. }
  74. Return<void> ImwManager::onReboot()
  75. {
  76. ALOGW("onReboot\n");
  77. return Void();
  78. }
  79. Return<void> ImwManager::onRecovery()
  80. {
  81. ALOGW("onRecovery\n");
  82. return Void();
  83. }
  84. Return<void> ImwManager::onSleep()
  85. {
  86. ALOGW("onSleep\n");
  87. return Void();
  88. }
  89. Return<void> ImwManager::onShutdown()
  90. {
  91. ALOGW("onShutdown\n");
  92. return Void();
  93. }
  94. ImwManager *ImwManager::sInstance = nullptr;
  95. } // namespace implementation
  96. } // namespace V1_0
  97. } // namespace imw
  98. } // namespace hardware
  99. } // namespace isolution
  100. } // namespace vendor

添加rc文件:

rc 是 “runcom” 的缩写,这个术语最初来源于 Unix 系统,在早期的系统中使用了一个叫做 “runcom” 的目录,用于存放启动时需要运行的一些脚本和配置文件。

在实现了 serivce 和 impl 代码后需要添加 rc 文件,文件名为 vendor.isolution.hardware.imw@1.0-service.rc

  1. service imw-hal-1-0 /vendor/bin/hw/vendor.isolution.hardware.imw@1.0-service
  2. class hal
  3. user root
  4. group root media system graphics input bluetooth shell drmrpc media_rw audio

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/653348
推荐阅读
相关标签
  

闽ICP备14008679号