tmk / tmk_keyboard

Keyboard firmwares for Atmel AVR and Cortex-M
3.99k stars 1.71k forks source link

1ms PollingInterval causes problem with old PC(USB 1.1) #114

Closed tmk closed 10 years ago

tmk commented 10 years ago

At commit 894a387d1fd8c I found this issues.

With BIOS(1.20) of ThinkPad T23 TMK with LUFA-120219 doesn't work. Hitting arrow key offen doesn't register and unregister properly. The key is ignored or it doen't stop. http://www.thinkwiki.org/wiki/Category:T23

T23 seems like drop key report. T23 has old chipset(USB 1.1) and TMK uses 1ms polling rate(PollingInterval in endpoint descriptor). https://github.com/tmk/tmk_keyboard/blob/894a387d1fd8c823b5339e524e1f9336601ce2ef/protocol/lufa/descriptor.c#L309

I confirmed 10ms PollingInterval resolves this issue. I think most keyboards in market use 10ms interval. I checked HHKB pro2, Poker, ThinkPad USB keyboard(SK-8855) and Cherry 3600 all use 10ms. Using 10ms will offer better compatibility for old PCs.

tmk commented 10 years ago

Polling rate in real: When using 10ms PollingInterval value we get Interrupt IN requests with 8ms interval from host. 5ms value causes 4ms interval and 1ms value causes 1ms interval. This may vary depeding on hosts.

tmk commented 10 years ago

Output of lsusb -vvv

PollingInterval: 1ms

      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1

PollingInterval: 10ms

      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
tmk commented 10 years ago

This issue may be relevant to #58.

tmk commented 10 years ago

I think PJRC stack didn't have this problem. It has 10ms interval from the begining.