在討論了不少基本概念後,在這裡小結一下 HAL stub 的實作步驟。HAL stub 的起頭是「繼承 HAL 的 struct hw_module_t」,這是 HAL stub 的設計理念,除了讓架構的條理分明外,也容易做後續擴充與維護。以下改用實用上的習慣用語,小結一下 HAL stub 實作步驟,並提供一段例。
HAL Stub 實作步驟(Implementation)
1. 設計自已的wrapper data structure
* 編寫led.h
* 定義 struct led_module_t
* 框架提供的 struct hw_module_t 必須放在第一個 field、並取名為 common
* 請參考 hardware/hardware.h
2. led_module_t的意義
宣告初始化時期(new object)的 supporting API、在 constructor 裡會使用到。
3. 定義 led_control_device_t
宣告控制時期的 supporting API、在 Manager API 裡會使用到。設計上的細節在後續文章再做整理。
4. 每個 HAL stub 都要宣告 module ID
5. 宣告 Stub operations 並實作 callback functions
Stub 的 operations 結構符號名稱須取名為 HAL_MODULE_INFO_SYM、此符號名不可更改。
範例:led.h
#include <hardware/hardware.h> #include <fcntl.h> #include <errno.h> #include <cutils/log.h> #include <cutils/atomic.h> /*****************************************************************************/ struct led_module_t { struct hw_module_t common; }; struct led_control_device_t { struct hw_device_t common; /* supporting control APIs go here */ int (*set_on)(struct led_control_device_t *dev, int32_t led); int (*set_off)(struct led_control_device_t *dev, int32_t led); }; /*****************************************************************************/ #define LED_HARDWARE_MODULE_ID "led"實作上的細節在這裡不再多做說明,關於設計上的細節將另行整理。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw