9504|19

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

触摸屏校验 注册表中的CalibrationData的键值是如何计算出来的 [复制链接]

想做一个类似WINCE触摸屏校验的小程序,基本思路就是通过5点校验来修改注册表中的[HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Touch]
     "CalibrationData"="1484,1168 584,536 568,1820 2356,1812 2356,488"
的值,但是不知道"1484,1168 584,536 568,1820 2356,1812 2356,488"是如何得到的?

最新回复

如果性能差异不大重新校准就可以了,但是我们遇到过在使用过程中按到了较易损坏的地方,导致触摸屏点击偏很大,且永远也无法校准成功,触摸屏废了!  详情 回复 发表于 2010-1-5 11:58
点赞 关注(1)

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
CalibrationData这个键值应该记录的是5个坐标(屏幕中心,屏幕左上角,屏幕左下角,屏幕又下角,屏幕右上角)。
用函数获取相应的坐标,然后按顺序存到CalibrationData这个键值就可以了啊
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
顶下;

晚点再给下具体代码。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主,获取触摸屏5个坐标点的函数:
  1. This function is called to get a single calibration point, in screen
  2. coordinates, when the input system is calibrating the touch driver.  The input system
  3. will then draw a target on the screen for the user to press on.

  4. The driver may use the cDisplayX and cDisplayY to compute a coordinate.
  5. It does not need to remember this computed value internally since it will
  6. be passed back when the input system has collected all of the points and
  7. calls .

  8. */

  9. extern "C" BOOL TouchDriverCalibrationPointGet(TPDC_CALIBRATION_POINT *pTCP)
  10. {
  11.   INT32 cDisplayWidth = pTCP->cDisplayWidth;
  12.   INT32 cDisplayHeight = pTCP->cDisplayHeight;

  13.   int CalibrationRadiusX = cDisplayWidth/16;
  14.   int CalibrationRadiusY = cDisplayHeight/16;


  15.   switch (pTCP->PointNumber)
  16.   {
  17.     case  0:  // Middle
  18.       pTCP->CalibrationX = cDisplayWidth/2;
  19.       pTCP->CalibrationY = cDisplayHeight/2;
  20.       break;

  21.     case  1:  // Upper Left
  22.       pTCP->CalibrationX = CalibrationRadiusX*2;
  23.       pTCP->CalibrationY = CalibrationRadiusY*2;
  24.       break;

  25.     case  2:  // Lower Left
  26.       pTCP->CalibrationX = CalibrationRadiusX*2;
  27.       pTCP->CalibrationY = cDisplayHeight - CalibrationRadiusY*2;
  28.       break;

  29.     case  3:  // Lower Right
  30.       pTCP->CalibrationX = cDisplayWidth - CalibrationRadiusX*2;
  31.       pTCP->CalibrationY = cDisplayHeight - CalibrationRadiusY*2;
  32.       break;

  33.     case  4:  // Upper Right
  34.       pTCP->CalibrationX = cDisplayWidth - CalibrationRadiusX*2;
  35.       pTCP->CalibrationY = CalibrationRadiusY*2;
  36.       break;

  37.     default:
  38.       pTCP->CalibrationX = cDisplayWidth/2;
  39.       pTCP->CalibrationY = cDisplayHeight/2;
  40.       SetLastError(ERROR_INVALID_PARAMETER);
  41.       return FALSE;
  42.     }

  43.   return TRUE;
  44. }
复制代码
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
1. 获取5个点的屏幕坐标参照:
TouchPanelGetDeviceCaps-->DdsiTouchPanelGetDeviceCaps(TPDC_CALIBRATION_POINT_ID)-->TSP_CalibrationPointGet中的计算
2. 注册表中的校准值其实就是touch的采样点x,y坐标值,具体的获取方法参照touch驱动mdd中的TouchPanelReadCalibrationPoint()函数和TouchPanelpISR线程
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
以前拿来直接用了,没细看怎么计算的,呵呵
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
确实,5个采样值,经校准后,反馈给GWES,由GWES与标准的5个点进行比对,如果比对的误差不低于某值,认为OK,也就是数学上的“最小二乘法”
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

8
 
