版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黄山学院《电影编剧》2023-2024学年期末试卷
- 黄山学院《单片机原理及应用》2021-2022学年期末试卷
- 淮阴师范学院《自动控制原理》2022-2023学年期末试卷
- 淮阴师范学院《中外文化交流专题》2023-2024学年第一学期期末试卷
- 淮阴师范学院《羽毛球》2023-2024学年第一学期期末试卷
- 做视频课件教学课件
- 淮阴工学院《汽车理论》2022-2023学年第一学期期末试卷
- 淮阴工学院《现代分离方法与技术》2023-2024学年第一学期期末试卷
- DB6505T193-2024葡萄病虫害绿色防控技术规程
- 建筑装饰空间规划与布局设计案例考核试卷
- 《幼儿教师应用文写作》课程标准
- 日间照料及居家养老服务中心运营实施方案
- 河南省部分地区2023年中考语文一模试卷汇编:文学类文本阅读
- 政府审计视角下国有企业股权投资风险防控研究
- 公墓宣传推广策划方案
- IPC-A-610F-表面贴装组件课件
- 家庭教育指导服务现状调查
- 《亚里士多德》课件
- 特殊教育资源中心(特殊教育指导中心)工作职责
- 重大隐患判定标准培训课件
- 泳装厂管理制度
评论
0/150
提交评论