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事件
- 「技術乾貨」工業觸控式螢幕之觸控式螢幕分類(連載)
- PLC與觸控式螢幕通訊
- 開發板觸控式螢幕測試
- WPF --- 觸控式螢幕下的兩個問題
- 觸控板觸控式螢幕禁止手指縮放,這麼處理才行
- GhostTouch:針對智慧觸控式螢幕的非接觸性攻擊
- .NET 白板書寫延遲-觸控式螢幕報點率
- win10觸控板如何校準_windows10怎樣校準觸控式螢幕Win10Windows
- win10 thinkpad怎麼關閉觸控式螢幕_w10thinkpad如何關掉觸控Win10ThinkPad
- 羅克韋爾AB PVPlus觸控式螢幕使用者自動登出的方法
- win10 macbook的觸控式螢幕右擊失靈怎麼辦Win10Mac
- LVGL庫入門教程01-移植到STM32(觸控式螢幕)
- 如何在觸控式螢幕組態軟體上實時監控農村汙水處理PLC
- 開發觸控式螢幕的頁面時應該注意些什麼問題?
- iPhone XS怎麼開啟輔助觸控小白點?蘋果iPhone螢幕輔助觸控使用教程iPhone蘋果
- jz_2440_電阻屏觸控驅動
- PC系統的觸控式螢幕---IPC377G怎麼下載到PC電腦
- 二次供水PLC系統如何連線觸控式螢幕進行監控並實現故障報警
- PLC同時連線多個觸控式螢幕和電視機顯示器解決方案
- LED螢幕驅動晶片的效能VK1S68C資料介紹晶片
- 如何實現監控手機螢幕?(附原始碼)原始碼
- 抗干擾數顯LED螢幕驅動晶片/數碼管驅動控制器-VK1628 SOP28晶片
- IHS Markit:AMOLED 螢幕驅動晶片發展趨勢淺析晶片
- JS彈幕程式碼分析JS
- 研究發現利用筆和紙記憶勝過觸控筆和電子螢幕
- LED螢幕監控運維管理方案運維
- Android螢幕適配方案分析Android
- ios一句程式碼搞定螢幕旋轉iOS
- 三星智慧音響8月9日亮相:內建Bixby語音、可觸控螢幕
- 使用Powershell對目標進行螢幕監控
- flutter 啟動螢幕使用 Lottie 動畫Flutter動畫
- 通過解讀WPF觸控原始碼,分析WPF插拔裝置觸控失效的問題(問題篇)原始碼
- WebRTC本地分享螢幕,錄製螢幕Web
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux