资讯详情

传感器 HAL 层的设计与实现

文章目录

传感器 HAL 层的设计与实现

Linux驱动通常由访问硬件代码和业务逻辑代码组成。Linux内核提供了 只需调用标准的读写硬件方法Linux提供的标准函数即可。在这里插入图片描述Linux驱动的业务逻辑对制造商或个人保密。例如,缓冲区的设置等。GoogleAndroid在系统中添加一个HAL层的目的是为了满足不想开源的个人或者厂商的要求,该层位于系统库层和Linux内核层之间。对于想要开源的Linux可以驱动个人或制造商 把驱动业务的逻辑放在一边HAL层也可以放在驱动程序中。不想公开。Linux个人或制造商驱动代码,Linux驱动只是将数据传递给相关设备的角色。也就是说Linux只有操作设备寄存器的代码的代码,没有任何业务代码。HAL硬件层统一 调用接口,HAL层的编写需要遵循一定的规范。HAL 如下图所示。Android通过应用程序NDK访问HAL或直接访问系统库HAL中程序库,最后通过程序库访问驱动程序提供的设备节点,为程序库提供操作 作接口。

chat驱动硬件抽象层模块的重力传感器将被设计和实现。重力传感器的业务逻辑 在硬件抽象层中编辑。事实上,硬件抽象层也是Linux以系统库的形式提供,HAL与其像C在操作过程中需要加载当需要硬件抽象层时 通过程序库ID加载相应的程序库。硬件抽象层的工作流程如下图所示。 应用层传输传感器类型值到硬件抽象层,硬件抽象层完成相应传感器的配置和初始化,最最后,判断硬件抽象层的命令是打开或关闭。如果打开传感器,报告传感器数据,最后判断传感器是否动态,如果动态,再次报告传感器数量 报告传感器数据时,会有一定时间的延迟。若传感器关闭,则直接结束。当传感器不动态时,读取过程将直接结束。

Android框架相关数据结构如图所示: 结构分为三部分。

hw_module_tAndroid根据框架定义的结构体Android硬件抽象层的确定 义 , 被sensors_module_t封 装 , 作 为 重 力 传 感 器 模 块 的 数 据 结 构 。 而 且hw_module_t必须定义在结构体sensors_module_t开头。这个定义主要是为了扩展 以及接口的统一。系统可以自动调用的任何程序都有规范,例如main函数。HAL模块可以被Android系统是自动调用的,所以它也必须有一个固定的接口,但它不是一个函数,而是一个结构的变量名。该结构的设计如下:

/*初始化描述 HAL 模块信息的结构,结构体的变量名必须是 HAL_MODULE_INFO_SYM*/  struct sensors_module_t HAL_MODULE_INFO_SYM = {   .common = {    .id = SENSORS_HARDWARE_MODULE_ID,//初始化 HAL 模块的 ID 通 过这 ID 可以找到该 HAL 模块   .methods= &sensors_module_methods,//初始化 HAL 模块的 open 函数指针  };   .get_sensors_list = sensors_get_sensors_list  }; 
static struct hw_module_methods_t sensors_module_methods = {   .open = open_sensors  }; 

sensors_poll_device_t是对hw_device_t该结构代表传感器。主要包括打开传感器、关闭传感器、读取传感器数据等函数接口。

hw_module_methods_t提供了open_sensors上层调用方法。 首先在这个结构中使用sensors_module_t结构体通过结构体methods方法找到sensors_module_methods.open方法,open方法相当于HAL模块入口。 调用此函数,打开设备文件,初始化sensor_poll_context_t结构体。

open_sensors函数将在NDK调用函数。函数的最后一个参数被调用。HAL层初始化,但框架层调用时引入的变量类型是sensors_poll_context_t,这样就必须 要求sensor_poll_device_t必须为sensors_poll_context_t该函数的主要工作是初始化sensor_poll_device_t子结构。除了初始化一些必要的变量外, 传感器的初始操作也需要一些方法(本文中的一些方法)closeactivatesetDelaypoll

如下图所示:

版权声明:本文为qq_33487044原创文章CC 4.0 BY-SA版权协议,请附上原始来源链接和本声明。

本文链接:https://blog.csdn.net/qq_33487044/article/details/104113953

标签: hal880传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台