gsensor驱动调用框架流程_第1页
gsensor驱动调用框架流程_第2页
gsensor驱动调用框架流程_第3页
gsensor驱动调用框架流程_第4页
gsensor驱动调用框架流程_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档你我共享AAAAAA11.adxl345_gpio_co nfig();配置GPI0口,这里由于不使用中断,所以将中断引一、首先建立这样一个全局的观念:An droid 中sen sor在An droid系统架构中的位置及其工作。方框 图如下:从以上方框图中,可以看出An droid中sen sor在系统分为四层:驱动层(Sen sorDriver )、硬件抽象层(Native )、中间层(Framework)、应用层(Java)。硬件抽象层 与中间层可以合并一起作 为Framework层。针对我们xx这里一个具体的Gsensor,下面将以具体的源 码形式来讲解以上的这个系统框 图。二

2、、驱动层 (Sensor Driver Layer )芯片ADXL345 GSensor,至于硬件的具体工作原理,须分析ADXL345勺Datasheet。驱动源码位于:xxcustomcommonkernelaccelerometeradxl345目录。由于ADXL345是以I2C形式接口挂接到Linux系统,因此同时需要分析Linux的I2C子系统 架构(略)。其源码位于:1、 xxplatformxxker neldriversi2c2、 kern eldriversi2c查看ADXL345.c文件,分析针对于其硬件工作原理的几个函数。硬件初始化:cppview_pla in copy_

3、1. static int adxl345_init_client(struct i2c_client *client, int reset_cali)2.3. 4.4.struct adxl345_i2c_data *obj = i2c_get_clie ntdata(clie nt);6.5.int res = 0;8.9.10.脚配置成输入输出口精品文档你我共享AAAAAA检测设备ID,通过读ADXL345的设置电源模式,ADXL345有5.res = ADXL345_CheckDevicelD(clie nt); /DEVID寄存器16.17.if(res != A

4、DXL345_SUCCESS)9.return res;5.26.27. res = ADXL345_SetPowerMode(clie nt, false);/几种电源模式,这里设置false值指不让芯片处于messure模式2.if(res != ADXL345_SUCCESS) return res;res = ADXL345_SetBWRate(clie nt, ADXL345_BW_100HZ);if

5、(res != ADXL345_SUCCESS ) 0 x2C-BW=100Hz return res;设置带宽,100Hz精品文档你我共享AAAAAA精品文档你我共享AAAAAA53./设置数据格式,具体见datasheet54.55.res = ADXL345_SetDataFormat(clie nt, ADXL345_FULL_RES|ADXL345_RANGE_2G );56.56.if(res != ADXL345_SUCCESS) 0 x2C-BW=100Hz8.return res;5.66.60.gse nsor_ga in.x = g

6、se nsor_ga in.y = gse nsor_ga in.z = obj-reso-se nsitivity;1./设置中断寄存器,关闭中断3.94.95.res = ADXL345_SetIntEnable(client, 0 x00);/disable INTif(res != ADXL345_SUCCESS)return res;if(0 != reset_cali)/*reset calibrati on only in power

7、 on*/res = ADXL345_ResetCalibratio n(clie nt); if(res != ADXL345_SUCCESS)精品文档你我共享AAAAAA精品文档你我共享AAAAAA02.103.return res;104.105.#ifdef CONFIG_ADXL345_LOWPASS106.106.memset(&obj-fir, 0 x00, sizeof(obj-fir);108.109. #endif13.return ADXL345_SUCCESS;114.114.函数的分析都注释在原理里,

8、红色部分。具体寄存器的设置查看ADXL345的 datasheet,具体I2C的通信查看I2C.C文件(i2c控制器的驱动)。关键问题:这里有个问题,没有弄懂,就是从ADXL345数据寄存器里读取原始数据之 后,这个数据并不是我们应用程序所要用的,它需要 转化,经过查看代码,可以发现这样 段注释:/* sign, map: only used in accelerometer/magnetic field*sometimes, the sen sor output n eed to be remapped before report ing to framework.* the sig n i

9、s only -1 or +1 to alig n the sig n for frameworks coord in atesystem*the map alig n the value for frameworks coord in ate system. Take accelerometer*as an exmaple:*assume HAL receives orig inal accelerati on: acc = 100, 0, 100*sig n = 1, -1, 1, 0;*map = HWM_CODE_ACC_Y, HWM_CODE_ACC_X, HWM_CODE_ACC_

10、Z, 0;精品文档你我共享AAAAAA*accord ing to the above sig n & map, the sen sor output n eed to remap as y, -x, z:*float resolution = un it_numerator*GRAVITY_EARTH/u nit_de nomi nator;*acc_x = sig n O*accmapO*resoluti on;*acc_y = sig n1*accmap1*resolutio n;*acc_z = sig n 2*accmap2*resoluti on;*/struct hwmse n_

