HAL接口层 --- 硬件接口

Posted Achillisjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HAL接口层 --- 硬件接口相关的知识,希望对你有一定的参考价值。

3, HAL接口层

所有的HAL moudle需要涉及如下三个关键结构体:

struct hw_module_t;
struct hw_module_methods_t;
struct hw_device_t;

用户一般需要基于上面这些结构体设计如下两个结构体:

struct xxx_module_t 
struct hw_module_t common;
.
;

自定义一个模块结构,HAL 规定不能直接使用hw_module_t结构,因此需要做这么一个继承。

struct xxx_device_t 
struct hw_device_t common;
/* attributes */
int fd;
/* supporting control APIs go here */
int (*xxx)(struct xxx_device_t *dev, int32_t x);
int (*yyy)(struct xxx_device_t *dev, int32_t x); 
;

自定义一个模块硬件接口,包含hw_device_t和支持的API操作,fd 表示设备文件描述符;

用户还需要定一个如下的MODULE_ID,HAL层可以根据这个ID 找到并加载这个HAL模块 ;

#define LED_HARDWARE_MODULE_ID "xxx"

最后用户需要定义一个如下的xxx_module_t变量:

static struct hw_module_methods_t xxx_module_methods = 
open: open_XXX
;


struct xxx_module_t HAL_MODULE_INFO_SYM = 
common: 
tag: HARDWARE_MODULE_TAG, 
version_major: 1,
version_minor: 0,
id: SENSORS_HARDWARE_MODULE_ID,
name: "XXX module",
author: "XXX",
•••

上面的模块变量名必须为HAL_MODULE_INFO_SYM,具体原因会在下面的章节中进行说明。

sensor模块结构定义如下:

struct sensors_module_t 
struct hw_module_t common;
    •••
int (*get_sensors_list)(struct sensors_module_t* module,
struct sensor_t const** list);
;

它被定义在文件中hardware/libhardware/include/hardware/sensors.h,

Sensor硬件接口结构定义如下:

struct sensors_poll_context_t 
// extension for sensors_poll_device_1, must be first
struct sensors_poll_device_1_ext_t device;// must be first
sensors_poll_context_t();
~sensors_poll_context_t();
int activate(int handle, int enabled);
int setDelay(int handle, int64_t ns);
•••

这个结构被定义在文件hardware/qcom/sensors.cpp中

它内嵌了一个结构struct sensors_poll_device_1_ext_t,这个结构的定义如下:

struct sensors_poll_device_1_ext_t 
union 
struct sensors_poll_device_1 aosp;
struct 
struct hw_device_t common;
int (*activate)(struct sensors_poll_device_t *dev,
int handle, int enabled);
int (*setDelay)(struct sensors_poll_device_t *dev,
int handle, int64_t period_ns);
••••

这个结构被定义在文件hardware/qcom/sensors_extention.h中;

structsensors_poll_device_1_ext_t device在这里就是一个struct xxx_device_t结构体的形式;

以上是关于HAL接口层 --- 硬件接口的主要内容,如果未能解决你的问题,请参考以下文章

第九章 硬件抽象层: HAL

硬件抽象层HAL

第九章-硬件抽象层:HAL

第九章:硬件抽象层:HAL

Android HAL硬件抽象层的原理与应用实例

Android HAL硬件抽象层的原理与应用实例