TouchPanel驱动介绍.ppt_第1页
TouchPanel驱动介绍.ppt_第2页
TouchPanel驱动介绍.ppt_第3页
TouchPanel驱动介绍.ppt_第4页
TouchPanel驱动介绍.ppt_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

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

文档简介

目录 1 驱动的位置及加载2 input子系统介绍3 Framework中对input系统数据的提取4TouchPanel驱动的实现过程 1 驱动的位置及加载 TP的驱动在linux平台上都是放在目录 kernel drivers input touchscreen不同的硬件平台一般已经都集成了许多不同ic的驱动添加新的TP驱动可以通过配置该目录下的Kconfig 及Makefile 两个文件来讲驱动添加到kernel中来 以我们现在Demo板中的TP为例 在Kconfg中添加configTOUCHSCREEN ELANbool ELANTouchscreeninterfacesupport dependsonI2C I2C PXAdefaultyhelpSayYheretoenablesupportfortheELANtouchscreencontroller 对应的Makefile中obj CONFIG TOUCHSCREEN ELAN elan touch o这样elan touch o就会被编译连接进入vmlinux 为了debug方便我们可以将驱动编译为KO文件 然后通过adbpush传入系统然后 Insmod来加载驱动 这样可以通过rmmod insmod反复加载删除驱动 提高调试效率 编译生成模块的makefile如下CROSS COMPILE home feixun android marvell prebuilt linux x86 toolchain arm eabi 4 4 0 bin arm eabi ARCH TYPE arm obj m tp otp objs sitronix ts oKERNELDIR home feixun android marvell kernel kernelCC CROSS COMPILE gccLD CROSS COMPILE ldPWD shellpwd modules MAKE ARCH ARCH TYPE C KERNELDIR M PWD modulesmodules install MAKE ARCH ARCH TYPE C KERNELDIR M PWD modules installclean rm f PWD o PWD ko PWD symvers PWD mod c PWD order KERNELDIR home feixun android marvell kernel kernel这个对应的是我们dkb代码对应的kernel 这个如果不一样编译出来的模块ismod会出错 编译模块之前还需要对kernel进行编译 makemodules 将内核模块编译完成 home feixun android marvell prebuilt linux x86 toolchain arm eabi 4 4 0 bin arm eabi 这个是我们的toolchain路径 2 input子系统介绍 我们结合elan touch c这个驱动讲解一下input子系统的工作elan ts input dev input allocate device if elan ts input dev NULL printk KERN ERR s failedtoallocateinputdev n FUNCTION return ENOMEM elan ts input dev name elan ts elan ts input dev phys elan ts input0 elan ts input dev open elan touch open elan ts input dev close elan touch close set bit EV ABS elan ts input dev evbit set bit ABS X elan ts input dev absbit set bit ABS Y elan ts input dev absbit set bit ABS MT POSITION X elan ts input dev absbit set bit ABS MT POSITION Y elan ts input dev absbit set bit ABS PRESSURE elan ts input dev absbit set bit EV SYN elan ts input dev evbit set bit EV KEY elan ts input dev evbit set bit BTN TOUCH elan ts input dev keybit set bit BTN 2 elan ts input dev keybit input set abs params elan ts input dev ABS MT TOUCH MAJOR 0 16 0 0 input set abs params elan ts input dev ABS X 0 448 0 0 input set abs params elan ts input dev ABS Y 0 704 0 0 input set abs params elan ts input dev ABS PRESSURE 0 255 0 0 ret input register device elan ts input dev 在shell中通过cat proc bus input devices可以查看到I Bus 0000Vendor 0000Product 0000Version 0000N Name elan ts P Phys elan ts input0S Sysfs class input input2U Uniq H Handlers mouse1event2evbugB EV bB KEY 4000400000000B ABS 6100001000003可以看到event2 mouse1都是该input设备的hander在 dev input 目录下可以看到event2 mouse1的设备节点 3 Framework中对input系统数据的提取框架中对input系统数据的监控封装在EventHup cpp这个文件中对应的具体的类是EventHub 下面我把类内部的部分截取出来说明一下这个数据提取的过程 函数boolEventHub getEvent int32 t outDeviceId int32 t outType int32 t outScancode int32 t outKeycode uint32 t outFlags int32 t outValue nsecs t outWhen 起到了一个对input设备节点的监控作用 getEvent调用intEventHub read notify intnfd ifdefHAVE INOTIFYintres chardevname PATH MAX char filename charevent buf 512 intevent size intevent pos 0 structinotify event event LOGV EventHub read notifynfd d n nfd res read nfd event buf sizeof event buf if res int sizeof event if errno EINTR return0 LOGW couldnotgetevent s n strerror errno return1 printf got dbytesofeventinformation n res strcpy devname device path filename devname strlen devname filename while res int sizeof event event structinotify event event buf event pos printf d 08x s n event wd event mask event len event name if event len strcpy filename event name if event mask event size sizeof event event len res event size event pos event size endifreturn0 在boolEventHub openPlatformInput void 中添加了对目录 dev input 的监控mFDs 0 fd inotify init res inotify add watch mFDs 0 fd dev input IN DELETE IN CREATE 4TouchPanel驱动的实现过程 4 1电路图分析 我们发现reset 和interrupt两个引脚通过了一个电平转换芯片 这个电平转换芯片有一个使能脚 其他的供电等引脚都是正常的 所以我们再驱动加载的时候要有一个使能该引脚的过程这个再我们的代码中的体现是在probe函数中的staticint devinitelan touch probe structi2c client client conststructi2c device id id intret touch io power onoff 1 4 2平台设备添加 TTC DKB c是我们pxa910的board配置文件 这个文件和pxa910 c里面定义我们的平台中包含的所有的平台设备 我们的TP驱动是挂在I2C总线上 其设备我们定义在staticstructi2c board infottc dkb i2c info ifdefined CONFIG TOUCHSCREEN ELAN type elan touch addr 0 x8 irq gpio to irq 45 endif 4 3驱动与设备的绑定 对于一个驱动程序有两个元素不可或缺 即设备和驱动 一般驱动都是通过设备名和驱动名的匹配建立关系的 在i2c驱动注册时会遍历i2c board info这样一个结构 而这个结构在29以前或更早的内核里是不存在的 该数据结构在TTC DKB c中初始化了i2c设备名及设备地址 这便解决了驱动与设备的匹配问题 同时器件地址的提供也有所改变 旧的内核是在驱动中使用一个normal i2c数组保存地址的 名字匹配一个i2c驱动是可以有多个名字的 即一个驱动程序可以支持多个设备 该机制是通过structi2c device id实现的 驱动中建立这么一个结构体数组 i2c架构层便会扫描该数组 与设备名去匹配 匹配成功的都会进入相应probe函数 4 4input事件类型和参数 前面我们讲input设备的时候大家可以看到创建一个input设备的时候我们对input进行初始化设置了EV ABS ABS X ABS Y ABS MT POSITION XABS MT POSITION Y ABS PRESSURE ABS MT TOUCH MAJOR这么多个的数据其中EV ABS是事件类型后面其他的参数是该事件下携带的各种参数 电阻屏时 我们需要设置EV ABS ABS X 横坐标 ABS Y 纵坐标 ABS PRESSURE 压力值 其他可以不用设置电容屏 多点触摸 时 我们需要设置EV ABS ABS MT POSITION X 横坐标 ABS MT POSITION Y 纵坐标 ABS MT TOUCH MAJOR 其他可以不用设置 4 5中断的注册 中断的申请我们要注意中断的触发方式是上升沿 还是下降沿触发 这个要根据TPIC的spec来 根据具体的情况设置中断的专用模式 还是共享模式ret request irq client irq elan touch irq handler IRQF DISABLED IRQF TRIGGER FALLING elantouch client 在elan touch c中我们设置的是下降沿触发 同时下进入中断处理函数的的时候关闭中断 为了不影响系统的实时性 我们一般在中断中唤醒一个queue 在queue中来读取坐标数据 以及上报 4 6TP的省电模式设置 省电在这里一般分两块TP芯片本身的省电 这个不同的IC可能不一样 有的IC可能要通过命令来进入省电 有的IC则会自动进入省电模式外围电路相关的省电设置 比如我们elan触摸屏外面的RES interrupt连接有一个电平转换IC 我们再省电的时候需要将该IC也

温馨提示

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

评论

0/150

提交评论