触摸屏驱动为本机驱动,由微软提供有通用层 MDD,我们只需要编写PDD层就可以了。触摸屏驱动由GWES 加载,GWES 通过MDD层的DDI设备驱动程序接口函数(Device Driver Interface,DDI),实现和驱动程序的交互,而PDD层则通过实现DDSI接口函数(Device Driver Service Provider Interface, DDSI),来完成对系统的支持和对硬件的控制。他们的关系是:MDD 链接PDD 层并定义它希望调用的函数接口:设备驱动程序提供器接口。同时MDD 把不同的函数集提供给操作系统。

Windows CE 的触摸屏驱动链接了tch_cal.lib 和tchmdd.lib 两个静态链接库。

所以在编写source檔时,要记得加上:

SOURCELIBS= /

$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/tch_cal.lib /

$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/tchmdd.lib

标准接口声明(touch.def檔中声明)

TouchPanelGetDeviceCaps;

TouchPanelEnable;

TouchPanelDisable;

TouchPanelSetMode;

TouchPanelReadCalibrationPoint;

TouchPanelReadCalibrationAbort;

TouchPanelSetCalibration;

TouchPanelCalibrateAPoint;

TouchPanelPowerHandler;

详解:

DDI界面是在WINCE500/PUBLIC/COMMON/OAK/DRIVERS/TOUCH/TCHMAIN中的tchmain.c檔中实现,在此檔中,MDD通过调用PDD的DDSI接口来实现DDI函数.

DDI 接口包括 TouchPanelGetDeviceCaps、

TouchPanelEnable、

TouchPanelDisable、

TouchPanelSetMode、

TouchPanelReadCalibrationPoint、TouchPanelReadCalibrationAbort、

TouchPanelSetCalibration、

TouchPanelCalibrateAPoint、

TouchPanelPowerHandler。

PDD层是我们真正要写的,直接与所要驱动的硬件相关。

DDSI 接口包括:

DdsiTouchPanelAttach、

DdsiTouchPanelDetach、

DdsiTouchPanelDisable、

DdsiTouchPanelEnable、

DdsiTouchPanelGetDeviceCaps、

DdsiTouchPanelGetPoint、

DdsiTouchPanelPowerHandler。

我们现在重点讲PDD层要实现的DDSI函数。

DdsiTouchPanelEnable
 由TouchPanelEnable调用

1:创建事件hTouchPanelEvent 和hCalibrationSampleAvailable。

2: 检查并初始化所需的中断gIntrTouch(触摸屏中断)和

gIntrTouchChanged(定时器中断)

3: 创建一个ISR 线程TouchPanelpISR

4:
 
DdsiTouchPanelDisable、
 
DdsiTouchPanelGetPoint:
 函数获取当前触摸屏位置和状态信息;
 
DdsiTouchPanelGetDeviceCaps
 询问校正点数

由TouchPanelGetDeviceCaps调用

MDD分析:

在PDD层的档与MDD与的檔之间,通过共同包含头檔tchddsi.h。来实现中逻辑中断号的通用,中断的传递等。在WINCE5.0中,tchddsi.h文件放在D:/WINCE500/PUBLIC/COMMON/OAK/INC 中,如有必要,可进行修改

接口函数声明也在该目录的touch.def文件中

摘自tchddsi.h

//定义触摸中断和 定时器中断 的逻辑中断号

extern DWORD gIntrTouch;

extern DWORD gIntrTouchChanged;

在文件tchmail.c 中,

1:TouchPanelEnable函数主要做以下工作

//把中断与事件关联

InterruptInitialize(gIntrTouch, hTouchPanelEvent, NULL, 0)

InterruptInitialize( gIntrTouchChanged, hTouchPanelEvent, NULL, 0)

//创建ISR线程

hThread = CreateThread( NULL, 0, TouchPanelpISR, 0, 0, NULL)

// 获得线程优先权

