Das grundlegende Problem ist, dass USB ziemlich Timing-kritisch ist.
Wenn du also die USB-Verbindung benutzen willst (oder keine Lust darauf hast, dass Windows rumnörgelt wg. "Gerät nicht erkannt etc.), musst du dafür sorgen, dass die USB-Funktionen immer ihr Timing einhalten können.

Dummerweise schließt das die Verwendung von Interrupts (bis auf wenige Ausnahmen) fast immer aus.

Zu konkreten Problemen mit deinem Source kann ich dir leider aus Zeitmangel gerade nicht helfen.

mfG
Markus