S3C2410觸控式螢幕驅動程式碼分析1
/*<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
* s<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3c2410-ts.c
*
* touchScreen driver for SAMSUNG S3C2410
*
* Author: Janghoon Lyu <nandy@mizi.com>
* Date : $Date: 2002/06/04 07:11:00 $
*
* $Revision: 1.1.2.6 $
*
* Based on pt036001b-ts.c
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
* for more details.
*
* History:
*
* 2002-05-27: Janghoon Lyu <nandy@mizi.com>
* - Add HOOK_FOR_DRAG
* - PM 鍐呴潧鍟?鐢哥虎鍟?涔愬彉 紿嶇槫鐖?鎶涜兌椋?鐧葷槫 鑷肩柦婢?
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/poll.h>
#include <linux/spinlock.h>
#include <linux/irq.h>
#include <linux/delay.h>
#include <asm/hardware.h>
#ifdef CONFIG_PM
#include <linux/pm.h>
#endif
/* debug macros */
#undef DEBUG
#ifdef DEBUG
#define DPRINTK( x... ) printk("s3c2410-ts: " ##x)
#else
#define DPRINTK( x... )
#endif
//定義觸控式螢幕筆的狀態,其中PEN_UP 為筆抬起狀態
// PEN_DOWN
為筆按下狀態
//
PEN_FLEETING 為筆滑動狀態
#define PEN_UP 0
#define PEN_DOWN 1
#define PEN_FLEETING 2
/*定義環形緩衝區的大小,環形緩衝區主要用來儲存
應用程式來不及處理的觸控式螢幕動作*/
#define MAX_TS_BUF 16 /* how many do we want to buffer */
#undef USE_ASYNC 1
#define DEVICE_NAME "s3c2410-ts"
#define TSRAW_MINOR 1
typedef struct {
//定義筆的狀態
unsigned int penStatus; /* PEN_UP, PEN_DOWN, PEN_SAMPLE */
TS_RET buf[MAX_TS_BUF]; /* protect against overrun */
/*定義可以儲存16 個事件的環形緩衝區,其每個元素型別為:
typedef struct {
//壓力,這裡被定義為觸控筆動作,即
//上面定義的PEN_UP/PEN_DOWN/PEN_FLEETING 三種
unsigned short pressure;
//橫座標的取樣值
unsigned short x;
//縱座標的取樣值
unsigned short y;
//pad是填充位,這個成員是為了保證整個結構體的大小
//為4 位元組整數倍而使用的
unsigned short pad;
} TS_RET;
*/
unsigned int head, tail; /* head and tail for queued events */
/*
head和tail 用於指向環形緩衝區的頭和尾
*/
wait_queue_head_t wq;
/*Linux 核心的等待佇列是以雙迴圈連結串列為基礎資料結構,與程式排程機制緊密結合,能夠用於
實現核心的非同步事件通知機制。在Linux2.4.21中,等待佇列在原始碼樹include/linux/wait.h 中,
這是一個通過list_head 連線的典型雙迴圈連結串列,如下圖所示。
*/
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
spinlock_t lock;
/*
定義一把自旋鎖。在linux 核心中,鎖有兩種型別,一個是自旋鎖,另外是讀寫鎖自旋
鎖最多隻能被一個可執行執行緒持有。
自旋鎖不會引起呼叫者睡眠,如果一個執行執行緒試圖獲得一個已經被持有的自旋鎖,那
麼執行緒就會一直進行忙迴圈,一直等待下去,在那裡看是否該自旋鎖的保持者已經釋放了鎖,
"自旋"一詞就是因此而得名。 由於自旋鎖使用者一般保持鎖時間非常短,因此選擇自旋而
不是睡眠是非常必要的,自旋鎖的效率遠高於互斥鎖
*/
#ifdef USE_ASYNC
struct fasync_struct *aq;
#endif
#ifdef CONFIG_PM
struct pm_dev *pm_dev;
#endif
} TS_DEV;
static TS_DEV tsdev;
/* 定義觸控式螢幕裝置變數tsdev,該全域性變數用於處理一觸控式螢幕相關事務*/
#define BUF_HEAD (tsdev.buf[tsdev.head])
#define BUF_TAIL (tsdev.buf[tsdev.tail])
#define INCBUF(x,mod) ((++(x)) & ((mod) - 1))
static int tsMajor = 0;
static void (*tsEvent)(void);
#define HOOK_FOR_DRAG
#ifdef HOOK_FOR_DRAG
#define TS_TIMER_DELAY (HZ/100) /* 10 ms */
static struct timer_list ts_timer;
#endif
#define wait_down_int() { ADCTSC = DOWN_INT | XP_PULL_UP_EN | /
XP_AIN | XM_HIZ | YP_AIN | YM_GND | /
XP_PST(WAIT_INT_MODE); }
/*設定觸控式螢幕處於等待中斷模式,筆處於抬起狀態,等待筆按下
*/
#define wait_up_int() { ADCTSC = UP_INT | XP_PULL_UP_EN | XP_AIN | XM_HIZ | /
YP_AIN | YM_GND | XP_PST(WAIT_INT_MODE); }
/*設定觸控式螢幕處於等待中斷模式,筆處於按下狀態,等待筆抬起
*/
#define mode_x_axis() { ADCTSC = XP_EXTVLT | XM_GND | YP_AIN | YM_HIZ | /
XP_PULL_UP_DIS | XP_PST(X_AXIS_MODE); }
/*對X座標進行測量*/
相關文章
- Android 觸控式螢幕驅動Android
- 多點觸控式螢幕驅動
- linux 觸控式螢幕驅動編寫Linux
- 觸控式螢幕響應速度效能分析
- Unity觸控式螢幕觸控事件定義Unity事件
- 「技術乾貨」工業觸控式螢幕之觸控式螢幕分類(連載)
- WHQL ITO觸控式螢幕 用手指觸控世界
- 【6集iCore3_ADP觸控式螢幕驅動講解視訊】6-6 底層驅動之觸控操作
- PLC與觸控式螢幕通訊
- 開發板觸控式螢幕測試
- 嵌入式Linux驅動筆記(十五)------編譯使用tslib支援LCD觸控式螢幕Linux筆記編譯
- 【6集iCore3_ADP觸控式螢幕驅動講解視訊】6-1 工程及程式構架介紹
- win8.1觸控式螢幕關閉教程
- 嵌入式Linux驅動學習筆記(十五)------編譯使用tslib支援LCD觸控式螢幕Linux筆記編譯
- 觸控式螢幕遊戲會把孩子變“殭屍”?遊戲
- WPF --- 觸控式螢幕下的兩個問題
- 觸控板觸控式螢幕禁止手指縮放,這麼處理才行
- GhostTouch:針對智慧觸控式螢幕的非接觸性攻擊
- 樹莓派上安裝2.8寸TFT觸控式螢幕樹莓派
- .NET 白板書寫延遲-觸控式螢幕報點率
- win10觸控板如何校準_windows10怎樣校準觸控式螢幕Win10Windows
- 觸控式螢幕一體機Surface Studio 微軟的新型黑科技微軟
- 亞馬遜統治智慧音響市場 將推觸控式螢幕Echo亞馬遜
- 羅克韋爾AB PVPlus觸控式螢幕使用者自動登出的方法
- win10 thinkpad怎麼關閉觸控式螢幕_w10thinkpad如何關掉觸控Win10ThinkPad
- win10 macbook的觸控式螢幕右擊失靈怎麼辦Win10Mac
- 谷歌開發55英寸4K觸控式螢幕用作白板!任性谷歌
- Raspberry3B + 3.5寸LCD觸控螢幕上手教程
- LVGL庫入門教程01-移植到STM32(觸控式螢幕)
- 手機觸控式螢幕特效javaScript-TouchSwipe(依賴於jQuery庫)說明特效JavaScriptjQuery
- 如何在觸控式螢幕組態軟體上實時監控農村汙水處理PLC
- 蘋果存在重大設計缺陷 iPhone6觸控式螢幕會逐漸失靈蘋果iPhone
- Windows8超級本觸控式螢幕選擇網頁內容的方法Windows網頁
- iPhone XS怎麼開啟輔助觸控小白點?蘋果iPhone螢幕輔助觸控使用教程iPhone蘋果
- 邁克爾·科恩:研究顯示兒童玩觸控式螢幕遊戲多過普通玩具遊戲
- iPhone螢幕出現盲區 使用者無法觸控操作iPhone
- 【6集iCore3_ADP觸控式螢幕驅動講解視訊】6-2 基於FSMC匯流排的ARM與FPGA通訊FPGA
- 亞馬遜正開發一款高階揚聲器?配7英寸觸控式螢幕亞馬遜