0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

USB鼠標(biāo)驅(qū)動(dòng)程序編程

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:韋東山老師驅(qū)動(dòng)大 ? 2023-07-17 17:29 ? 次閱讀

1. 目標(biāo)

使用鼠標(biāo)模擬按鍵:左鍵相當(dāng)于"L"、右鍵相當(dāng)于"S"、"中鍵"相當(dāng)于 "回車(chē)"。

2. 編程

2.1 驅(qū)動(dòng)框架

圖片

對(duì)于 GPIO 按鍵,是直接構(gòu)造、注冊(cè)一個(gè) input_dev 結(jié)構(gòu)體,在 GPIO 中斷函數(shù)里獲得數(shù)據(jù)。

現(xiàn)在數(shù)據(jù)來(lái)源發(fā)生了變化,數(shù)據(jù)來(lái)自 USB 設(shè)備,需要做的事情是:

  • 構(gòu)造、注冊(cè) usb_driver
  • usb_driver 發(fā)現(xiàn)能支持是設(shè)備后,它的 probe 函數(shù)被調(diào)用:
    • 構(gòu)造、注冊(cè) input_dev 結(jié)構(gòu)體
  • 獲得數(shù)據(jù):
    • 構(gòu)造、提交 URB
    • 在 URB 的回調(diào)函數(shù)里,向 Input 系統(tǒng)上報(bào)數(shù)據(jù)

2.2 實(shí)現(xiàn) usb_driver

仿照 usbmouse.c 如下代碼構(gòu)造一個(gè) usb_driver 結(jié)構(gòu)體:

圖片

核心是:

  • id_table:這個(gè)驅(qū)動(dòng)能支持哪些設(shè)備
  • probe 函數(shù):發(fā)現(xiàn)能支持的設(shè)備后,probe 函數(shù)記錄設(shè)備信息、注冊(cè)輸入設(shè)備等等

2.2.1 id_table

id_table 是一個(gè) usb_device_id 數(shù)組,示例如下:

圖片

usb_device_id 結(jié)構(gòu)體定義如下:

  • match_flags:表示要比較哪些信息,可以比較設(shè)備 ID、DeviceClass、InterfaceClass 等等
  • 根據(jù) match_flags 提供其他信息:比如設(shè)備 ID、DeviceClass、InterfaceClass 等等
  • driver_info:驅(qū)動(dòng)程序可能用到的一些信息
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 函數(shù)

probe 函數(shù)原型如下:

int (*probe) (struct usb_interface *intf,
          const struct usb_device_id *id);

第 1 個(gè)參數(shù)是"struct usb_interface *"類(lèi)型,表示匹配到的"USB 邏輯設(shè)備"。

第 2 個(gè)參數(shù)是"struct usb_device_id *"類(lèi)型,它是 usb_driver 的 id_table 中的某項(xiàng),表示第 1 個(gè)參數(shù)就是跟這個(gè) usb_device_id 匹配的。有必要的話(huà),probe 函數(shù)里可以從 id->driver_info 得到驅(qū)動(dòng)相關(guān)的一些信息。

在 probe 函數(shù),一般要記錄 intf 信息,以后發(fā)起 USB 傳輸時(shí)會(huì)用到 intf 信息。

2.3 實(shí)現(xiàn)輸入設(shè)備

核心是:分配、設(shè)置、注冊(cè)一個(gè) input_device 結(jié)構(gòu)體。

2.4 實(shí)現(xiàn)數(shù)據(jù)傳輸

