HIDL

最近因為工作的關係常常在看這個

為了biweekly report 能更順利

來寫寫這篇好了

HIDL Hardware Interface Definition Language,是一種描述 Framework 到 HAL 之間 Interface的語言

存在的目的是為了希望往後Android在更新版本framework時,避免底層Vendor HAL Recompiling,減少大家往後Android版本升級的困難

這裡先簡介HIDL的語法,他基本上蠻像Java的,我第一次看到的時候還以為他是Java,下面是Android HIDL Introduction的example

另外Android原生的HAL都放在 hardware/interfaces,Vendor的就在Vendor/下

package + package name + version
如果你要用這個HAL的話,你就得必須 import / include 這個package,連版本數字都要跟著寫

interface 這個結構就蠻好懂得了,主要這裡都會放 member functions(methods),此外 interface 跟 Java中的 class,interface一樣可以inherit,不過通常 variable / enumeration會塞在另一個 Type.hal中

寫好之後來看看如何 makefile,在目錄下會有個 android.bp 類似取代 android.mk來生成相關的 CPP files,不過網站上沒有 android.bp的code就不貼惹,生成的文件如下XD

他會生出中間五個檔案,但實際上使用到的只有中間那個,其餘你是不需要手動 include 的,使用的方式是在你的 client、server 必須link shared library

另外會看到Client、Server,HIDL使用方式就是透過 Client registers service,透過 Hwservicemanager 會吐回 Service 的Proxy(Entry),接著就可以使用 Server implement 好的 methods 了

getService就在剛剛上述自動生成的文件裡會有這個function,call完就可以拿到IFoo這個interface了,上面分別C++ 跟 Java的語法

當然Server端也必須把端口建立起來不然怎麼連XD,好像都是用defaultPassthroughServiceImplementation 這個 function,建立起來之後 client、server 之間就被 HWbinder 連起來了

至於 Hwservicemanager我在 introduction 昨天有看到這個詞,這東西害我前幾天一直在 Debug…

先到這裡。之後再看看要寫啥,還要回去看看哪裡有沒有寫錯