在討論了不少基本概念後,在這裡小結一下 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