版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前 structi2c_driver struct struct G-sensor移 I2C地 detect函 G-sensor驱动init函 superstandby支 Kconfig以Makefile文 G-sensor测 第三部分,第7章介绍G-sensor的相关调试方法。在人机交互过程中,G-sensor起着非常重要的作用,G-sensor作为输入设备,能感知当状态,从而获知pad用户的操作意图:横竖屏切换,转弯等。serG-seserG-seii├──├──├──├──├──├──├──├──├──├──├──├──├──├── 配置文件sys_config.fex中关于G-sensor的配置项如下:;Gsensor; TWIIDforcontrollingG-sensor(0:TWI0,1:TWI1,2:
==== 的 控制选择,0对于G-sensor的的内核配置,可通过命令makeARCH=arm config进入.2DeviceDrivers3HardwareMonitoringsupportsupport,如图4所示:4I2CG-sensorsupport选择编译成模块。如图5所示:G-sensorI2C总线进行通信的输入设备,G-sensordriverI2C驱动G-sensordriver将底层硬件对用户输入的响应转换为标准的输入,再通又提供了处理层的编程接口;而处理层(inputEventDriver)就为我们用户空间的点进行数据的以及相应的处理。structi2c_driverbma250_driver:该变量会到i2c_driver中,为匹配设备名,probe为设备的侦测函数,address_list为I2C的scan地址,suspend与resume为进内核的休眠唤staticstaticstructi2c_driverbma250_driver=.class=.driver= = =.id_table= = =#ifdef#ifdef.suspend= =structstructbma250_datastructstructbma250_datastructi2c_atomic_tdelay;;atomic_tenable;unsignedcharmode;structmutexvalue_mutex;structmutexenable_mutex;structmutexmode_mutex;structdelayed_workwork;structmutexvalue_mutex;structmutexenable_mutex;structmutexmode_mutex;structdelayed_workwork;#ifdefunsignedcharrange_state;unsignedcharbandwidth_state;structs16x,5.5.G-sensor驱动作为硬件与软件的一个桥梁,实现对G-sensor控制器硬件初始化,获取G-sensor控制器到的位置坐标信息(必要时,对数据进行滤波和用户操作意图识别通常通过sys文件系统提供,这部分实现,遵循标准的linux规范;ioctl子系统上,使用input系统子系统的接口,供上层使用(eg:inputcore);驱动的移植中主要需要关注点为如何获取sys_configfex中的配置信息,detect函数,input子系统设备和上报数据structinput_dev(1)structinput_devstaticstaticinlinevoidinput_report_abs(structinput_dev*dev,unsignedintcode,intstaticstaticinlinevoidinput_sync(structinput_dev获取设备的设备驱动的私有数据通过I2C的i2c_add_driver()函数添加i2c_driver,使用到的关键数据结构为i2c_driver,i2c_drivernameINPUTinput_devname一致,否则有会module_para_nameI2Cdetect用于G-sensor_detect个是G-sensor_detect函数扫描地址i2c_address。normal_i2c地址以固定的形式存在于设备驱动中。存放设备地址的数组必须以 staticconstunsignedshortnormal_i2c[]={0x18,I2C_ staticconstunsignedstaticconstunsignedshorti2c_address[]=detect函数如下。G-sensor_detect-Devicedetectioncallbackforautomaticdevicereturn=0;<0;*int-return-ifif(twi_id==adapter->nr)for(i2c_num=0;i2c_num< ->addr=pr_info("%s:addr=0x%x,i2c_num:%d\n",func-ret= pr_info("ReadIDvalueisif((ret&0x00FF)==BMA250_CHIP_ID)pr_info("BoschSensortecDevicedetected!\n");return}elseif((ret&0x00FF)==BMA150_CHIP_ID)"BMA150registeredI2Creturn0;pr_info("%s:BoschSensortecDevicenotfound,\maybetheotherG-sensorequipment!\n",func);return-}elsereturn-如果成功,且为驱动支持的chip_id,则detect成功*G-sensor_fetch_sysconfig_para-*G-sensor_fetch_sysconfig_para-getconfiginfofromsysconfig.fexreturn =0;<0;staticintG-{intret=-intdevice_used=-1;script_item_uval; funcif !=type)pr_err("%s:typeerr device_used=%d.\n", func,val.val);gotoscript_get_err;}device_used=if(1==device_used)type=script_get_item("G-sensor_para","G-sensor_twi_id",&val);if(SCIRPT_ITEM_VALUE_TYPE_INT!=type){pr_err("%s:typeerrtwi_id=%d.\n", func,val.val);gotoscript_get_err;}twi_id=dprintk(DEBUG_INIT,"%s:twi_idis%d. func,ret=}else pr_err("%s:G-sensor_unused.\n", func);ret=-1;returnreturnret;置信息,以及i2c设备驱动。如下所示:staticintstaticintinit{intret=-intk("%s:err.\n",func);return-}ret=returnsuperstandbysuperstandbyAVCCDRAM_VCC电源以外的所有电源,因此在休眠时G-sensorresumeG-sensorbma250为如果是,则将suspend时保存的寄存器信息重新写入G-sensor。{structbma250_data*data ,&data->bandwidth_state)< printk("suspend:readrange}}{structbma250_data*data {int{intreturn}{int*)}elseif(SUPER_STANDBY=={dprintk(DEBUG_SUSPEND,"mma8452lateresumeend");return;{int*){int*)}return}字体加黑的部分为启动工作队列线程来将mma8452的寄存器初始化延后执行。staticstaticvoidmma8452resumeevents(structworkstruct{部分的总体实现请参考mma8452.c源码。同时,在卸载时,注意要调用i2c_set_data(,NULL);函数。否则驱动自己是可以正常卸载的,但卸载后,向此I2C加载其它G-sensor驱动时会出现I2C通讯不成功问题。添加一个新的G-sensor驱动需要修改Kconfig文件和Makefile文件以使得能够在源码拷贝到目录:..\exdroid\lichee\linux-3.3\drivers\G-sensor下,按照文件Kconfig与Makefile的形式,将G-sensor的驱动进去,如下:configconfigSENSORStristate"BMA250accelerationsensorsupport"dependsonI2CIfyousayyeshereyougetsupportforBoschSensortec'saccelerationsensorsBMA250 +=录为workspace\exdroid\lichee\linux-3.3上,输入命令:makemake 进入DeviceDrivers\G-sensorsupport为了实现动态开关打印信息,在input子系统的驱动模块中加入一个模块参数debug_mask。驱动中所有的打印printk前加一个if条件判断语句,进行打印等级与enumenumDEBUG_INIT=1U<<0,DEBUG_CONTROL_INFO=1U<<1,DEBUG_DATA_INFO=1U<<2,DEBUG_SUSPEND=1U<<3,staticu32debug_mask=#definedprintk(level_mask,fmt,arg...)if(unlikely(debug_mask&level_mask))\printk(KERN_DEBUGfmt,##arg){structbma250_data*data}bma250_early_suspend函数中调用dprintk函数打印调试信息,打印等级设为DEBUG_SUSPEND。当debug_mask的第3位为1,则此条打印消息会成功打印;当debug_mask的第3位为0,则此打印消息。在具体的驱动调试中,如果驱动编译成模块,则在驱动加载时,设置debug_maskinitprobe函数中的初始化failprintkprintk在模块正常工作时是不会被打印的,6.6.G-sensorAndroid添加G-sensor驱动模块对应的hal层。G-sensor的hal 同时,在\exdroid\android4.1.1\device\softwinner\fiber-evbG-sensor.cfg文件,取正值,当定义为false时,x轴取负值取正值,当定义为false时,y轴取负值取正值,当定义为false时,z轴取负值y因为最终产品电路设计可能不一样,导致G-sensor可能贴的方向不一样,所以会出现时候,界面却旋转90°,这个时候就需要调整上面的几个参数中的G-sensor_xy_revert,将其设置为true,然后再根据x、y、z三个轴的实际效果选择是否设置其值。androidG-sensorandroid打包的对应文件夹中,并在init.sunxi中将其加载。具体修改方法如下(以aino为例): init.sunxi.rcandroid4.x.xinit.sun6irc在对应的文件中添加:7.7.进入adb 3)将串口打印信息打开,串口打印信息设置:通过adbs命令进入目/proc/sys/kernelecho8417printk8。G-sensor驱动中所有的打印信息打开,查看驱动程序的配置信息状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗保险理赔数据报送制度
- 2024年度电子商务平台安全评估合同
- 2024年度新媒体运营策划合同
- 2024年度特许经营合同违约金及赔偿责任
- 教育培训项目实施与服务方案
- 郑州大学《建设项目管理》2022-2023学年第一学期期末试卷
- 中小学德育教育活动方案
- 人教版四年级上册数学第四单元《三位数乘两位数》测试卷及答案(必刷)
- 2024年度科研协作居间协议合同模板
- 苏教版四年级下册数学第三单元 三位数乘两位数 测试卷附答案【综合题】
- 儿童牙外伤-年轻恒牙外伤(儿童口腔医学课件)
- 外研社新标准小学英语(一起点)单词表(带音标)(全)
- 企业刑事法律风险防范课件
- 幽门螺杆菌健康宣教PPT
- 山西省灵丘县山西省刁泉银铜矿业有限公司银、铜矿资源开发利用、地质环境保护与土地复垦方案附件
- CQI-12涂装系统评审
- 初一数学考试重点100题(附答案解析)6
- 教学课件 国际货运代理-肖旭
- 中国图书馆分类法讲座
- 教学评一体化的教学案例 课件
- 《语言学概论》第五章 语义和语用
评论
0/150
提交评论