1. 程式人生 > 其它 >十四、輸入子系統驅動模型

十四、輸入子系統驅動模型

一、概述

輸入子系統驅動模型也是字元裝置驅動的一種模型,是對普通字元裝置驅動的封裝,專門用於輸入型別的裝置。

嵌入式linux系統中的輸入型別裝置:按鍵、滑鼠、鍵盤、觸控式螢幕、遊戲手柄、手寫板等等。

二、輸入子系統驅動模型的優點

  • 簡化普通字元裝置驅動的設計步驟
  • 給應用程式提供統一的標準介面。硬體平臺不同,驅動程式不同,但是驅動給應用程式的介面是相同的,應用程式是相同的。

三、檢視輸入裝置

1、輸入裝置的裝置檔案

輸入裝置的主裝置號都是13,次裝置號不同。

2、裝置名稱

3、檢視輸入裝置驅動資訊

4.簡單讀取輸入裝置檔案的內容

[root@GEC6818 /]#cat /dev/input/event0

四、應用程式如何讀取驅動提供的資料

對於輸入子系統驅動模型,驅動程式提供應用程式的是一個統一格式的結構體。

struct input_event {
	struct timeval time;    //輸入時間發生的時間戳
	__u16 type;              //輸入裝置的型別    
	__u16 code;             //   
	__s32 value;
};     

結構體成員說明:

(1)time:輸入事件發生的時間戳。

(2)type:輸入裝置的型別。

#define EV_SYN			0x00-----同步型別的事件,按鍵或觸控式螢幕每次動作都會觸發一次同步型別的事件
#define EV_KEY			0x01----按鍵型別的事件,鍵盤或滑鼠的左右鍵
#define EV_REL			0x02----相對位移事件,滑鼠滑動
#define EV_ABS			0x03----絕對位移事件,觸控式螢幕的點選
#define EV_MSC			0x04
#define EV_SW			0x05
#define EV_LED			0x11
#define EV_SND			0x12
#define EV_REP			0x14
#define EV_FF			0x15
#define EV_PWR			0x16
#define EV_FF_STATUS		0x17
#define EV_MAX			0x1f
#define EV_CNT			(EV_MAX+1)

(3)code:輸入事件的編碼

  • 如果type==EV_ABS(絕對位移),測code表示的是座標軸方向。
/*
 * Absolute axes
 */

#define ABS_X			0x00----x座標軸
#define ABS_Y			0x01----y座標軸
#define ABS_Z			0x02
  • 如果type==EV_REL(相對位移),那麼code表示的是座標軸方向
#define REL_X			0x00----x座標軸
#define REL_Y			0x01----y座標軸
#define REL_Z			0x02----z座標軸
  • 如果type==EV_KEY,那麼code表示的是具體哪一個按鍵
#define KEY_1			2
#define KEY_2			3
#define KEY_3			4
#define KEY_4			5
#define KEY_5			6

#define KEY_A			30
#define KEY_S			31
#define KEY_D			32
#define KEY_F			33

(4)value

如果type==EV_KEY && code == KEY_A,那麼value表示的是按鍵A的狀態:0----鬆開,1----按下,2---長按
如果type==EV_ABS && code == ABS_X,那麼value表示的是X軸的具體座標值
				&& code == ABS_Y,那麼value表示的是Y軸的具體座標值