Why does GET_REPORT on my HID Keyboards sometimes return an empty packet?
Interesting. As a developer of keyboard firmware my guess would be that these boards internally rebuild the report each key-matrix scan cycle without blocking interrupts while doing so. This would work fine if sending the report is initiated by the keyboard controller (it'll just write the new report into the IN pipe buffer), but could cause empty packets if the report is read asynchronously via GET_REPORT (EP0 handler is invoked by an interrupt.)