您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 12_Android的传感器系统
Android的传感器系统第一部分传感器系统综述第二部分传感器系统层次结构第三部分传感器系统的硬件抽象层第四部分传感器系统的使用Android的传感器系统第一部分传感器系统综述传感器(Sensor)系统可以让智能手机的功能更加丰富多彩,在Android系统中支持多种传感器。Android的Sensor系统涉及了Android的各个层次。Android系统支持多种传感器,有的传感器已经在Android的框架中使用,大多数传感器由应用程序来使用。第一部分传感器系统综述8SENSOR_TYPE_PROXIMITYTYPE_PROXIMITY接近7SENSOR_TYPE_TEMPERATURETYPE_TEMPERATURE温度6SENSOR_TYPE_PRESSURETYPE_PRESSURE压力5SENSOR_TYPE_LIGHTTYPE_LIGHT光线(亮度)4SENSOR_TYPE_GYROSCOPETYPE_GYROSCOPE陀螺3SENSOR_TYPE_ORIENTATIONTYPE_ORIENTATION方向2SENSOR_TYPE_MAGNETIC_FIELDTYPE_MAGNETIC_FIELD磁力域1SENSOR_TYPE_ACCELEROMETERTYPE_ACCELEROMETER加速度数值本地接口名称JAVA中的名称传感器第一部分传感器系统综述SensorsHardwareModuleSensorDriverSensorHardwareInterfaceKernelSpaceNativeFrameworkSensorJNI(android.hardware.SensorManager)JavaFrameworkSensorDriverSensorManagerJAVASensorClassSensorSensorEventSensorListenerSensorEventListener第一部分传感器系统综述Sensor系统的代码分布情况如下所示:1.Sensor的JAVA部分代码路径:frameworks/base/include/core/jave/android/hardware主要的代码为Sensor*.java2.Sensor的JNI部分代码路径:frameworks/base/core/jniandroid_hardware_SensorManager.cpp3.Sensor硬件层实现的接口头文件路径:hardware/libhardware/include/hardware/sensors.h第二部分Sensor系统层次结构Android的传感器系统从驱动程序层次到上层都有所涉及,传感器系统自下而上涉及到的各个层次为:各种Sensor的内核中的驱动程序Sensor的硬件抽象层(硬件模块)Sensor系统的JNISensor的JAVA类JAVA框架中对Sensor的使用JAVA应用程序对Sensor的使用第二部分Sensor系统层次结构Sensor系统的JNI部分的函数列表:staticJNINativeMethodgMethods[]={{nativeClassInit,()V,(void*)nativeClassInit},{sensors_module_init,()I,(void*)sensors_module_init},{sensors_module_get_next_sensor,(Landroid/hardware/Sensor;I)I,(void*)sensors_module_get_next_sensor},{sensors_data_init,()I,(void*)sensors_data_init},{sensors_data_uninit,()I,(void*)sensors_data_uninit},{sensors_data_open,(Ljava/io/FileDescriptor;)I,(void*)sensors_data_open},{sensors_data_close,()I,(void*)sensors_data_close},{sensors_data_poll,([F[I[J)I,(void*)sensors_data_poll},};第二部分传感器系统层次结构Sensor模块的初始化函数sensors_module_init():staticjintsensors_module_init(JNIEnv*env,jclassclazz){interr=0;sensors_module_tconst*module;err=hw_get_module(SENSORS_HARDWARE_MODULE_ID,//打开Sensor的硬件模块(consthw_module_t**)&module);if(err==0)sSensorModule=(sensors_module_t*)module;returnerr;}第二部分传感器系统层次结构传感器系统的JAVA部分包含了以下几个文件:SensorManager.java:实现传感器系统核心的管理类SensorManagerSensor.java:单一传感器的描述性文件SensorSensorEvent.java:表示传感器系统的事件类SensorEventSensorEventListener.java:传感器事件的监听者SensorEventListener接口SensorListener.java:传感器的监听者SensorListener接口(不推荐使用)第二部分传感器系统层次结构SensorManager的主要的接口如下所示:publicclassSensorManagerextendsIRotationWatcher.Stub{publicSensorgetDefaultSensor(inttype){//获得默认的传感器}publicListSensorgetSensorList(inttype){//获得传感器列表}publicbooleanregisterListener(SensorEventListenerlistener,Sensorsensor,intrate,Handlerhandler){//注册传感器的监听者}voidunregisterListener(SensorEventListenerlistener,Sensorsensor){//注销传感器的监听者}}第二部分传感器系统层次结构Sensor的主要的接口如下所示:publicclassSensor{floatgetMaximumRange(){//获得传感器最大的范围}StringgetName(){//获得传感器的名称}floatgetPower(){//获得传感器的耗能}floatgetResolution(){//获得传感器的解析度}intgetType(){//获得传感器的类型}StringgetVendor(){//获得传感器的Vendor}intgetVersion(){//获得传感器的版本}}Sensor类的初始化在SensorManager的JNI代码中实现,在SensorManager.java维护了一个Sensor的列表。第二部分传感器系统层次结构SensorEvent类比较简单,实际上是Sensor类加上了数值(values),精度(accuracy),时间戳(timestamp)等内容。SensorEventListener接口描述了SensorEvent的监听者内容如下所示:publicinterfaceSensorEventListener{publicvoidonSensorChanged(SensorEventevent);publicvoidonAccuracyChanged(Sensorsensor,intaccuracy);}第三部分Sensor的硬件抽象层hardware/libhardware/include/hardware/目录中的sensors.h是Android传感器系统硬件层的接口。Sensor模块的定义如下所示:structsensors_module_t{structhw_module_tcommon;int(*get_sensors_list)(structsensors_module_t*module,structsensor_tconst**list);};typedefstruct{intsensor;/*sensor标识符*/union{sensors_vec_tvector;/*x,y,z矢量*/sensors_vec_torientation;/*加速度(单位:度)*/sensors_vec_tacceleration;/*加速度(单位:m/s^2)*/sensors_vec_tmagnetic;/*磁矢量(单位:uT)*/floattemperature;/*温度(单位:摄氏度)*/};int64_ttime;/*时间(单位:nanosecond)*/uint32_treserved;}sensors_data_t;sensors_data_t表示传感器的数据:第三部分Sensor的硬件抽象层Sensor的控制设备和数据设备:structsensors_control_device_t{structhw_device_tcommon;native_handle_t*(*open_data_source)(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);};structsensors_data_device_t{structhw_device_tcommon;int(*data_open)(structsensors_data_device_t*dev,native_handle_t*nh);int(*data_close)(structsensors_data_device_t*dev);int(*poll)(structsensors_data_device_t*dev,sensors_data_t*data);}第三部分传感器的硬件抽象层sensor_t表示一个传感器的描述性定义:structsensor_t{constchar*name;/*传感器的名称*/constchar*vendor;/*传感器的vendor*/intversion;/*传感器的版本*/inthandle;/*传感器的句柄*/inttype;/*传感器的类型*/floatmaxRange;/*传感器的最大范围*/floatresolution;/*传感器的辨析率*/floatpower;/*传感器的耗能(估计值,mA单位)*/void*reserved[9];}第三部分Sensor的硬件抽象层Android中为仿真器提供了一个为Sensor硬件抽象层的示例实现,它本身具有实际的功能,可以作为实际系统的传感器的硬件抽象层的示例。这部分代码如下所示:development/emulator/sensors第三部分传感器系统的硬件抽象层Sensor的硬件抽象层实现的要点:传感器的硬件抽象层可以支持多个传感器,需要构建一个sensor_t类型的数组。传感器控制设备和数据设备结构,可能被扩展。传感器在Linux内核的驱动程序,很可能使用misc驱动的程序,这时需要在控制设备开发的时候,同样使用open()打开传感器的设备节点。传感器数据设备poll是
本文标题:12_Android的传感器系统
链接地址:https://www.777doc.com/doc-5525025 .html