11、convert s8 sig n C_MAX_HWMSEN_EVENT_NUM;u8 mapC_MAX_HWMSEN_EVENT_NUM;这样一个转换算法的物理意义是怎样的? ?三、硬件抽象层(Native)硬件抽象层主要是提供硬件层实现的接口,其代 码路径如下:hardwarelibhardwarei ncludehardware sen sors.h其中:struct sensors_module_t 为 sensor 模块的定义。struct sen sors_module_t struct hw_module_t com mon;int (*get_se nsors_list)(str

12、uct sen sors_module_t* module,struct sen sor_t con st* list);Struct sensor_t为某一个sensor的描述性定义。struct sen sor_t 传感器的名称*/传感器的ven dor */传感器的版本*/传感器的句柄*/传感器的类型*/floatmaxRa nge; /*传感器的最大范围*/const char* n ame;/*const char* ven dor;/*intversi on;/*inthan dle;/*inttype;/*精品文档你我共享AAAAAAfloatresoluti on;/*传感器的

13、辨析率*/floatpower;/*传感器的耗能(估计值,mA单位)*/void*reserved9;struct sen sors_eve nt_t表示传感器的数据* Union of the various types of sen sor data* that can be retur ned.*/typedef struct sen sors_eve nt_t in t32_t versi on; /* must be sizeof(struct sen sors_eve nt_t) */in t32_t sen sor; /* sen sor ide ntifier */in t32

14、_t type; /* sen sor type */in t32_t reservedO; /* reserved */in t64_t timestamp; /* time is in nano sec ond */union float data16;/* accelerati on values are in meter per sec ond per sec ond (m/sA2) */ sen sors_vec_t acceleratio n;/* magn etic vector values are in micro-Tesla (uT) */sen sors_vec_t ma

15、gn etic;sen sors_vec_t orie ntatio n; /* orie ntati on values are in degrees */sen sors_vec_t gyro; /* gyroscope values are in rad/s */float temperature; /* temperature is in degrees cen tigrade (Celsius) */float dista nee; /* dista nee in cen timeters */float light; /* light in SI lux units */float

16、 pressure; /* pressure in hectopascal (hPa) */;uin t32_treserved14; sen sors_eve nt_t;显然,在看完这些数据结构之后,我们都会有这样一个疑问:精品文档你我共享AAAAAA这里只是申明了一些 结构体,而这些结构体在使用时需要定义,而且结构体中还有一些 函数指针,这些函数指针所对应的函数实现又在哪里呢?显然,那必定还要有一个.c源 文件来实现这样的一些函数。经过搜索,其文件名 为:sensors_hwmsen.c,路径为:xxksourcehardwaresensorhwmsen。在 这里,你会看至U get_se

17、nsors_list 等函数的 实现。四、中间层(Framework)这里,我也把它叫做JNI层,这里实现了 JNI接口。其源码目录如下:frameworksbasecorej ni an droid_hardware_Se nsorMa nager.cpp在源码里,我们可以看到JNI接口的函数列表:static JNINativeMethod gMethods = n ativeClass In it, ()V,(void*) nativeClassl nit ,se nsors_module_i nit,()I,(void*)se nsors_module_i nit ,se nsors_

18、module_get_ next_se nsor,(La ndroid/hardware/Se nsor;l)l,(void*)se nsors_module_get_ next_se nsor ,-se nsors_create_queue, ()1, (void*)se nsors_create_queue ,se nsors_destroy_queue, (l)V,(void*)se nsors_destroy_queue ,se nsors_e nable_se nsor, (ILjava/la ng/Stri ng;ll)Z,(void*)se nsors_e nable_se ns

19、or ,se nsors_data_poll, (lFlJ)l,(void*)se nsors_data_poll ,;这些JNI接口所对应的实现,请看源码。当然了,你可能又有疑 问了,上层Java又是怎样来调用这些本地接口的呢?在android_hardware_SensorManager.cpp 源码下面有这样一个函数:精品文档你我共享AAAAAA万里雪飘。int register_a ndroid_hardware_Se nsorMa nagerJNIE nv *env)return jn iRegisterNativeMethods(e nv, a ndroid/hardware/Se nsorMa nager, gMethods, NELEM(gMethods

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论