HID Keyboard连续发送为什么会错位?CH571

1656496831174201.png像这样连续发送字符,中间总会出现错位的情况,为什么呢?怎么解决?

我这里使用了HID_KBD的例程进行了尝试,没有出现你说的这个现象。上述程序你是做了什么修改出现这个现象的吗,可以具体描述一下。

2dcdd28de1c162e01b9910460435026.jpg2dcdd28de1c162e01b9910460435026.jpg


? ?多谢 @TECH_Lpc!我是这样发送的:


? ? if(events & START_REPORT_EVT)

? ? {

? ? ? ? ? ? if(send_index != save_index)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? res = hidEmuSendKbdReport(send_buffer[send_index]);

? ? ? ? ? ? ? ? send_index++;

? ? ? ? ? ? ? ? res |= hidEmuSendKbdReport(0);

? ? ? ? ? ? ? ? if(send_index >= MAX_BUFFER_LEN)

? ? ? ? ? ? ? ? ? ? send_index = 0;

? ? ? ? ? ? ? ? if(res == blePending)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? send_failed = 1;

? ? ? ? ? ? ? ? ? ? UART0_SendString("set failed\r\n", 12);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? send_failed = 0;

? ? ? ? ? ? ? ? tmos_start_task(hidEmuTaskId, START_REPORT_EVT, 35);

? ? ? ? ? ? ? ? return (events ^ START_REPORT_EVT);

? ? ? ? ? ? }

? ? }

主要改动应该是tmos_start_task(hidEmuTaskId, START_REPORT_EVT, 35);的时间由原来的2000改成35了,原来太慢了,我要求快速发送


调用这个tmos的任务速度较快,同时连接间隔的速度没这么快,两者无法匹配,所以就导致了丢数据。可以试试看连接间隔能不能降低,同时这里的任务时间多尝试选择一个合适不丢包的。

可以在这里加上一个判断,是否发送有问题,如果不为0则丢包了。

image.png

同时,我们所提供的只是参考例程。应用到项目中时需要先将键值放入ringbuf缓存中,使用任务去发送。




只有登录才能回复,可以选择微信账号登录