android4.2.2---1. hal层与framework层的调用

1.HAL层
首先在hal层定义结构体sensors_module_t
#define SENSORS_HARDWARE_MODULE_ID "sensors"
  1. struct sensors_module_t HAL_MODULE_INFO_SYM = {
  2. common:
  3.     {
  4. tag:
  5.         HARDWARE_MODULE_TAG,
  6.         version_major: 1,
  7.         version_minor: 0,
  8. id:
  9.         SENSORS_HARDWARE_MODULE_ID,   //每一个hal层都有一个唯一的id
  10. name: "MEMSIC Sensors Module"
  11.         ,
  12. author: "MEMSIC Inc."
  13.         ,
  14. methods:
  15.         &__module_methods,
  16. dso:    NULL,
  17.         reserved: {0},
  18.     },
  19. get_sensors_list:
  20.     __get_sensors_list
  21. };
在__module_methods中定义了open方法
  1. static struct hw_module_methods_t __module_methods = {
  2. open:
  3.     __module_methods_open
  4. };




  1. static int __module_methods_open(const struct hw_module_t *module,
  2.                                  const char *id, struct hw_device_t **device)
  3. { 
  4.     struct sensors_poll_context_t *dev;
  5.     dev = (struct sensors_poll_context_t *)malloc(sizeof(*dev));
  6.     //初始化dev
  7.     dev->device.common.tag = HARDWARE_DEVICE_TAG;
  8.     dev->device.common.version = 0;
  9.     dev->device.common.module = (struct hw_module_t *)module;
  10.     dev->device.common.close = __common_close;
  11.     dev->device.activate = __control_activate;
  12.     dev->device.setDelay = __control_set_delay;
  13.     dev->device.poll = __data_poll;
  14.     //赋值给device  
  15.     //这儿有个问题: common是一个 struct hw_device_t(小) common;
  16.     //一会在framework中调用的需要的是 sensor_poll_t(大)
  17.     *device = &dev->device.common;
  18.     return res;
  19. }

2. framework层
framework/native/services/sensorservice/SensorDevice.cpp
  1. SensorDevice::SensorDevice()
  2.     : mSensorDevice(0),
  3.        mSensorModule(0)
  4. {
  5.     //fw层会根据唯一的id=SENSORS_HARDWARE_MODULE_ID来找到hal层的so,然后调用dlopen加载到内存中
  6.     //同时定义为 struct sensors_module_t* 的mSensorModule会指向找到的so中的sensor_module_t结构体
  7.     //这样就可以利用hal层定义的函数了
  8.     hw_get_module(SENSORS_HARDWARE_MODULE_ID, (hw_module_t const**)&mSensorModule);
  9.     //struct sensors_poll_device_t* mSensorDevice;
  10.     sensors_open(&mSensorModule->common, &mSensorDevice);
  11.     mSensorDevice->activate(mSensorDevice, list[i].handle, 0);
  12. }

  13. static inline int sensors_open(const struct hw_module_t* module,
  14.         struct sensors_poll_device_t** device) {
  15.     return module->methods->open(module,
  16.             SENSORS_HARDWARE_POLL, (struct hw_device_t**)device);
  17. }

sensors_poll_device_t
                        --> hw_device_t
                        --> 加一些函数指针
在hal层的open中:
       * device  =   & dev - > device . common ;
在framework层的sensor_open中
    module->methods->open(..., (struct hw_device_t**)device);
