歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

S3C6410開發:利用觸摸屏獲取事件坐標

近段時間一直在做SDL方面的東西,利用五一小假,做了幾個小游戲....,在這給大家說說心得吧,以為做出來的東西是要在開發板上工作的...所以也就對觸摸屏這塊下了點功夫。首先就說說如何讓我們自己的程序也享受觸摸屏帶來的樂趣.

我用的是S3C6410開發板,在/dev下有觸摸屏設備event1或者是event0這個是是具體情況而定的。我們都知道在linux下,一切設備皆文件,當我們明白了這點的時候,你就會發現問題並不像我們想象中的那麼復雜...我們可以查看我們的觸摸屏頭文件tslib.h;這個裡面有很詳細的內容,裡面有兩個結構體是我們在程序中要用到的..關於其具體介紹在我的另一篇文章中有詳細的介紹,http://www.linuxidc.com/Linux/2012-07/66848.htm感興趣的可以看看,我就不再在這裡累贅了。

當然了,我們要操作這個設備,那我們自然是要以文件方式打開喽..
在tslib.h中有函數ts_open;如果成功打開後就返回一個句柄,當然了這是我的理解了。
進而進行配置,ts_config函數;
剩下的工作就是我們讀取觸摸屏信息樓。自然我們會想到要ts_read。這樣一切都搞定了,但程序在我們的開發板上運行以後,我們發現其結果並不是我們想要的。
因為我們並沒有消抖,我們自己感覺按下了一次,但在程序中出來了很多次..這個屬正常現象,可是在我們的程序中是不需要這種正常現象的,那該怎麼辦呢?
你可以自己設計一個新算法,,來獲取一個適當的額值,我的方法是只取第一個值,將其余的值都捨棄,二這種辦法最好的實現方法就是標記了,下面就以程序來說明具體問題...

void *getCtrlMessage(void *junk)
{
 int Flag = 1;
    ts = ts_open("/dev/event1", 0);
 ts_config(ts)
 for(;;)
 {
  if(ts_read(ts , &sample, 1))
  {
   if((sample.pressure) && (Flag == 1))
   {
    comparison(sample, RectArray, &virtualValue);
       Flag = 0; //防止處理那些由於抖動所產生觸摸點信息  
   }
   if(sample.pressure == 0)
    Flag = 1;
  }           
 }
 ts_close(ts);      
}

在最後的最後要提醒一點就是,當程序結束以後一定要記著close喲....

Copyright © Linux教程網 All Rights Reserved