总结:
- 为什么键盘上的电源按钮消失了?
- 我对使用 USB 外围设备关闭主机的方法是否正确?
- USB 外围设备可以打开主机吗?如果可以,它会发送哪些字节?
为什么我再也看不到 USB 键盘上的电源按钮了?我觉得它们在 PS/2 键盘上很常见。
这是 USB 协议的限制吗,即不存在合适的数据包“ok host, power off”?
我确实在 HID 使用表 (v1.12,第 4.5.1 节) 中找到了“系统控制”,但 HID 本身 (v.11,第 4.2 节) 对我来说仍然太模糊了。
“由于报告描述符的解析器代表了大量代码,因此需要一种更简单的方法来识别需要 BIOS 支持的设备(启动设备)的设备协议。HID 类设备使用子类部分来指示支持鼠标设备或键盘的预定义协议的设备(即,该设备可用作启动设备)。可以扩展启动协议以包含 BIOS 无法识别的附加数据,或者设备可以支持供 HID 类驱动程序使用的第二个首选协议。bInterfaceSubClass 成员声明设备是否支持启动接口,否则为 0。”
子类代码说明:
- 0 无子类
- 1 启动接口
- 子类 2-255 保留”
所以如果我理解正确的话,键盘需要发送一个bInterfaceSubClass
设置为 1 的描述符,以及协议代码 1(键盘)?
当按下电源按钮时,它会发送扫描码 0x66(KEY_POWER)。
我的断言正确吗?如果正确的话,这似乎不是什么大问题,那么为什么我再也找不到带电源按钮的键盘了?
不过,这只是关闭电脑而已。有没有办法让 USB 设备启动主机?这曾经可以通过 ps2 键盘实现(当然,您通常必须在 BIOS 中启用它,但仍然可以)。
附言:之所以问这个问题是因为我很讨厌必须伸手去按电源按钮。我宁愿有一个电源按钮,而不是无用的滚动锁定或暂停键。
答案1
PS/2 和 USB 键盘上的电源按钮始终只是与其他键不同的扫描代码,不涉及任何特殊硬件。关机支持仅依赖于操作系统监视此扫描代码并触发其正常关机对话框。开机支持涉及固件监视此扫描代码并将其视为按下的电源按钮。
它们已经不再是分离的键盘有几个原因:
- 大多数用户实际上并不怎么使用它们。主要用例要么是处理一台您无法轻松到达机箱按下电源按钮的计算机,要么是当您处理 KVM 切换器上的多个并非始终开启的系统时,这两种情况都不常见(尤其是因为现在很多人暂停到 RAM 而不是真正关闭,所以他们通常不需要按下电源按钮)。
- 它占用了额外的空间。在类似于我用来输入此内容的 Logitech Wave 人体工学键盘之类的东西上,由于按键的排列方式,可以使用一些额外的空间,但对于大多数人倾向于喜欢的紧凑型设计(尤其是无数字键设计),通常没有太多空间放置额外的按键(尽管在Fn某些情况下,他们也许可以将其添加为带有按键的和弦键序列)。
- 对于 USB 设备,需要不可忽略的功耗和额外的控制逻辑来支持这一点。USB 是真的平均而言耗电量较大(这也是为什么许多 x86 笔记本电脑仍然在键盘和触控板连接中使用 PS/2 而不是 USB 的原因之一(尽管有些笔记本电脑出于类似原因正在转向 I²C)),而且它是一种更为复杂的协议(您不能只观察线路上的特定信号序列,您必须实际与设备通信)。由于耗电量和逻辑要求,这使得将其用于 USB 设备有些不切实际。
但请注意,某些固件实现确实支持其他开机键序列。例如,我以前工作过的许多系统都接受Ctrl+Space来触发开机(尽管它们需要其他关机方法)。