当前位置: 首页 > news >正文

wince7 屏幕控制_WinCE 7.0下的触摸屏驱动-嵌入式系统-与非网

在嵌入式系统中较为常用的是四线电阻式触摸屏,通过检测x轴和y轴的电压,来确定触点的位置。一般触摸屏系统结构为:触摸屏->触摸屏控制器->处理器。

wince7下触摸屏的驱动分为PDD层(位于bsp目录中)和MDD层(位于public目录中)。PDD层和MDD层通过DDSI接口函数连接,MDD层和上层通过DDI函数连接。其中MDD层一般无需修改,我们只需修改PDD层的代码。

比如我的bsp目录下触摸屏驱动中的touchscreenpdd.cpp文件中主要有如下函数:

TchPdd_Init()

TchPdd_Ioctl()

PDDTouchIST()

PDDInitializeHardware()

PDDTouchPanelEnable()

PDDTouchPanelGetPoint()

PDDCalibrationThread()

PDDStartCalibrationThread()

PDDDeInitailzeHardware()

PDDTouchPanelDisable()

其中TchPdd开头的函数就是DDSI函数,PDD开头的函数就是PDD层的函数。MDD层会最先调用TchPdd_Init()函数,该函数会将DDSI函数以函数指针的形式传递给MDD层,并调用PDD层的函数进行必要的初始化,如调用PDDInitializeHardware()来初始化SPI,GPIO(我的触摸屏控制器使用SPI接口),调用PDDTouchPanelEnable()来创建“触摸屏事件”,创建IST线程等。

IST线程函数PDDTouchIST()中会有一个while循环,如下图所示:

循环中有一个WaitForSingleObject(,)函数。该函数有两个参数,第一个参数是“触摸屏事件”的句柄,第二个参数用来设置等待超时的时间。IST线程执行到这个函数会等待“触摸屏事件”发生或者超时。当这两种情况之一发生后,线程就会往下执行,并调用PDDTouchPanelGetPoint()函数来读取触点坐标。在“触摸屏事件”发生之前,超时时间会设置为无限等待。只有当“触摸屏事件”发生后(触点按下)才会开始读坐标,并判断是否还是按下状态,如果还是按下状态,那么就会设置超时时间为某一个有限值,这样当WaitForSingleObject等待时间超过这个值后又会去读取坐标。这种机制就能保证我们能读取到触点移动的轨迹。

当然要想使用“触摸屏事件”,必须要有一个触摸屏的中断(当触点按下,这个中断发生),并将这个中断和“触摸屏事件”关联起来,这样中断发生后,才会触发“触摸屏事件”。

还有一种方法:不使用中断,直接采用轮询方式来读取坐标,通过读取坐标值的合法性来决定是否有触点按下。这种方式下,WaitForSingleObject的第一个参数就不起作用,且第二个参数必须设为一个有限值,这个值就决定来轮询的频率。

相关文章:

  • canvas滚动 vue_基于Canvas+Vue的弹幕组件
  • http 阮一峰_JavaScript 标准参考教程(alpha) 阮一峰
  • python时间字符串表示_python – 将pandas datetime month转换为字符串表示形式
  • react实现汉堡_reactjs – 所有顶级屏幕标题(使用抽屉)标题中的react-navigation汉堡包图标?...
  • c# 多线程界面卡顿_C#多线程解决程序卡顿问题
  • 安卓吸顶+下拉放大_【Android】打造下拉放大效果
  • react 父子传值_react 父子组件传值——父传子
  • python和mysql匹配吗_Python最佳实践和最安全的方法来连接MySQL和执行查询
  • java openresty 调用_OpenResty 究竟解决了什么痛点?
  • plsq如何快捷整理代码_plsql常用快捷键
  • php strpose_PHP之strpos
  • win10装debian 双系统_技术|如何拥有一个 Windows 10 和 Debian 10 的双系统
  • redistemplate怎么修改数据_redisTemplate一opsForValue操作
  • linux命令deploy_Linux deploy 超详细入门教程
  • word文档怎么到下一页去写_word文档怎么把下一页的内容移到上一页?
  • [LeetCode] Wiggle Sort
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • happypack两次报错的问题
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js ES6 求数组的交集,并集,还有差集
  • Shell编程
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • win10下安装mysql5.7
  • 闭包--闭包作用之保存(一)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 使用docker-compose进行多节点部署
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 学习JavaScript数据结构与算法 — 树
  • - 转 Ext2.0 form使用实例
  • #include<初见C语言之指针(5)>
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)基于IDEA的JAVA基础1
  • (原創) 物件導向與老子思想 (OO)
  • (转)程序员技术练级攻略
  • ***监测系统的构建(chkrootkit )
  • *上位机的定义
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • /etc/sudoer文件配置简析
  • /usr/bin/env: node: No such file or directory
  • @RequestBody与@ResponseBody的使用
  • @基于大模型的旅游路线推荐方案
  • [20160902]rm -rf的惨案.txt
  • [383] 赎金信 js
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++]模板与STL简介
  • [ESP32] 编码旋钮驱动
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [hive] 窗口函数 ROW_NUMBER()