tl;博士:
- 为什么键盘上的电源按钮消失了?
- 我在如何使用 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 中启用它,但仍然如此)。
Ps 问的原因是因为我很生气不得不伸手去按电源按钮。我宁愿有一个电源按钮,也不愿有一个无用的滚动锁定或暂停中断。
PS/2 和 USB 键盘上的电源按钮始终只是与其他按键不同的扫描码,不涉及特殊硬件。关机支持仅取决于操作系统监视此扫描代码并触发其正常关机对话框。开机支持涉及固件监视此扫描代码并将其视为按下电源按钮。
由于以下几个原因,它们作为分离式键盘上的不同键已经失宠:
但请注意,某些固件实现确实支持其他开机键序列。例如,我曾经工作的许多系统都会接受Ctrl+Space来触发开机(尽管它们需要其他方法来关闭)。