1 个不稳定版本

0.1.0 2024 年 5 月 26 日

#351硬件支持

MITGPL-2.0-only

17KB
278

hid-feature

hid-feature 是一个命令行工具,用于显示和更改 HID 设备上的特性报告。

这是对来自 hid-tools 的 hid-feature 的 Rust 重新实现

此工具需要读取和写入 /dev/hidraw 节点的权限,通常这意味着需要以 root 身份运行。

用法

使用 list-devices 查找设备的 hidraw 节点

$ hid-feature list-devices
Available HID devices:
/dev/hidraw5  - Logitech USB Receiver
/dev/hidraw0  - Yubico YubiKey OTP+FIDO+CCID
/dev/hidraw1  - Yubico YubiKey OTP+FIDO+CCID
/dev/hidraw2  - Microsoft Microsoft Optical Mouse with Tilt Wheel

然后查看设备的 HID 特性和它们的当前值

$ hid-feature list /dev/hidraw2
Report ┃                      Usage                       ┃ Bits ┃ Bit Range ┃ Value Range ┃ Count ┃ Value ┃ Bytes
━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━╇━━━━━━
  23   │ Vendor Defined Page 0xFF00 / Vendor Usage 0xff06 │  2   │   8..=9   │    0..=1    │   1   │     1 │ 01
  23   │ Vendor Defined Page 0xFF00 / Vendor Usage 0xff04 │  1   │  12..=12  │    0..=1    │   1   │     0 │ 01
  24   │ Vendor Defined Page 0xFF00 / Vendor Usage 0xff08 │  1   │   8..=8   │    0..=1    │   1   │    -1 │ 01
  18   │ Generic Desktop / Resolution Multiplier          │  2   │   8..=9   │    0..=1    │   1   │     1 │ 01

在这个例子中,我们可以看到特性报告 18 在位 8 和 9 上有一个 2 位值,它是分辨率乘数(用于高分辨率滚轮滚动)。它设置为逻辑值 1。

让我们将其设置为 0 以获得此设备上的笨拙滚动!

要设置特性报告中的给定字节,设置十六进制值或使用 xx 保持设置不变。

$ hid-feature set /dev/hidraw2 --report-id=18 xx 00

在这个例子中,ID 为 18 的报告的第二字节设置为值 0x01,所有其他值保持不变。

请注意,如果一个字节由多个不同的用法组成,则调用者负责将字节组合为正确的值。例如,在特性报告 23 中,我们可以看到位 8+9 和位 12 上有两个供应商定义的用法。

# Set bits 8/9 and bit 12 to 1
$ hid-feature set /dev/hidraw2 --report-id=23 xx 11
# Set only bits 8/9 but not bit 12 
$ hid-feature set /dev/hidraw2 --report-id=23 xx 01
# Set only bit 12 but not bits 8/9
$ hid-feature set /dev/hidraw2 --report-id=23 xx 10

为了简化这一点,该字段占用的字节值以十六进制值的形式打印在 list 输出的 Bytes 标题下(01

例如

  24   │ Vendor Defined Page 0xFF00 / Vendor Usage 0xff08168..=230..=65535143828 │ ab 34

依赖关系

~2-10MB
~99K SLoC