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接口层 --- 硬件接口的主要内容,如果未能解决你的问题,请参考以下文章