Skip to main content
切断并恢复可编程 USB 集线器某个端口的供电。测试用它来迫使被测设备重新枚举,或者模拟一次拔线。

句柄

方法

方法参考

enable() -> Result<()> 和 disable() -> Result<()>

给该端口上电或断电。

toggle() -> Result<bool>

翻转该端口的供电状态。 返回: 端口现在已启用时为 true,现在已禁用时为 false —— 是翻转之后的状态,而不是之前的。

state() -> Result<bool>

读取该端口是否已通电。
返回: 已启用时为 true。
state() 需要 Box 软件 0.29.0 或更高版本。更旧的 Box 会拒绝这个动作,而该 crate 会把这个特定的拒绝转换成 Error::UnsupportedByBox,信息是 the 'state' action on /usb/command requires box software >= 0.29.0; update the box or use toggle/enable/disable。

cycle() -> Result<Option<bool>>

给端口断电,等待,然后重新上电。Box 会观察设备是否重新枚举。需要 Box 软件 0.39.0 或更高版本。
无论走哪条路径,包括失败的情况,结束时端口都是通电的。默认断电时间是 1 秒。cycle_with_off_time(secs) 接受 0.5 到 10 秒之间的其他数值。拿不准时,请选择更长的时间:太短的时间会让被测设备热启动,而没有真正复位。

cycle_report(off_time_secs: Option<f64>) -> Result<UsbCycleReport>

与 cycle() 相同,并且报告还会带上 Box 给出的 outcome(Box 0.49.0 或更高版本)。UsbCycleReport 有三个字段:reconnected,与 cycle() 的返回值相同;outcome;以及 Box 的 message。这个结果能把空端口和 Box 没有观察的端口区分开:

recover() -> Result<()>

在一条命令中途停止之后,给端口重新上电。在 Plugable 扩展坞上,这会给该扩展坞的每一个端口上电。

recover_report() -> Result<UsbRecoverReport>

执行与 recover() 相同的操作,并返回 Box 的报告。 只有当驱动上电的端口不止该 Net 自己的端口时(例如 Plugable 扩展坞),才会设置 ports。它需要Box 软件 0.62.0 或更高版本。较旧的 Box 不发送该列表,所以 ports 为 None。

示例

迫使被测设备重新枚举,并等它回来

在 Plugable 扩展坞上,已断电端口上的设备在供电恢复之前仍然列在总线上。于是上面那个循环可能立刻匹配到旧条目,而被测设备其实还没有重新枚举。请改用 cycle(),它会等待集线器报告重新连接。

受支持的硬件

说明

  • 一个 Net 对应一个端口。对 usb1 做断电重启不会影响该集线器的其他端口。
  • 端口上的设备在总线上的 devnum 会随重新枚举而改变。检查设备是否回来时,请按序列号或 vid/pid 匹配,绝不要按 devnum。
  • 给某个端口断电,可能会移除 Box 用于另一个 Net 的设备。挂在那个端口后面的调试探针或串口适配器会在测试中途消失。