欢迎来到天天文库
浏览记录
ID:42577339
大小:498.47 KB
页数:11页
时间:2019-09-18
《Android Sensor传感器系统架构初探》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、AndroidSensor传感器系统架构初探分类:Android系统2010-10-1510:195438人阅读评论(16)收藏举报1.体系结构2.数据结构3.四大函数本文以重力感应器装置G-sensor为例探索Android的各层次结构。1.体系结构 Android的体系结构可分为4个层次。·第一层次 底层驱动层,包括标准Linux,Android核心驱动,Android相关设备驱动,G-sensor的设备驱动程序即存在于此·第二层次Android标准C/C++库,包括硬件抽象层,Android各底层库,本地库,JNI·
2、第三层次AndroidJavaFramwork框架层·第四层次Java应用程序本文重点关注硬件抽象层,JNI以及Framework。1.1硬件抽象层 硬件抽象层通过例如open(),read(),write(),ioctl(),poll()等函数调用的方式,与底层设备驱动程序进行交互,而这些函数调用是底层设备驱动程序事先准备好的。 用于交互的关键是文件描述符fd,fd通过open()打开G-sensor设备节点而得到,即fd=open("/dev/bma220",O_RDONLY);而/dev/bma220这个
3、设备节点是在底层设备驱动中注册完成的。 其他的函数调用如read(),write()等都通过该文件描述符fd对G-sensor设备进行操作。1.2JNI(JavaNativeInterface) JNI层可以认为是整个体系结构中的配角,概括地讲,它就完成了一项任务,既实现从C++语言到Java语言的转换。JNI层为JavaFramework层提供一系列接口,而这些接口函数的具体实现中,利用例如module->methods->open(),sSensorDevice->data_open(), sSensorDe
4、vice->poll()等回调函数与硬件抽象层进行交互。而这些open(),poll()回调函数在硬件抽象层中具体实现。1.3JavaFramework Framework层提供各种类和类的对象,可作为系统的守护进程运行,也可供上层应用程序的使用。 例如类SensorManager,它作为系统的守护进程在初始化的时候开始运行,其子类SensorThread中的子类SensorThreadRunnable通过sensors_data_poll()实现了对G-sensor数据的轮训访问,而sensors_data_p
5、oll()通过JNI层转换到硬件抽象层去具体实现poll()。2数据结构 一般境况下,硬件抽象层对硬件的描述都分为control和data两大类。2.1sensors_control_context_tstructsensors_control_context_t{ structsensors_control_device_tdevice; intfd;};structsensors_control_device_t{ structhw_device_tcommon; int(*open_data_sou
6、rce)(structsensors_control_device_t*dev); int(*activate)(structsensors_control_device_t*dev, inthandle,intenabled); int(*set_delay)(structsensors_control_device_t*dev,int32_tms); int(*wake)(structsensors_control_device_t*dev);};2.2sensors_data_context_tstruct
7、sensors_data_context_t{ structsensors_data_device_tdevice; intfd;};structsensors_data_device_t{ structhw_device_tcommon; int(*data_open)(structsensors_data_device_t*dev,intfd); int(*data_close)(structsensors_data_device_t*dev); int(*poll)(structsensors_d
8、ata_device_t*dev, sensors_data_t*data);}structhw_device_t{ uint32_ttag;uint32_tversion; structhw_module_t*module; i
此文档下载收益归作者所有