承日記「Android 的 HAL 技術, #6: 小結 HAL stub 實作步驟」與「Android 的 HAL 技術, #7: 取得 Proxy Object」。在了解基本的觀念,以及架構上的設計後,接著就可以開始實作 HAL Stub 了。以下是 LED Stub 的實作範例,將程式碼儲存為 led.c:
static struct hw_module_methods_t led_module_methods = { open: led_device_open }; const struct led_module_t HAL_MODULE_INFO_SYM = { common: { tag: HARDWARE_MODULE_TAG, version_major: 1, version_minor: 0, id: LED_HARDWARE_MODULE_ID, name: "Simple LED module", author: "The Mokoid Open Source Project", methods: &led_module_methods, } /* supporting APIs go here */ };
這段程式碼實作了圖1的設計, led_module_t 是 Stub 的主體結構(或稱為主類別),其符號名稱須取名為 HAL_MODULE_INFO_SYM,不可更改。任何的 Stub 主類別名稱都須命名為 HAL_MODULE_INFO_SYM。
幾個重要的欄位如下:
"Open" 是一個介面(interface),這意味著 HAL Stub 必須實作此介面,這個部份更是 HAL 的重點。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw