Skip to content

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

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(其实也不会哈哈)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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