Просмотр исходного кода

Fix drop key stroke

Keyboard report should be checked if its transfer finishs successfully.
Otherwise key stroke can be missing when other key event occurs
before the last report transfer is done.

Boot protocol 10ms interval probably causes this problem in case
it receives key events in a row within the period. NKRO protocol
suffers less or nothing due to its interval 1ms.
tags/v2.9
Jun Wako 8 лет назад
Родитель
Сommit
8bcddd24f7
1 измененных файлов: 11 добавлений и 6 удалений
  1. 11
    6
      tmk_core/protocol/chibios/usb_main.c

+ 11
- 6
tmk_core/protocol/chibios/usb_main.c Просмотреть файл

} }
osalSysUnlock(); osalSysUnlock();


bool ret;
#ifdef NKRO_ENABLE #ifdef NKRO_ENABLE
if(keyboard_nkro) { /* NKRO protocol */ if(keyboard_nkro) { /* NKRO protocol */
usbPrepareTransmit(&USB_DRIVER, NKRO_ENDPOINT, (uint8_t *)report, sizeof(report_keyboard_t)); usbPrepareTransmit(&USB_DRIVER, NKRO_ENDPOINT, (uint8_t *)report, sizeof(report_keyboard_t));
osalSysLock();
usbStartTransmitI(&USB_DRIVER, NKRO_ENDPOINT);
osalSysUnlock();
do {
osalSysLock();
ret = usbStartTransmitI(&USB_DRIVER, NKRO_ENDPOINT);
osalSysUnlock();
} while (ret);
} else } else
#endif /* NKRO_ENABLE */ #endif /* NKRO_ENABLE */
{ /* boot protocol */ { /* boot protocol */
usbPrepareTransmit(&USB_DRIVER, KBD_ENDPOINT, (uint8_t *)report, KBD_EPSIZE); usbPrepareTransmit(&USB_DRIVER, KBD_ENDPOINT, (uint8_t *)report, KBD_EPSIZE);
osalSysLock();
usbStartTransmitI(&USB_DRIVER, KBD_ENDPOINT);
osalSysUnlock();
do {
osalSysLock();
ret = usbStartTransmitI(&USB_DRIVER, KBD_ENDPOINT);
osalSysUnlock();
} while (ret);
} }
keyboard_report_sent = *report; keyboard_report_sent = *report;
} }

Загрузка…
Отмена
Сохранить