- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android触摸屏驱动(26内核)分析
触摸屏驱动(2.6内核)分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 驱动不是很多,在此把它贴出来然后加上必要的注释:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* For ts.dev.id.version */#define S3C2410TSVERSION? ? 0x0101#defineWAIT4INT(x) (((x));MODULE_DESCRIPTION(s3c2410 touchscreen driver);MODULE_LICENSE(GPL);/** Definitions global arrays.*/static char *s3c2410ts_name = s3c2410 TouchScreen;/** Per-touchscreen data.*/struct s3c2410ts {? ? struct input_dev dev;? ? long xp;? ? long yp;? ? int count;? ? int shift;? ? char phys[32];};static struct s3c2410ts ts;static void __iomem *base_addr;static inline void s3c2410_ts_connect(void){? ? s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);? ? s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);? ? s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);? ? s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);}static void touch_timer_fire(unsigned long data){? ?? ?unsigned long data0;? ?? ?unsigned long data1;? ?? ?int updown;? ?? ?/* ? ?? ???读取stylus的状态? ?? ?? ?0 = Stylus down state? ?? ???1 = Stylus up state ? ?? ? */? ?? ?data0 = readl(base_addr+S3C2410_ADCDAT0);? ?? ?data1 = readl(base_addr+S3C2410_ADCDAT1);? ???updown = (!(data0 S3C2410_ADCDAT0_UPDOWN)) (!(data1 S3C2410_ADCDAT1_UPDOWN));? ???/*? ?? ? 更新stylus状态寄存器updown:? ?? ? 1 = down? ?? ? 0 = up? ?? ?*/? ? /*? ?? ?touch_timer_fire这个函数主要实现以下功能:? ?? ?1、stylus down的时候,在中断函数stylus_updown里面被调用,? ?? ?? ?此时缓存区没有数据,ts.count为0,所以只是简单的设置ad转换的模式,然后开启ad转换。? ?? ?2、但ADC中断函数stylus_action把缓冲区填满的时候,作为中断后半段函数稍后被调用,? ?? ?? ? 此时ts.count为4,算出其平均值后,交给事件处理层(Event Handler)处理,? ?? ?? ?主要是填写缓冲,然后唤醒等待输入数据的进程。? ?? ?3、stylus抬起,等到缓冲区填满后(可能会包含一些无用的数据)被调用,? ?? ?? ?这时候判断出stylus up,报告stylus up事件,重新等待stylus down。? ???if (updown) {? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?if (ts.count != 0) {? ???? ?? ?? ?? ?? ?/* 求平均值 */? ?? ?? ?? ? ts.
文档评论(0)