[国嵌攻略][141][触摸屏驱动编程]
开启XY坐标转换,并上报
触摸屏驱动文件在/drivers/input/touchscreen/s3c2410_ts.c
static void touch_timer_fire(unsigned long data) { unsigned long data0; unsigned long data1; int updown; data0 = ioread32(base_addr+S3C2410_ADCDAT0); data1 = ioread32(base_addr+S3C2410_ADCDAT1); updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN)); if (updown) { //判断上报事件 if(count != 0){ //如果是第四次采样,那么提交上报事件 //交换坐标 long tmp; tmp = xp; xp = yp; yp = tmp; //平均处理 xp >>= 2; yp >>= 2; //上报事件 input_report_abs(dev, ABS_X, xp); input_report_abs(dev, ABS_Y, yp); input_report_abs(dev, ABS_PRESSURE, 1); input_report_key(dev, BTN_TOUCH, 1); //同步上报 input_sync(dev); //显示坐标 printk("x = %d, y = %d\n", xp, yp); } //清零转换坐标 xp = 0; yp = 0; count = 0; //启动坐标转换 iowrite32(1<<2, base_addr + S3C2410_ADCTSC); //设置自动转换模式 iowrite32(ioread32(base_addr + S3C2410_ADCCON) | (1<<0), base_addr + S3C2410_ADCCON); //开启坐标转换 } else { count = 0; input_report_key(dev, BTN_TOUCH, 0); input_report_abs(dev, ABS_PRESSURE, 0); input_sync(dev); iowrite32(WAIT4INT(0), base_addr+S3C2410_ADCTSC); if (OwnADC) { OwnADC = 0; up(&ADC_LOCK); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术