TouchPanelpGetPriority(&gThreadPriority, &gThreadHighPriority);

// 设置线程优先权

CeSetThreadPriority(hThread, gThreadPriority);

2:TouchPanelGetDeviceCaps函数:

MDD层给系统发消息

MDD层是通过PFN_TOUCH_PANEL_CALLBACK    v_pfnPointCallback;

结构给系统发的消息

3:TouchPanelpAttach函数:

主要是生成一个事件hTouchPanelEvent。

hCalibrationSampleAvailable

hTouchPanelEvent = CreateEvent( NULL,

FALSE,     //  Not manual reset

FALSE,     //  Not signalled

NULL);

4: TouchPanelReadCalibrationPoint 函数

用于屏幕校准, 读取相应的触摸屏坐标值/。

TouchPanelReadCalibrationAbort(void); 终止当前活动的校准活动()

5:TouchPanelSetCalibration

处理上面TouchPanelReadCalibrationPoint 函数读来的校准数据,该函数将产生校准基准参数,

TouchPanelSetCalibration 函数执行的动作是一套数学算法,具体内容为:

在触摸屏数据与其位置偏移关系且屏幕像素与其位置偏移关系同为线性关

系假设情况下,触摸屏返回的位置信息与像素位置信息之间成2D 坐标变换关系。

则对于触摸屏按下点的触摸屏坐标(Tx,Ty)与其在显示设备位置关系上匹配的点

的屏幕坐标(Sx,Sy)之间的转换关系,可以通过下述坐标变换表示:

Sx = A1*Tx + B1*Ty + C1

Sy = A2*Tx + B2*Ty + C2

TouchPanelSetCalibration 的具体工作就是通过校准的动作获取的屏幕坐标

和触摸屏坐标TouchCoordinate 来确定A1,B1,C1 和A2, B2, C2。

消息定义:在文件 pegc_def.h 中有各种消息的定义,如有必要,可以修改,以合已用

// TOUCH handler wnd messages

#define WM_STUB_REGISTWND       WM_USER+1

#define WM_STUB_UNREGISTWND     WM_USER+2

#define WM_STUB_SETVALUE        WM_USER+3

#define WM_STUB_GETVALUE        WM_USER+4

#define WM_STUB_RESET           WM_USER+5

#define WM_STUB_EVENT           WM_USER+6

#define WM_STUB_GETFOCUSWND     WM_USER+7

#define WM_STUB_FOCUSBACK       WM_USER+8

#define WM_STUB_GETLASTTOUCHFOCUSWND     WM_USER+9

#define WM_STUB_GETVERSION      WM_USER+10

#define WM_STUB_TABLET          WM_USER+11

#define WM_STUBHOOK_GETFOCUS     WM_USER+3000

#define WM_STUBHOOK_READY        WM_USER+3001

启动流程:

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ok138ok/archive/2009/08/01/4399110.aspx

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ok138ok/archive/2009/08/01/4399110.aspx

