iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 8
0
  • Guide:
    • Treble 是什麼?
    • Treble 架構
    • HIDL 概述
    • HIDL 編碼規範
    • HIDL 中的 hidl-gen 使用
    • HIDL interface 和 package
    • HIDL import & inheritance
    • HIDL 實作

介紹

HIDL 代碼樣式類似於 Android 框架中的 C++ 代碼,
縮進 4 個空格,並且採用混用大小寫的文件名。
package 宣告、import 和文檔字符串與 Java 中的類似,只有些微差別。

下面針對 IFoo.hal 和 types.hal 的示例展示了 HIDL 代碼樣式,
並提供了指向每種樣式詳細信息的快速鏈接。

hardware/interfaces/foo/1.0/IFoo.hal

/*
 * (License Notice)
 */

package android.hardware.foo@1.0;

import android.hardware.bar@1.0::IBar;

import IBaz;
import IFooClientCallback;

/**
 * IFoo is an interface that…
 */
interface IFoo {

    /**
     * This is a multiline docstring.
     *
     * @return result 0 if successful, nonzero otherwise.
     */
     foo() generates (FooStatus result);

    /**
     * Restart controller by power cycle.
     *
     * @param bar callback interface that…
     * @return result 0 if successful, nonzero otherwise.
     */
    powerCycle(IBar bar) generates (FooStatus result);

    /** Single line docstring. */
    baz();


    /**
     * The bar function.
     *
     * @param clientCallback callback after function is called
     * @param baz related baz object
     * @param data input data blob
     */
    bar(IFooClientCallback clientCallback,
        IBaz baz,
        FooData data);

};

hardware/interfaces/foo/1.0/types.hal

/*
 * (License Notice)
 */

package android.hardware.foo@1.0;

/** Replied status. */
enum Status : int32_t {
    OK,
    /* invalid arguments */
    ERR_ARG,
    /* note, no transport related errors */
    ERR_UNKNOWN = -1,
};

struct ArgData {
    int32_t[20]  someArray;
    vec<uint8_t> data;
};

命名規範

函數名稱、變量名稱和文件名應該是描述性名稱;避免過度縮寫。
將首字母縮略詞視為字詞(例如,請使用 INfc,而非 INFC)。

目錄結構和文件命名

目錄結構應如下所示:

  • ROOT-DIRECTORY
    • MODULE
      • SUBMODULE(可選,可以有多層)
        • VERSION
          • Android.mk
          • IINTERFACE_1.hal
          • IINTERFACE_2.hal
          • IINTERFACE_N.hal
          • types.hal(可選)

其中:

  • ROOT-DIRECTORY 為
    • hardware/interfaces(如果是核心HIDL 軟件包)。
    • vendor/VENDOR/interfaces(如果是供應商軟件包),
      其中 VENDOR 指 SoC 供應商或原始設備製造商 (OEM) /原始設計製造商 (ODM)。
  • MODULE 應該是一個描述子系統的小寫字詞(例如 nfc)。如果需要多個字詞,請使用嵌套式
  • SUBMODULE。可以嵌套多層。
  • VERSION 應該與版本中所述的版本完全相同(major.minor)。
  • IINTERFACE_X 應該是含有 UpperCamelCase/ PascalCase 的接口名稱(例如 INfc),
    如接口名稱中所述。

例如:

  • hardware/interfaces
    • nfc
      • 1.0
        • Android.mk
        • INfc.hal
        • INfcClientCallback.hal
        • types.hal

其實底下還有一堆用法詳細說明,
但全部都列出來也太浪費時間看了,
通常都是有需要用到的時候在看就好。
所以下面有連結的部份,
有需要可以全部看完,大致上有個印象就好。
至於後面文章會以實際例子來說明,
讓我們看下去!


Reference:

Code Style Guide | Android Open Source Project


上一篇
[Day-07] Android HIDL (2) 概述
下一篇
[Day-09] Android HIDL (4) hidl-gen
系列文
Android Pie 底層開發學習心得30

尚未有邦友留言

立即登入留言