HIDL – 2

這篇是第二篇HIDL,介紹一些key word、少到不行的架構。

最近看相關的owner更新了一坨拉庫code,有點抖抖的阿…下半年不好過了,又不是很敢問別人。一樣應該會有很多錯,可以的話麻煩指正,不然被owner翻白眼更慘QQ

基本上每個Hardware interface都會被拆成兩個file,一個是interface.h另一個是type.hal,前者就是宣告下層hal提供出來給上層framework使用的method介面,後者則是在這些interface會用到的一些 enum, struct。


Keyword

package:  宣告當下.hal底下interface是所屬於哪一個package,client要用的時候必須include這個library,還需要標明version。

interface: 宣告hardwrae interface,類似c++, java中的class,收集methods,types用的,而call method的必定是client。

import:  導入其它package,這個syntax應該是學Java的 ,可以導入android原生、vendor自定義的package

extends: 這應該也是學Java的syntax,繼承(inherent)的概念,interface是可以繼承的。

oneway: 用在methods上的,如果methods有前置這個keyword,意味這method不會return any value跟不會被block。

generates: 用在methods上的,代表該method會return one non-primitive value, or more than one value,超過一個回傳參數或是非一般data type會生成一個synchronous callback function來做回傳的動作。

synchronous callback: HIDL method回傳參數用的callback ,由client端實作。

Asynchronous callbacks: 好像是把Interface做為參數用的,有點像interface裡還有一個interface,或是兩個interface連起得來的感覺,講的不是很清楚,因為我好像沒有用過XD。

 


User-defined data type

基本上有用 enum,struct,union,用法跟C++相同,就不多贅述了,我只也看過前兩個。

vec<T>: 一個vector的template,vector size可以變化。


client & server processes之間溝通(Inter-process Communication,IPC),在O板之前使用legacy HAL,O板為了兼容早期的版本提供了兩種 binderized and same-process (passthrough) modes來進行Framework & HAL的溝通。

後者會需要兩個部分,這兩個我就常看到了XD

interface-impl: interface methods implementation der地方,昨天好像打錯了,今天有去看一下XD

interface-service: 打開passthrough並將其註冊為binderizing,該 HAL implementation可以同時為 passthrough和binderizing。

service的部分多半會創建一個init.rc以便在開機的時候就啟動,讓client在之後要連線才不會找不到人。

這部份上次好像沒講。


hwservicemanager 

上一篇有說到這個詞,他是負責管理上述這些interface的一個manager(process),應該是在init.rc時會被create出來。

這個我一直沒時間看,有機會再說。