Skip to content

HidKeyboard 示例在 Windows 系统重启后设备不工作的情况 #187

@walklinewang

Description

@walklinewang

在 Windows 系统中接入设备可以正常发送按键,但是当系统重启后就不能正常发送了,只能重新拔插才能解决。

网上搜索了一下大概解释为,Windows 系统重启时会向相关设备发送 RESET 信号,然后设备自行处理相关事务,我感觉应该是库中缺少了这部分响应的代码?

我使用了 TRAE 提供的修改建议,问题就解决了,但它的解决思路不是处理 RESET 信号,而且在USB_EP1_send()函数中检测超时的部分直接复位UpPoint1_Busy标志位,具体修改如下:

修改前:

修改后:

if (waitWriteCount >= 50000) {
    UpPoint1_Busy = 0; // Reset busy flag if timeout
    return 0;
}

同时还要复位键盘协议和键盘灯状态

if (UIF_BUS_RST) {
UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
UEP1_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;
USB_DEV_AD = 0x00;
UIF_SUSPEND = 0;
UIF_TRANSFER = 0;
UIF_BUS_RST = 0;
UsbConfig = 0;
// Clear interrupt flag
}

keyboardProtocol = 1;
keyboardLedStatus = 0;

我没有测试其它示例代码,不过我想它们应该也有同样的问题吧?所以我就没发 PR(其实也不会哈哈)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions