淺析 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點等的校準,可是沒有源碼,無法通過觀察源碼明白其校準原理。

發佈了40 篇原創文章 · 獲贊 5 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章