触摸屏驱动分析: (本机驱动)相关推荐

  1. Linux spi驱动分析----SPI设备驱动(W25Q32BV)

    转载地址:http://blog.chinaunix.net/uid-25445243-id-4026974.html 一.W25Q32BV芯片简介 W25X是一系列SPI接口Flash芯片的简称,它 ...

  2. linux 网卡驱动分析,LINUX_网卡驱动分析

    LINUX_网卡驱动分析 (36页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 Linux DM9000网卡驱动程序完全分析说明仁 本文分 ...

  3. linux下camera驱动分析_LINUX设备驱动模型分析之三 驱动模块相关(DRIVER)接口分析...

    本系列前几篇文章链接如下: <LINUX设备驱动模型分析之一 总体概念说明> <LINUX设备驱动模型分析之二 总线(BUS)接口分析> 上一章我们分析了bus-driver- ...

  4. linux pl320 mbox控制器驱动分析-(3) pl320驱动代码分析

    linux pl320 mbox控制器驱动分析-(3)pl320驱动代码分析 1 pl320 mbox控制器宏定义 2 初始化接口 3 ipc_handler mbox中断处理函数 4 数据的收发 4 ...

  5. linux i2c模型 rtc模型 详细分析,Linux RTC驱动分析(一)----pcf8563驱动和class.c

    来逐一分析. 看一个设备驱动,一般都从模块初始化和退出函数开始,pcf8563.c的为: static int __init pcf8563_init(void) { return i2c_add_d ...

  6. S3C2410驱动分析之LCD驱动

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 内核版本:2.6.36 源码路径:drivers/video/s3c2410fb.c 本文分析S3C2410的LCD ...

  7. 由串口驱动分析rt-thread设备驱动框架

    内核对象管理框架简析 rt-thread中,线程.信号量.互斥锁.设备等等都是"内核对象",_object_container是一个数组,包含所有的内核对象信息. 对象信息的定义 ...

  8. Linux驱动分析之Uart驱动架构

    Uart体系结构 UART设备驱动可以使用tty驱动的框架来实现,但是因为串口之间有共性,所以Linux在tty接口上封装了一层(serial core).后面我们再拿一篇文章来解释tty驱动,tty ...

  9. Linux驱动:网卡驱动分析之三--MAC驱动及PHY驱动框架了解

    1.前言 在了解网卡驱动之前,推荐先看linux内核网络分层结构这篇文章,这里就摘取文章中的两张关于网络数据包的流程图(UDP示例),方便后面网络设备驱动程序的了解: 数据结构说明: 内核对网络数据包 ...

最新文章

  1. 二十四、redis发布订阅
  2. Java实现根据地理位置获取经纬度
  3. 数据校验器架构模式组
  4. 二叉树的存储结构及四种遍历(C语言)
  5. Poj2586 每五个月都是亏
  6. Java笔记-使用RabbitMQ的Java接口实现Publish/Subscribe(订阅模式)
  7. 项目管理学习总结(10)——项目经理需要具备8点管理素质
  8. 色板游戏(洛谷 1558)
  9. SpringBoot+zk+dubbo架构实践(三):部署Dubbo-admin管理平台
  10. 权力的游戏登录显示服务器上限,权力与纷争登录不上怎么办 登录不上解决方案...
  11. Web漏洞扫描工具:AWVS下载
  12. 寻找春天nbsp;九宫格日记-2011.09.29
  13. 跳过百度网盘客户端快速下载
  14. 方法重载与重写的区别
  15. K近邻算法python实现并显示决策边界
  16. 2023年核盾网络验证-核盾云壳最新逆向教程
  17. matplotlib中cmap_Matplotlib:imshow中cmap的功能是什么?
  18. Rstudio read.csv()读取文件错误:列的数目比列的名字要多
  19. 晶振与晶体的参数详解
  20. 如何在 Ubuntu 上使用 AppImage 软件镜像包?

热门文章

  1. HTML躬行记(4)——Web音视频基础
  2. vue url 地址中的 # 是什么?
  3. 多多自走棋改动_多多自走棋大更新变动一览 走进腾讯时代
  4. Keras Sequential 模型
  5. hp服务器基本系统设备驱动程序,HP ProLiant ML/DL/BL iLO2 - 管理控制器驱动程序和管理接口驱动程序如何工作?...
  6. 实现抖音时光倒流效果---OpenCV-Python开发指南(56)
  7. 远程监控服务器图片,基于WEB服务器实现监控系统的视频图像显示
  8. 【Unity3D】反射和折射
  9. 2.创建多个Worker 类,存储在List 集合中。3.打印输出所有的工人信息。4.计算所有工人的平均工资。5打印输出姓名中包含 “胡“ 的所有工人信息。6打印输出所有姓 “胡“ 的工人信息。
  10. 在国内如何注册斯里兰卡公司?需要哪些流程?