MTK平台下的sensor框架分析

上传人:枫** 文档编号:473930075 上传时间:2024-02-20 格式:DOCX 页数:13 大小:173.67KB
返回 下载 相关 举报
MTK平台下的sensor框架分析_第1页
第1页 / 共13页
MTK平台下的sensor框架分析_第2页
第2页 / 共13页
MTK平台下的sensor框架分析_第3页
第3页 / 共13页
MTK平台下的sensor框架分析_第4页
第4页 / 共13页
MTK平台下的sensor框架分析_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《MTK平台下的sensor框架分析》由会员分享,可在线阅读,更多相关《MTK平台下的sensor框架分析(13页珍藏版)》请在金锄头文库上搜索。

1、关于Android平台下的sensor介绍随着移动互联网技术的普及,人们对智能手机的需要也越来越多。而在众多智能手机操作系统之中,Android系统凭借着Google的技术支持及其开源特性在短时间内迅速占领大量的市场。传感器系统可以让智能手机的功能更加丰富多彩,所以传感器设备已经成为智能手机必备的组件之一。Android系统可以支持多种传感器,有的传感器已经在Android的框架中使用,大多数传感器由应用程序使用。本文基于MTK6582的平台上Android系统的传感器模块进行移植和开发,对Android系统框架和开发环境进行了简介,对Android系统的传感器模块的驱动层和硬件抽象层的开发进

2、行深入的分析与研究,概括并总结了传感器模块的工作原理和工作流程,对传感器的数据采集、数据传输、设备休眠和设备控制等方面进行了具体的设计与实现,最终在MTK6582的平台上实现了传感器模块的驱动层和硬件抽象层。Android系统可大致分为四部分,应用层、框架层、硬件抽象层、Linux驱动层,Android系统的传感器模块涉及到了Android系统的各个层次。应用层以Java为编程语言,一般为第三方开发的应用程序,也有一些是Google自己提供的应用程序,框架层是Google自己开发的,有着完整代码的体系,提供完善的接口,以便第三方开发应用程序。硬件抽象层是能以封闭源码形式提供硬件驱动模块,可以把

3、框架层与驱动层隔开,使得Android框架层的开发能在完全不考虑驱动程序的前提下进行。驱动层会根据硬件的设计对传感器进行初始化和寄存器的读写,使传感器正常工作。Android系统支持多种传感器,包括加速度传感器、磁力域传感器、方向传感器、陀螺仪、光线传感器、压力传感器、温度传感器、接近传感器,一般手机都支持加速度传感器、磁力域传感器、方向传感器、光线传感器、接近传感器,也有一些比较高端的手机支持陀螺仪。Android系统sensor框架图:联系人短信測览器相机榕架层ActivityManagerWindowManagerViewManaetPackageManagerTelephonyMana

4、ger标准库运存库SutLiceMnitaer|SQL|SSL|libc|卜QL诳|CoreLibrariesMdnFtamerworkFreeTypewebkitDaltikVirtual確件抽彖忌GraphicsAudioCameraGPS内核泾品示駆动按犍駆动WIFIE动蛊牙骡动我们着重讲解硬件抽象层(hardwareabstractallevelHAL)和内核层(linux内核)1. 硬件抽象层Android的HAL(硬件抽象层)是Google因应厂商“希望不公开源码”的要求下所推出的新观念,让Android不至过度依赖Linuxkernel,让Androidframework的开发能

5、在不考虑驱动程序的前提下进行发展。2、内核层Android的核心系统服务依赖于Linux2.6内核,包括各种设备的驱动,如显示驱动、键盘驱动、Flash内存驱动、照相机驱动(CameraDriver)、音频驱动(AudioDriver)、蓝牙驱动(BluetoothDriver)、WiFi驱动、BinderIPC驱动,以及PowerManagement(电源管理)、进程管理、内存管理、安全性管理和网络协议栈等操作系统的基本部件。1、HAL层的实现:343536373839404142434445464748495051525354555657585960616263646566nanespac

6、eand/ANDROID_SINGLETON_STATIC_INSTANCE(SensorDev让巳)SensorDevice:SensoDEuic:e():mSensorDevice(O),mSensorModule(O)status_terr=E_getmodule(SENSQRSHARDWAREMODULEID,noduletconst*)&mSensorModule);AL0GE_IF(err,couldn1!loadmodule()SENSORSARDWARE-MODULED,strerror(-err);if(mSensorModule)err=sensors_open(亡nsoM

7、odul巳-力comnoni,&mSensorDevice);ALOGE_IF(errf11couldntopendevicefornoduleJSs(SSs)11,SENSORS_HARDWARE_MODULE_IDJstrerror(-err);if(mSensorDevlce)sensortconst*listsensor_tconst*List;szecount=mSensModule-get_sensors_list(riSensorModuleJiSlist);mActtvationCountsetcapacity(count);Infomodel;for(stze_t1=0;iB

8、C:t:iwate(nen5oDevicelisti.ha0);当Android系统启动时,SystemManager启动SensorDevice服务frameworks/base/cmds/system_server/library/system_init.cpp1 property_get(system_init.startsensorservice,propBuf,1);2 if(strcmp(propBuf,1)=0)3 /Startthesensorservice4 SensorService:instantiate();5 SensorDevice()首先调用hw_get_modu

9、le()函数获得Sensor设备模块,调用sensors_open这个工具函数,打开Sensor设备模块(调用其methods-open函数指针),返回Sensor设备的操作接口(这些接口在HAL层实现),保存在mSensorDevice中471 /*convenienceAPIforopeningandclosingadevice*/472475476staticinlineintsensors_open(conststructhwmodulet*module,structsensorspolldevicet*device)returnmociuLe-methods-open(module,

10、SENSDRS-HARDWARE-POLL,(structhw_device_t*)device);477调用sensors_open函数,函数接着调用module-methods-open()方法,这个open方法在哪里实现了?如下:152 typedefstructhwnodulemethodst153 /*Openaspecificdevice*/154 int(*open)(conststructhwnodulet*nodule,constchar*id,155 structhwdevicet*device);156 一_157 hwmodulemethDctst;iAflJ.J.O1

11、19 staticstructhvcrnodulEPiethodst:sensors_module_methods=120 .open=03121 ;524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560staticintMEnwf3iwn3(conststructhw_module_t*module,structhw_device_t*device)intstatus=-EINVAL;ALOGDt11:nane:!June_,

12、name);constchar*name.structsensors_data_context_t*dev;dev=malloc(sizeof(*dev);memset(dev,0,sizeof(*dev);dev-events_fd=open_input(0_RD0NLY);if(dev-events_fddevice_io_fd=-1;if(dev-device_io_fddevice_xo_fd=open(HWM_SENSOR_DEV,O_RDONLY);ALOGD(”:devicehandle_func_,dev-device_io_fd);-dev-activate=hwm_acti

13、vate;dev-set_delay=hwm_set_delay;devpoll=hwm_poll;屋rdev-device.connontag=HARDWARE_DEVICE_TAG;dev-non.version=0;dev-deviceconnon.nodule=(structhw_moduLe_t*)module;dev-devicecommon.close=data_close;dev-deviceoctivate=contol_activate;dev-device.setDelay=controlsetDelay;dev-device.poll=data_poll;device=&dev-device.connon;Ldlus=u,昌七自七us;J调用Sensor模块的get_sensorsist方法获得传感器列表,在调用get_sensorsist之前,系统已初始化sSensorList结构体,说明系统中有哪些senso

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号