kyzf:能不能多给定代码,只看这一点,感觉看不出什么东东来。。。谢谢
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
回复:kyzf

  1.   INT32 cDisplayWidth = pTCP->cDisplayWidth;
  2.   INT32 cDisplayHeight = pTCP->cDisplayHeight;

  3.   int CalibrationRadiusX = cDisplayWidth/16;
  4.   int CalibrationRadiusY = cDisplayHeight/16;
复制代码

1 cDisplayWidth、cDisplayHeight 代表的是显示屏的宽和高么?.如果是640*480的屏,是否可认为是
  cDisplayWidth=640; cDisplayHeight =480;
2 CalibrationRadiusX 和CalibrationRadiusY 指的是什么?
3 如果我用的是640*480的屏,按照你给的TouchDriverCalibrationPointGet函数计算出的5个点坐标不可能得到我问题描述中的那么大的坐标值,像第一个中心点的坐标是(1484,1168 ),我想知道用你给的函数如何得到这个点的坐标
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 liuysheng 的回复:
kyzf:能不能多给定代码,只看这一点,感觉看不出什么东东来。。。谢谢


其他代码,我明天再贴下吧
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼主可以看下 你的自己的对应的结构体里面关于触摸屏的一些参数的赋值;

这样才能理解为什么你的数据时那些?

关键是思路。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

12
 
主要部分在touch_plat.cpp 中,我用的是WINCE 6.0
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

13
 
教楼主一个办法,在系统启动的时候进行一次触摸屏校准,然后连接ACTIVESYNC,通过VS2005的注册表查看工具,找到相应的键值,里面的值就是你想要的值了,再将里面相应的数组放到你的注册表中,以后编出来的内核不用校准基本就可以用了
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 thr708285 的回复:
教楼主一个办法,在系统启动的时候进行一次触摸屏校准,然后连接ACTIVESYNC,通过VS2005的注册表查看工具,找到相应的键值,里面的值就是你想要的值了,再将里面相应的数组放到你的注册表中,以后编出来的内核不用校准基本就可以用了

通常也是这么做的。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 12 楼 thr708285 的回复:
教楼主一个办法,在系统启动的时候进行一次触摸屏校准,然后连接ACTIVESYNC,通过VS2005的注册表查看工具,找到相应的键值,里面的值就是你想要的值了,再将里面相应的数组放到你的注册表中,以后编出来的内核不用校准基本就可以用了

这样是可以的,我平时也是这样用的
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
如何得到这个值,应该看触摸屏的驱动,这些代码肯定是可以找到的
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

17
 
如果要实现的话只需要这么做:
1.首先拿到LCD,烧完让他跑起来。
2.用wince自带的校正程序校正。然后用PB或者EVC的工具连接wince的注册表。找到下面对应的值。
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
"CalibrationData"="这里每人的值都不一样"
在$(_FLATRELEASEDIR)目录下的platform.reg里面找到“[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]”
修改"CalibrationData"的值为找到的。然后make一下。重新写进去测试。
这个时候特别需要测试的是屏蔽的边缘的触摸效果,如果正常,那么恭喜你,可以了。如果边缘有问题,进行下一步3。
3.修改触摸区域。
  #define TOUCH_MAX_X  
  #define TOUCH_MIN_X  
  #define TOUCH_MAX_Y  
  #define TOUCH_MIN_Y  
调整这个区域(一般我见到的情况是边缘没反映或者点击后效果靠中心,所以把区域放到就行)。然后转1再进行测试。

一般几步就OK了。
最后记得把CalibrationData的值保存起来放到platform.reg里面,以后如果更换LCD,那么直接修改platform.reg文件,把对应的值放出来,其他的注释调编译一下就可以了。根本不需要再校正。

如果需要知道原理的话就需要知道一些算法了:
内容比较多,不过也不是很难。
参考GM的这篇博客吧,希望你能得到一些启示!
http://blog.eeworld.net/gooogleman/archive/2008/11/07/3235862.aspx
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

18
 
楼上说的很全了。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 
如何触摸屏长时间使用发生了物理偏移,单单记住CalibrationData是不是就不行了呢,还得再次校准?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

20
 
如果性能差异不大重新校准就可以了,但是我们遇到过在使用过程中按到了较易损坏的地方,导致触摸屏点击偏很大,且永远也无法校准成功,触摸屏废了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表