十四、輸入子系統驅動模型
阿新 • • 發佈:2022-01-02
一、概述
輸入子系統驅動模型也是字元裝置驅動的一種模型,是對普通字元裝置驅動的封裝,專門用於輸入型別的裝置。
嵌入式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軸的具體座標值