将输出发送到设备以更改 Logitech 中的频道 mouse/keyboard

Send output to a device to change channel in Logitech mouse/keyboard

我有支持多设备切换的罗技键鼠。 我缺少的功能是通过 运行 命令或快捷方式同时切换鼠标和键盘。

请问是否可以将输出发送到鼠标和键盘以更改其通道?如果是这样,你能指导我怎么做吗?

我没有USB HID的经验,但我使用busdog工具嗅探输出,我发现每次按下一个键从第一个频道切换到第二个频道时,都会发送以下代码。

代码:

10 03 41 04 71 8a 40

之后,我尝试使用名为 hidapitester 的命令行工具将代码发送到键盘,希望它能改变频道。很遗憾没有结果。

$ hidapitester --vidpid 046D/C52B --list

046D/C52B: Logitech - USB Receiver
046D/C52B: Logitech - USB Receiver
046D/C52B: Logitech - USB Receiver
046D/C52B: Logitech - USB Receiver

Opening device, vid/pid: 0x046D/0xC52B
Closing device


$ hidapitester --vidpid 046D/C52B --open --length 7 --send-output 0x10 0x03 0x41 0x04 0x71 0x8a 0x40 --read-input

Opening device, vid/pid: 0x046D/0xC52B
Writing output report of 7-bytes...wrote -1 bytes:
 10 00 00 00 00 00 00
Reading 7-byte input report 0, 250 msec timeout...read -1 bytes:
Closing device

更新:

下面我在按下一个键从第一个频道切换到第二个频道后添加跟踪日志:

Id  Type                        Time        Length  Hex
24  In  (USB URB Function: 9)   0.000000    20      11 03 08 20 00 d2 01 00 00 00 00 00 00 00 00 00 00 00 00 00
29  R                           0.000377    20      11 03 08 20 00 d2 01 00 00 00 00 00 00 00 00 00 00 00 00 00
24  In  (USB URB Function: 9)   0.291648    7       10 03 41 04 71 8a 40
28  R                           0.000449    7       10 03 41 04 71 8a 40

你捕获的代码是切换的结果(实际上不是切换的命令)——你需要使用不同的代码来使其切换——如下(归功于@大卫施赖伯):

10 [device index] 08 10 [channel index] 00 00 00
  • 第一项必须是 10
  • [设备索引] 从 1 开始 - 取决于您的设备注册顺序(因此需要反复试验)
  • 08 和 10 实际上可以在很大范围内变化 - 我使用 09 和 11,这似乎也有效!
  • [Channel Index] 从 0 开始 - 与 Keyboard/Mouse
  • 上的 1、2、3 直接相关

此外(当然在 windows 上)您需要在 hidapister 中指定 usageusagePage 参数。

所以这对我有用 - 将我的鼠标(设备 #1 = 0x01)切换到通道 3 (0x02)

hidapitester.exe --vidpid 046D:C52B --usage 1 --usagePage 0xFF00 --open --length 7 --send-output 0x10,0x01,0x09,0x11,0x02,0x00,0x00

您可以在此处找到更多非常有用的信息:https://github.com/Logitech/logi_craft_sdk/issues/28

感谢您的帮助 post!建立在@Andy Blackman 的 post 以上:

我设法让这个适用于我的设置,并希望 post 我的发现,以防它帮助其他人进行类似的设置:

键盘:罗技 Ergo K860

鼠标:罗技 MX Vertical

我的用例是使用脚本在两个系统之间切换我的键盘和鼠标。两个系统都有一个罗技统一接收器,我似乎用它代替蓝牙更好。


以下是我使用的命令:

在我的辅助系统上,我有一个脚本可以切换到我的第一个系统。该脚本运行以下命令: 切换到 Logitech Ergo K860 键盘的通道 1: ./hidapitester --vidpid 046D:C52B --usage 0x0001 --usagePage 0xFF00 --open --length 7 --send-output "0x10,0x01,0x09,0x1c,0x00,0x00,0x00"

切换到 MX 垂直鼠标的通道 1: ./hidapitester --vidpid 046D:C52B --usage 0x0001 --usagePage 0xFF00 --open --length 7 --send-output "0x10,0x02,0x0c,0x1c,0x00,0x00,0x00"

然后在我的第一个系统上,我有一个脚本可以切换到第二个系统: 切换到 Logitech Ergo K860 键盘的通道 2: ./hidapitester --vidpid 046D:C52B --usage 0x0001 --usagePage 0xFF00 --open --length 7 --send-output "0x10,0x01,0x09,0x1c,0x01,0x00,0x00"

切换到 MX 垂直鼠标的通道 2: ./hidapitester --vidpid 046D:C52B --usage 0x0001 --usagePage 0xFF00 --open --length 7 --send-output "0x10,0x02,0x0c,0x1c,0x01,0x00,0x00"


这里是命令 --send-output 部分的粗略剖析(注意下面的例子是切换到通道 1):

罗技 Ergo K860

Header Receiver Slot ID Const/Magic Number Target Channel Padding Padding
0x10 0x01 0x09 0x1c 0x00 0x00 0x00

MX 垂直

Header Receiver Slot ID Const/Magic Number Target Channel Padding Padding
0x10 0x02 0x0c 0x1c 0x00 0x00 0x00

一些注意事项:

  • 接收器插槽: 基于 1 的索引,对应于与罗技优联接收器配对的设备。这将根据您的设置而有所不同。如果您需要检查此项,下载罗技的统一软件可能会有所帮助。或者您可以尝试暴力破解它,因为最多只有 6 台设备可以与统一接收器配对。
  • ID: 发现这是我的 time-consuming 部分。我认为这取决于罗技设备的 model/type。我通过监控 USB 流量通过反复试验发现了这一点。请注意,键盘和鼠标的 ID 在我的例子中是不同的。
  • 目标频道:从 0 开始的索引,对应于您希望罗技设备切换到的频道。
  • Const/Magic 编号: 免责声明:我不完全确定是什么决定了这部分消息,但对于我来说是 0x1c。

希望对您有所帮助! :)