全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

USB鼠标驱动程序编程

时间:2023-07-17 17:29

人气:

作者:admin

标签: 框架 

导读:1. 目标 使用鼠标模拟按键:左键相当于"L"、右键相当于"S"、"中键"相当于 "回车"。 2. 编程 2.1 驱动框架 对于 GPIO 按键,是直接构造、注册一个 input_dev 结构体,在 GPIO 中断函数里获得数...

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"。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信