forked from tenbaht/sduino
-
Notifications
You must be signed in to change notification settings - Fork 95
Open
Description
在 Windows 系统中接入设备可以正常发送按键,但是当系统重启后就不能正常发送了,只能重新拔插才能解决。
网上搜索了一下大概解释为,Windows 系统重启时会向相关设备发送 RESET 信号,然后设备自行处理相关事务,我感觉应该是库中缺少了这部分响应的代码?
我使用了 TRAE 提供的修改建议,问题就解决了,但它的解决思路不是处理 RESET 信号,而且在USB_EP1_send()函数中检测超时的部分直接复位UpPoint1_Busy标志位,具体修改如下:
修改前:
Lines 191 to 193 in c8d35e3
| if (waitWriteCount >= 50000) | |
| return 0; | |
| } |
修改后:
if (waitWriteCount >= 50000) {
UpPoint1_Busy = 0; // Reset busy flag if timeout
return 0;
}同时还要复位键盘协议和键盘灯状态
Lines 457 to 469 in c8d35e3
| 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
Labels
No labels