电子罗盘HAL层分析

文件位置:hardware/msm7k/libsensors/akmSensors.cpp

         这里分析过程主要关注ioctl中数据流向,其他的可以根据一般的hal层分析方法进行学习。

         HAL层的框架文件是xxsensor.cpp和sensors.c,主要是针对sensors.h(谷歌定义的抽象类)的具体实现,并通过继承的机制实现了各种sensor的多态。

4.1关于sensors.c

首先,分析的是sensor_module_t类型的HAL_MODULE_INFO_SYM,该结构体类型有两个域common和get_sensor_list,其中common域中id是用来寻找模块匹配的,methods是通过定义的senosr_module_method来实现的。

Get_seonsor_list域是通过定义的sensors__get_sensors_list来实现的

然后,senosr_module_method具体实现在本文件中完成,主要是枚举了自定义的sensor_t数组ssensorlists[],返回了数组的大小

最后,sensors__get_sensors_list结构体也是在本文件中完成,该结构体包含一个open域,通过定义的open_sensors函数来实现的。

open_sensors函数通过调用xxsensor.cpp文件中的init_sensors来完成初始化

4.2 关于xxsensor.cpp

这里主要是构建了sensor_poll_context_t类和实现init_sensors函数

首先,关于sensor_poll_context_t

第一个域固定为sensor_poll_device_t,作为c++继承在c语言上的实现,继承了该类型

然后定义了构造函数和析构函数,公有成员函数activate,poll,set_delay,

注意:该类是独立的,是通过init_sensors中的调用开始执行的

然后,关于init_sensors

在初始化函数中首先就是将新建一个上面的类,(new实现)。然后针对dev的device域进行填充。

dev->device.common.tag =HARDWARE_DEVICE_TAG;

dev->device.common.version = 0;

dev->device.common.module =const_cast<hw_module_t*>(module);

dev->device.common.close = poll__close;

dev->device.activate = poll__activate;

dev->device.setDelay = poll__setDelay;

dev->device.pll = poll__poll;

static int poll__activate函数实现通过继承自定义的sensor_poll_device_t来实现的。具体到每个akmsensor具体实现可以看其派生的akmSensors.cpp文件中的类。

4.3 关于akmSensors.cpp

         该文件主要是akmsensor类的实现。

首先,通过调用ECS_IOCTL_APP_MVFLAG, ECS_IOCTL_APP_MFLAG在构造函数中关掉设备

然后,需要注意的是结合初始化过程中注意函数的调用关系。

如: xxsensor.cpp中的actvate成员调用akmSensors.cpp中的enable

xxsensor.cpp中的setDelay成员调用akmSensors.cpp中的setDelay

其中setDelay中返回调用update_delay的数据,在update_delay中调用

ECS_IOCTL_APP_SET_DELAY设置延时。

xxsensor.cpp中的pollEvents成员调用akmSensors.cpp中的readEvents

其中readEvents中对符合类型的上报数据调用ProcessEvents进行处理

4.4小结

该层通过ioctl命令读写的数据流都是向kernel层发出的,控制命令应当和kernel层中的ioctl相互对应,从而实现层间的数据流向。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android TIF (TV Input Framework) HAL是Android系统中专门用于电视输入设备的HAL,它提供了与电视输入设备交互的接口。本文将从以下几个方面对Android TIF HAL进行分析: 1. TIF HAL的结构 TIF HAL的结构主要包括以下几个部分: - TIF HAL接口:包含了TIF HAL与上应用交互的接口,包括初始化、搜索电视节目、设置电视节目等接口。 - TIF HAL实现:包含了TIF HAL的具体实现,与具体的电视输入设备相关。 - TIF HAL框架:包含了TIF HAL框架代码,用于管理TIF HAL的实现。 2. TIF HAL的初始化 TIF HAL的初始化主要包括以下几个步骤: - 加载TIF HAL库:系统在启动时会自动加载TIF HAL库。 - 查找TIF HAL接口:系统通过dlsym函数查找TIF HAL接口。 - 初始化TIF HAL实现:系统调用TIF HAL接口中的初始化函数初始化TIF HAL实现。 3. TIF HAL与电视输入设备的交互 TIF HAL与电视输入设备的交互主要包括以下几个步骤: - 搜索电视节目:应用调用TIF HAL接口中的搜索电视节目函数,TIF HAL实现会向电视输入设备发送搜索电视节目的指令,并接收电视输入设备返回的电视节目信息。 - 设置电视节目:应用调用TIF HAL接口中的设置电视节目函数,TIF HAL实现会向电视输入设备发送设置电视节目的指令,并等待电视输入设备返回设置结果。 4. TIF HAL的实现 TIF HAL的具体实现与电视输入设备相关,不同的电视输入设备需要实现不同的TIF HAL。TIF HAL的实现需要遵循Android HAL的规范,包括实现HAL接口、定义HAL结构体等。 总的来说,Android TIF HAL是一个用于电视输入设备的HAL,它提供了与电视输入设备交互的接口,其具体实现与电视输入设备相关。在使用Android TIF HAL时,需要遵循Android HAL的规范,并根据实际的电视输入设备进行相应的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值