USB 键盘客户机设备驱动程序
用途
支持通用串行总线 (USB) 键盘设备。
语法
#include <sys/usbdi.h>
描述
键盘客户机由与 USB 系统驱动程序 (USBD) 接口的后端和与 AIX® 应用程序 (例如,低功能终端 (LFT) 和 X 服务器应用程序) 接口的前端组成。 USB 键盘客户机驱动程序不知道底层的 USB 适配器硬件。 相反,客户机驱动程序通过 USBD 将控制请求发送到 USB 键盘,并通过 USBD 接收输入事件。 键盘客户机驱动程序通过将其对象数据管理器 (ODM) 预定义数据中的 devid 字段设置为 030101,将自身标识为通用键盘驱动程序。 键盘客户机的父设备是伪设备 usb0。 键盘客户机没有任何子代。 连接到 AIX 系统的每个键盘设备都表示为 /dev/kbd0, /dev/kbd1等。
USB 键盘客户机驱动程序支持多个 USB 键盘设备的连接。 每个设备都在 ODM 中枚举并标记为可用。 客户机驱动程序将所有键盘都视为单一逻辑设备。 将发光二极管 (LED) 设置发送到所有键盘,并且将来自所有键盘的输入事件发送到单个输入环。 由客户机驱动程序进行状态跟踪可确保密钥不会生成连续中断事件,并确保适当地处理类型化延迟和重复。
将为每个 USB 键盘设备创建特殊文件 (例如, /dev/kbd0和 /dev/kbd1等)。 如果至少有一个可用的 USB 键盘设备,那么一个应用程序 (通常是 LFT 或 X 服务器应用程序) 可以打开任何一个 USB 键盘特殊文件。
由于图形子系统的严格配置和排序规则, USB 系统设备驱动程序配置方法对键盘提供了特殊处理。 当 USB 主机控制器和图形适配器均处于可用状态且不存在现有键盘时, USBD 确保至少定义了一个 USB 键盘实例。 USB 键盘客户机驱动程序使用 USBD_OPEN_DEVICE_EXT ioctl 操作来打开生成有效句柄的设备,即使没有 USB 键盘连接到系统也是如此。 如果没有键盘设备,并且客户机驱动程序将该设备视为已断开连接,那么 ioctl 操作将返回 EAGAIN 值。 当您插入 USB 键盘时, USBD 会对键盘客户机进行重新连接回调,并且设备已初始化,以允许输入事件流向 LFT 和 X 服务器应用程序。
与设备相关的子例程
USB 适配器设备驱动程序仅支持 open, close, ioctl和 config 子例程。
打开和关闭子例程
open 子例程用于在调用者和键盘客户机驱动程序之间创建通道。 键盘特殊文件支持两个这样的通道。 正常处理 open 子例程调用,但忽略 OFlag 和 Mode 参数。 键盘支持来自内核进程的 fp_open 请求。 对键盘客户机驱动程序进行多路复用,以便在 LFT 和 X 服务器应用程序之间有序地更改控制。 最近打开的键盘通道是要将输入事件发送到的活动通道。 一次只能打开内核方式中的一个通道。 USB 键盘客户机支持多个 USB 键盘设备的连接。 因此,可以定义一个或多个特殊文件。 如果至少有一个可用的 USB 键盘设备,那么应用程序 (通常是 LFT 或 X 服务器) 可以打开 USB 键盘的任何一个特殊文件,因为键盘客户机驱动程序忽略了较小的数字规范。 但是,无论可用 USB 键盘设备的数量如何,都只能定义两个通道。
close 子例程调用用于结束通道。
读写操作
键盘客户机驱动程序不支持 read 和 write 操作。 对驱动程序的特殊文件执行 read 或 write 操作,就像对 /dev/null 文件执行 read 操作或 write 操作一样。
ioctl 子程序
| 操作 | 描述 |
|---|---|
| IOCINFO | 返回描述设备的 devinfo 结构 (在 sys/devinfo.h 头文件中定义)。 结构 (devtype) 的第一个字段设置为 DD_INPUT 值; 其余结构设置为零。 |
| KSQUERYID | 查询键盘设备标识。 |
| KSQUERYSV | 查询键盘服务向量。 |
| KSREGRING | 注册输入环。 |
| KSRFLUSH | 清空输入环。 |
| KSLED | 设置或重置键盘指示灯。 |
| KSVOLUMENT | 设置警报卷。 |
| KSALARM | 听起来很惊恐 |
| KSTRATE | 设置类型化速率。 |
| KSTDELAY | 设置类型化延迟。 |
| KSKAP | 启用或禁用保持活动轮询。 |