为什么这儿是将sensors_poll_device_t转为了hw_device_t,而不是直接传sensor_poll_device_t呢?
答: 我感觉这儿是为了屏蔽,即让hal层屏蔽fw层的无关代码. 
      当然也有可能是为了接口的统一.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: visualsvn-server-4.2.2-x64.msi是一个用于安装VisualSVN Server 4.2.2版本的安装程序。VisualSVN Server是一个Windows平台上的Subversion服务器包装器,旨在简化Subversion源代码管理系统的安装、部署和管理。 通过运行visualsvn-server-4.2.2-x64.msi,您可以轻松地将VisualSVN Server 4.2.2安装在64位Windows操作系统上。安装程序将为您创建一个Subversion服务器实例,该实例集成了图形用户界面管理工具,使您可以用简单的方式配置和管理服务器。同时,VisualSVN Server还提供了用于Windows身份验证和授权的现代化安全性,可确保您的源代码库和用户权限受到保护。 VisualSVN Server 4.2.2版本是稳定的和经过验证的版本,它具有改进的性能、稳定性和安全性。此版本包含修复了一些先前版本中发现的缺陷和问题,并添加了一些新功能和改进。通过使用visualsvn-server-4.2.2-x64.msi安装VisualSVN Server 4.2.2,您可以享受到这些改进和bug修复带来的好处,并为您的团队提供一个可靠、安全和易于管理的Subversion服务器解决方案。 总之,visualsvn-server-4.2.2-x64.msi是一个可用于安装VisualSVN Server 4.2.2版本的安装程序。这是一个强大且易于使用的Subversion服务器解决方案,适用于Windows操作系统,并提供了一系列功能来促进源代码管理和团队协作。 ### 回答2: visualsvn-server-4.2.2-x64.msi是一个Windows平台上的版本管理工具,用于管理和控制源代码的变更。该软件是VisualSVN Server的安装程序,完全免费,并提供了丰富的功能和工具集。 VisualSVN Server是基于Apache Subversion(简称SVN)的服务器端应用程序。它提供了一个直观的用户界面,可以方便地创建、管理和维护SVN存储库。该软件支持标准的SVN协议,可以与各种开发工具和集成开发环境(IDE)无缝集成。 通过VisualSVN Server,用户可以轻松地创建经过身份验证和加密的SVN存储库,以便团队成员可以共享和协同编辑源代码。它还提供了灵活的访问控制机制,可以细粒度地管理用户权限和权限组。 此外,VisualSVN Server提供了简单而强大的备份和还原功能,以及服务器监视和日志记录功能,可以方便地追踪和修复潜在的错误和问题。它还支持Windows活动目录和LDAP集成,使得用户管理更加方便。 在安装visualsvn-server-4.2.2-x64.msi之前,我们应该确保操作系统是64位版本,并且已经安装了最新的Microsoft Visual C++ Redistributable包。安装过程非常简单,只需双击.msi文件,并按照提示完成安装向导即可。 总而言之,visualsvn-server-4.2.2-x64.msi是一个强大而易于使用的版本控制工具,可以帮助团队成员协同开发和管理源代码,提高开发效率和质量。 ### 回答3: visualsvn-server-4.2.2-x64.msi是一个用于安装VisualSVN服务器的安装程序。VisualSVN是一个基于Subversion版本控制系统的服务器端软件。它提供了一个易于使用的界面,帮助用户建立和管理版本控制仓库,可以用于团队协作和软件开发项目。 安装visualsvn-server-4.2.2-x64.msi非常简单,只需双击运行该安装程序即可启动安装过程。用户需要首先阅读许可协议,并同意协议条件。随后,可以选择安装的目标文件夹以及存储库的位置。安装程序还提供了自定义网络配置的选项,可以根据需要进行调整。 一旦安装完成,VisualSVN服务器将自动启动,开始监听指定的网络端口。用户可以通过浏览器或者VisualSVN客户端工具进行访问和管理。VisualSVN服务器提供了强大的用户和权限管理功能,可以添加和删除用户,并对存储库进行细粒度的访问控制。 通过VisualSVN服务器,用户可以创建和管理存储库,每个存储库都可以包含项目的源代码和相关文件。用户可以使用Subversion客户端工具进行版本控制操作,例如添加、修改、删除文件,提交和更新代码等。VisualSVN服务器还提供了详细的日志记录和审计功能,方便团队成员跟踪和查看项目的历史记录。 总的来说,visualsvn-server-4.2.2-x64.msi是一个强大而易用的版本控制服务器软件安装程序,可以帮助团队更好地管理和协作开发项目,提高项目的质量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值