3172|9

101

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CE50的GWES组件有没公开源码?LCD驱动里面的触摸屏坐标(已经知道怎么修正它了)怎么转成系统的坐标?这两个之间的转换关系是? [复制链接]

CE50的GWES组件有没公开源码?LCD驱动里面的触摸屏坐标(已经知道怎么修正它了)怎么转成系统的坐标?这两个之间的转换关系是?

最新回复

BOOL ErrorAnalysis(     INT32   cCalibrationPoints,     //@PARM The number of calibration points     INT32   *pScreenXBuffer,        //@PARM List of screen X coords displayed     INT32   *pScreenYBuffer,        //@PARM List of screen Y coords displayed     INT32   *pUncalXBuffer,         //@PARM List of X coords collected     INT32   *pUncalYBuffer          //@PARM List of Y coords collected     ) {     int     i;     UINT32  maxErr, err;     INT32   x,y;     INT32   dx,dy;     UINT32  errThreshold = MAX_POINT_ERROR;  // Can be overridden by registry entry     UINT32  status, ValType, ValLen;     HKEY    regKey;     // See if there is a Maximum Calibration Error specified in the registry     status = RegOpenKeyEx(                          HKEY_LOCAL_MACHINE,                          __TEXT("HARDWARE\\DEVICEMAP\\TOUCH"),                          0,                          0,                          ®Key);                                                                                if ( status == ERROR_SUCCESS )     {         ValLen = sizeof(errThreshold);                  status = RegQueryValueEx(                                 regKey,                                 __TEXT("MaxCalError"),                                 NULL,                                 &ValType,                                 (PUCHAR)&errThreshold,                                 &ValLen);         // We don't care what happened.  Either we have a new value or we have the default value.         RegCloseKey(regKey);             }     RETAILMSG(1,(__TEXT("Maximum Allowed Error %d:\r\n"),  //2010--3--6  XQH  读取注册表里面的"MaxCalError"=dword:7项                 errThreshold));                                     DEBUGMSG(1,(__TEXT("Calibration Results:\r\n")));     maxErr = 0;     DEBUGMSG(1,(__TEXT("   Screen    =>    Mapped\r\n")));         //==============================================================================================================            for(i=0; i maxErr)         {             maxErr = err;         }     }     //==============================================================================================================                    DEBUGMSG(1,(__TEXT("Maximum error (square of Euclidean distance in screen units) = %u\r\n"),             maxErr             ));     if( maxErr < (errThreshold * errThreshold) )     {        return TRUE;            }     else     {                RETAILMSG(1,(__TEXT("Maximum error %u exceeds calibration threshold %u\r\n"),                maxErr, errThreshold                ));                                        return FALSE;     } } 复制代码 看这段代码的意思应该是把修正后的坐标简单地除于4就是LCD的像素坐标值了.   详情 回复 发表于 2010-3-8 10:32
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
原始的触摸屏坐标的修正是有一个线性关系的。

SX=A1*TX+B1*TY+C1
SY=A2*TX+B2*TY+C2

A1,B1,C1,A2,B2,C2是通过触摸屏校准时那点击的5个十字叉的值计算出来的(也就是注册表里面的触摸屏校准数据的10个数据《5个点》)

看TOUCH驱动触摸屏坐标修正后就通过回调反溃给GWES组件,GWES组件怎么处理?怎么转成系统点的坐标值?

因为比较了触摸屏坐标修正后的值跟AP里面打印的点击坐标值是不一样的。

触摸屏坐标修正后的值比实际的LCD像素大小大的多,所以他们之间肯定有一个转换关系,不知道GWES源码在那里,他们之间的转换关系是什么样的?
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不知道MS有没公开GWES这部分的代码,找了半天没找到。有知道在那里的不?
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

4
 
帮顶下。。


MARK 、 、 、 、
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
GWES Wince6 都没开源。更何况CE5了。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 aaa_tnt 的回复:
GWES Wince6 都没开源。更何况CE5了。

那怎么办?这个转换关系怎么实现,怎么求解?难道通过大批的数据去总结他们之间的关系,那不知道是按线性去总结这个关系,还是按抛物线关系去总结这个关系。
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

7
 
lz一起学习啊,反正当初我搞touch的时候也想搞清楚这个转换方法,结果找不到,只能把知识点停留在PDD层了
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
eeworld的一个相关讨论

[url=http://topic.eeworld.net/u/20080927/16/c26bb2a1-e8bd-4140-9558-cb245d4103fe.html?seed=980137575&r=60327563#r_60327563][/url]

但看了也不明白啊!!!
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

9
 
SX=A1*TX+B1*TY+C1
SY=A2*TX+B2*TY+C2

网上提到的上面这个线性关系,其实只是修正关系式,通过校正时的那5个点的坐标来确定(A1/B1/C1,A2/B2/C2)来进行修正,怎么转成系统的LCD像素坐标是GWES组件里面.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 


  1. BOOL
  2. ErrorAnalysis(
  3.     INT32   cCalibrationPoints,     //@PARM The number of calibration points
  4.     INT32   *pScreenXBuffer,        //@PARM List of screen X coords displayed
  5.     INT32   *pScreenYBuffer,        //@PARM List of screen Y coords displayed
  6.     INT32   *pUncalXBuffer,         //@PARM List of X coords collected
  7.     INT32   *pUncalYBuffer          //@PARM List of Y coords collected
  8.     )
  9. {
  10.     int     i;
  11.     UINT32  maxErr, err;
  12.     INT32   x,y;
  13.     INT32   dx,dy;
  14.     UINT32  errThreshold = MAX_POINT_ERROR;  // Can be overridden by registry entry
  15.     UINT32  status, ValType, ValLen;
  16.     HKEY    regKey;


  17.     // See if there is a Maximum Calibration Error specified in the registry
  18.     status = RegOpenKeyEx(
  19.                          HKEY_LOCAL_MACHINE,
  20.                          __TEXT("HARDWARE\\DEVICEMAP\\TOUCH"),
  21.                          0,
  22.                          0,
  23.                          ®Key);
  24.                         
  25.                         
  26.                         
  27.     if ( status == ERROR_SUCCESS )
  28.     {
  29.         ValLen = sizeof(errThreshold);
  30.         
  31.         status = RegQueryValueEx(
  32.                                 regKey,
  33.                                 __TEXT("MaxCalError"),
  34.                                 NULL,
  35.                                 &ValType,
  36.                                 (PUCHAR)&errThreshold,
  37.                                 &ValLen);
  38.         // We don't care what happened.  Either we have a new value or we have the default value.
  39.         RegCloseKey(regKey);        
  40.     }

  41.     RETAILMSG(1,(__TEXT("Maximum Allowed Error %d:\r\n"),  //2010--3--6  XQH  读取注册表里面的"MaxCalError"=dword:7项
  42.                 errThreshold));
  43.                
  44.                
  45.     DEBUGMSG(1,(__TEXT("Calibration Results:\r\n")));

  46.     maxErr = 0;
  47.     DEBUGMSG(1,(__TEXT("   Screen    =>    Mapped\r\n")));
  48.    
  49.    
  50. //==============================================================================================================   
  51.    
  52.     for(i=0; i
  53.     {
  54.         TouchPanelCalibrateAPoint(  pUncalXBuffer[i],
  55.                                     pUncalYBuffer[i],
  56.                                     &x,
  57.                                     &y
  58.                                     );
  59.         x /= 4;
  60.         y /= 4;

  61.         DEBUGMSG(1,(__TEXT("(%4d, %4d) => (%4d, %4d)\r\n"),
  62.                 pScreenXBuffer[i],
  63.                 pScreenYBuffer[i],
  64.                 x,
  65.                 y
  66.                 ));
  67.                
  68.         dx = x - pScreenXBuffer[i];   //2010--3--6  XQH  这里面有数据吗???
  69.         dy = y - pScreenYBuffer[i];
  70.         
  71.         
  72.         err = dx * dx + dy * dy;
  73.         
  74.         if(err > maxErr)
  75.         {
  76.             maxErr = err;
  77.         }
  78.     }
  79.    
  80. //==============================================================================================================   
  81.    
  82.    
  83.    
  84.     DEBUGMSG(1,(__TEXT("Maximum error (square of Euclidean distance in screen units) = %u\r\n"),
  85.             maxErr
  86.             ));

  87.     if( maxErr < (errThreshold * errThreshold) )
  88.     {
  89.        return TRUE;
  90.       
  91.     }
  92.     else
  93.     {
  94.    
  95.    
  96.        RETAILMSG(1,(__TEXT("Maximum error %u exceeds calibration threshold %u\r\n"),
  97.                maxErr, errThreshold
  98.                ));
  99.                
  100.                
  101.        return FALSE;
  102.     }






  103. }

复制代码



看这段代码的意思应该是把修正后的坐标简单地除于4就是LCD的像素坐标值了.

 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表