浅析 penmount9000系列 driver

按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为四种,它们分别为电阻式、红外线式、电容感应式以及表面声波式。最常见的两类是电阻式触摸屏和电容式触摸屏。

PENMOUNT 电阻式控制器 按照接口类别 大致分为两类:USB和串口。串口接口的最典型的芯片当属Penmount9000系列,USB接口典型的芯片为Penmount6000系列. 本文主要详细说明penmount9000系列。 penmount9000系列主要通过COM port 传输数据,当我们点击触摸屏时,触摸屏控制器检测到电压的变化,然后将采样的数据经过A/D转换最终通过串口将坐标位置表示出来。

那么从COM port 传输的数据是通过什么格式表示当前坐标的呢? 触摸屏检测到一次触摸 会通过COM port 传输5字节的数据。分别是: 当前的状态(是按下还是松开),X坐标,Y坐标。 现在假设我们通过串口得到的数据存放在是penmount[5]中。 penmount[0]有两个状态,0xFF表示pen down, 0xBF表示pen up。 X-position =penmount[1]*128+penmount[2] Y-position =penmount[3]*128+penmount[4]

有时候从数据得到的坐标表示和实际的X window 所用到的坐标不是完全对应。如有时候需要翻转X或者Y坐标。

知道了从串口传来的数据,在点击屏幕的时候鼠标就可以动了。怎么点击屏幕的时候鼠标总是不太准呢?别急,这是因为屏幕还没有进行校准(calibration). 一般触摸屏要想表示比较准确的坐标都需要进行校准的。 penmount9000系列使用触摸屏校准后得到5个校准因子,分别是 mode,Xmax,Xmin,Ymax,Ymin。 mode 用来表示当前的数据格式于真正表示X Y 坐标需要经过怎样的转换,比如如果校准后mode为5,6,7,8. 那么X和Y需要交换坐标。又比如如果mode为2 ,那么Y坐标需要翻转。 Xmax 表示触摸笔所能达到的最大X坐标值 Xmin 表示触摸笔所能达到的最小X坐标值 Ymax 表示触摸笔所能达到的最大Y坐标值 Ymax 表示触摸笔所能达到的最小Y坐标值

现在我们可以通过校准因子来进行校准了。下面里面的x,y 就是前面获得的未经校准的原始(raw data)坐标,priv→max_x,priv→min_x,priv→max_y,priv→min_y 为校准因子,与Xmax,Xmin,Ymax,Ymin相对应。

priv→screen_width,priv→screen_height 为屏幕分辨率。

if(pmode==5 || pmode==6 || pmode==7 || pmode==8 ) {
temp=x;
x=y;
y=temp;
}

if(pmode==1 || pmode==2 || pmode==5 || pmode==6 ) {
if(x<priv->min_x) x=priv->min_x;
if(x>priv->max_x) x=priv->max_x;
x = ((x- priv->min_x)*priv->screen_width)/(priv->max_x - priv->min_x);
}
else
{
if(x<priv->min_x) x=priv->min_x;
if(x>priv->max_x) x=priv->max_x;
x = ((priv->max_x-x)*priv->screen_width)/(priv->max_x - priv->min_x);
}

if(pmode==1 || pmode==3 || pmode==5 || pmode==7 ) {
if(y<priv->min_y) y=priv->min_y;
if(y>priv->max_y) y=priv->max_y;
y = ((y-priv->min_y)*priv->screen_height)/(priv->max_y - priv->min_y);
}
else
{
if(y<priv->min_y) y=priv->min_y;
if(y>priv->max_y) y=priv->max_y;
y = ((priv->max_y-y)*priv->screen_height)/(priv->max_y - priv->min_y);
}

这个方法用的是平滑的方法校准,并没有用网上提到的通过三个点的坐标数据求转换矩阵的方法。pengmount x86 平台还提供的9点及16点等的校准,可是没有源码,无法通过观察源码明白其校准原理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值