分配、填充、提交 URB,在 URB 的回調(diào)函數(shù)里上報(bào)"input_event"。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7774

    瀏覽量

    262419
  • 鼠標(biāo)
    +關(guān)注

    關(guān)注

    6

    文章

    587

    瀏覽量

    39580
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    396

    瀏覽量

    17270
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux USB鼠標(biāo)驅(qū)動(dòng)程序詳解

    驅(qū)動(dòng)程序(u*** driver)是如何添加到驅(qū)動(dòng)鏈表上去的?在每個(gè) USB 驅(qū)動(dòng)程序的被注冊(cè)時(shí),USB
    發(fā)表于 10-23 12:40

    usb網(wǎng)卡驅(qū)動(dòng)程序下載(萬(wàn)能全集)

    usb網(wǎng)卡驅(qū)動(dòng)程序:ADM8511 USB網(wǎng)卡驅(qū)動(dòng)程序ADM8515 USB網(wǎng)卡驅(qū)動(dòng)程序AS26
    發(fā)表于 09-28 15:40 ?4202次下載
    <b class='flag-5'>usb</b>網(wǎng)卡<b class='flag-5'>驅(qū)動(dòng)程序</b>下載(萬(wàn)能全集)

    海信手機(jī)usb驅(qū)動(dòng)程序

    海信手機(jī)usb驅(qū)動(dòng)程序
    發(fā)表于 04-30 12:22 ?5次下載

    天語(yǔ)手機(jī)usb驅(qū)動(dòng)程序

    天語(yǔ)手機(jī)usb驅(qū)動(dòng)程序:天語(yǔ)手機(jī)usb驅(qū)動(dòng)程序下載
    發(fā)表于 04-30 12:36 ?792次下載

    EZ USB 通用驅(qū)動(dòng)程序說(shuō)明

    EZ_USB 通用驅(qū)動(dòng)程序(本文章中稱(chēng)為GPD或者是EZ_USB GPD)是用來(lái)和基于EZ_USB外設(shè)接口的通用設(shè)備驅(qū)動(dòng)程序。
    發(fā)表于 11-06 11:26 ?52次下載

    Windows USB 驅(qū)動(dòng)程序接口及傳輸方式

    Windows USB 驅(qū)動(dòng)程序接口系統(tǒng)中的USB驅(qū)動(dòng)程序完成許多的工作。實(shí)際上對(duì)于一些HID的USB設(shè) 備,象鍵盤(pán),
    發(fā)表于 05-06 16:04 ?2255次閱讀

    USB接口驅(qū)動(dòng)程序開(kāi)發(fā)

    介紹USB的優(yōu)點(diǎn)和發(fā)展情況,基于DDK的USB設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu),并結(jié)合開(kāi)發(fā)的ARM 板驅(qū)動(dòng)程序對(duì)關(guān)鍵程序進(jìn)行介紹。
    發(fā)表于 03-19 15:21 ?121次下載
    <b class='flag-5'>USB</b>接口<b class='flag-5'>驅(qū)動(dòng)程序</b>開(kāi)發(fā)

    HC6800的USB驅(qū)動(dòng)程序

    HC6800的USB驅(qū)動(dòng)程序HC6800的USB驅(qū)動(dòng)程序HC6800的USB驅(qū)動(dòng)程序HC6800
    發(fā)表于 12-28 15:28 ?0次下載

    usb驅(qū)動(dòng)程序

    CH340G的USB驅(qū)動(dòng)程序,win7運(yùn)行完全沒(méi)有問(wèn)題。
    發(fā)表于 05-13 10:17 ?69次下載

    CDM20600驅(qū)動(dòng)程序,USB驅(qū)動(dòng)程序和并口驅(qū)動(dòng)應(yīng)用程序(免費(fèi)下載)

    本文檔的主要內(nèi)容是CDM20600驅(qū)動(dòng)程序,USB驅(qū)動(dòng)程序和并口驅(qū)動(dòng)應(yīng)用程序(免費(fèi)下載)詳細(xì)資料概述
    發(fā)表于 06-06 10:00 ?57次下載
    CDM20600<b class='flag-5'>驅(qū)動(dòng)程序</b>,<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)程序</b>和并口<b class='flag-5'>驅(qū)動(dòng)</b>應(yīng)用<b class='flag-5'>程序</b>(免費(fèi)下載)

    Linux USB鼠標(biāo)驅(qū)動(dòng)程序詳解

    驅(qū)動(dòng)程序usb driver)是如何添加到驅(qū)動(dòng)鏈表上去的?在每個(gè) USB 驅(qū)動(dòng)程序的被注冊(cè)時(shí),USB
    發(fā)表于 04-02 14:35 ?711次閱讀

    SDP USB驅(qū)動(dòng)程序安裝程序

    SDP USB驅(qū)動(dòng)程序安裝程序
    發(fā)表于 03-23 10:07 ?14次下載
    SDP <b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)程序</b>安裝<b class='flag-5'>程序</b>

    ADMV1013 USB驅(qū)動(dòng)程序

    ADMV1013 USB驅(qū)動(dòng)程序
    發(fā)表于 03-23 18:29 ?8次下載
    ADMV1013 <b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)程序</b>

    USB鼠標(biāo)驅(qū)動(dòng)程序上機(jī)實(shí)驗(yàn)

    上機(jī)實(shí)驗(yàn) 需要重新配置內(nèi)核,去掉內(nèi)核自帶的驅(qū)動(dòng)程序。在內(nèi)核目錄下執(zhí)行"make menuconfig": Device Drivers --- > HID support
    的頭像 發(fā)表于 07-17 17:35 ?579次閱讀

    USB驅(qū)動(dòng)程序

    USB驅(qū)動(dòng)程序
    發(fā)表于 08-17 11:47 ?54次下載