did you have any thoughts on the additional correction posted by user cisar.ivo.001 in the post regarding the "flood" of interrupts? I have tried both with this suggestion and without, and cannot see any difference.
While "USBD_HID_SendReport()" (ie. "DCD_EP_Tx()") is called for a single-packet transfer (64 bytes or less), like your case, there is no difference between both fixes.
But DCD_EP_Tx() is capable to send a transfer of greater size (more than 64 bytes), by splitting the transfer into two or more transactions. When your firmware passes greater transfer size to DCD_EP_Tx(), which spans three or more transactions, cisar.ivo.001's fix should fail. In his fix, the first FIFO empty interrupt masks this interrupt. Though the second transaction is filled to the FIFO by the first FIFO empty interrupt, the third and latter transactions are not passed to the FIFO, because no more interrupt occurs.
As cisar.ivo.001 pointed out in his above topic,
CLEAR_IN_EP_INTR(1, emptyintr) line does nothing, because this flag is read-only.
As this line is just redunant, you may delete this line.
But when this line is replaced as cisar.ivo.001 said, it introduces another bug, as explained above.
Tsuneo