1. 目標
使用鼠標模擬按鍵:左鍵相當于"L"、右鍵相當于"S"、"中鍵"相當于 "回車"。
2. 編程
2.1 驅動框架

對于 GPIO 按鍵,是直接構造、注冊一個 input_dev 結構體,在 GPIO 中斷函數里獲得數據。
現在數據來源發生了變化,數據來自 USB 設備,需要做的事情是:
- 構造、注冊 usb_driver
- usb_driver 發現能支持是設備后,它的 probe 函數被調用:
- 構造、注冊 input_dev 結構體
- 獲得數據:
- 構造、提交 URB
- 在 URB 的回調函數里,向 Input 系統上報數據
2.2 實現 usb_driver
仿照 usbmouse.c 如下代碼構造一個 usb_driver 結構體:

核心是:
- id_table:這個驅動能支持哪些設備
- probe 函數:發現能支持的設備后,probe 函數記錄設備信息、注冊輸入設備等等
2.2.1 id_table
id_table 是一個 usb_device_id 數組,示例如下:

usb_device_id 結構體定義如下:
- match_flags:表示要比較哪些信息,可以比較設備 ID、DeviceClass、InterfaceClass 等等
- 根據 match_flags 提供其他信息:比如設備 ID、DeviceClass、InterfaceClass 等等
- driver_info:驅動程序可能用到的一些信息
struct usb_device_id {
/* which fields to match against? */
__u16 match_flags;
/* Used for product specific matches; range is inclusive */
__u16 idVendor;
__u16 idProduct;
__u16 bcdDevice_lo;
__u16 bcdDevice_hi;
/* Used for device class matches */
__u8 bDeviceClass;
__u8 bDeviceSubClass;
__u8 bDeviceProtocol;
/* Used for interface class matches */
__u8 bInterfaceClass;
__u8 bInterfaceSubClass;
__u8 bInterfaceProtocol;
/* Used for vendor-specific interface matches */
__u8 bInterfaceNumber;
/* not matched against */
kernel_ulong_t driver_info
__attribute__((aligned(sizeof(kernel_ulong_t))));
};
2.2.2 probe 函數
probe 函數原型如下:
int (*probe) (struct usb_interface *intf,
const struct usb_device_id *id);
第 1 個參數是"struct usb_interface *"類型,表示匹配到的"USB 邏輯設備"。
第 2 個參數是"struct usb_device_id *"類型,它是 usb_driver 的 id_table 中的某項,表示第 1 個參數就是跟這個 usb_device_id 匹配的。有必要的話,probe 函數里可以從 id->driver_info 得到驅動相關的一些信息。
在 probe 函數,一般要記錄 intf 信息,以后發起 USB 傳輸時會用到 intf 信息。
2.3 實現輸入設備
核心是:分配、設置、注冊一個 input_device 結構體。
2.4 實現數據傳輸
分配、填充、提交 URB,在 URB 的回調函數里上報"input_event"。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
usb
+關注
關注
60文章
8439瀏覽量
284463 -
鼠標
+關注
關注
6文章
597瀏覽量
41705 -
框架
+關注
關注
0文章
404瀏覽量
18422
發布評論請先 登錄
相關推薦
熱點推薦
EZ USB 通用驅動程序說明
EZ_USB 通用驅動程序(本文章中稱為GPD或者是EZ_USB GPD)是用來和基于EZ_USB外設接口的通用設備驅動程序。
發表于 11-06 11:26
?52次下載
Windows USB 驅動程序接口及傳輸方式
Windows USB 驅動程序接口系統中的USB的驅動程序完成許多的工作。實際上對于一些HID的USB設 備,象鍵盤,
發表于 05-06 16:04
?2597次閱讀
CDM20600驅動程序,USB驅動程序和并口驅動應用程序(免費下載)
本文檔的主要內容是CDM20600驅動程序,USB驅動程序和并口驅動應用程序(免費下載)詳細資料概述
發表于 06-06 10:00
?63次下載
USB鼠標驅動程序上機實驗
上機實驗 需要重新配置內核,去掉內核自帶的驅動程序。在內核目錄下執行"make menuconfig": Device Drivers --- > HID support
USB鼠標驅動程序編程
評論