What does this do or give you that you couldn't get with an FTDI serial to USB cable (or chipset)?
Simple: A usb hot-pluggable hid device. It's essentially a driver implemented in hardware instead of software.
#define KEY_UP 82#define KEY_DOWN 81#define KEY_LEFT 80#define KEY_RIGHT 79#define KEY_SHIFT 225
Hmm. Is the problem that you have sent a make code and are not breaking it (ie are you seeing autorepeat? If you push the button does it act like a keyboard and print a character, pause, and then spam them out?) or are you sending a "make/break" code every time you loop?
// This stops endlessly repeating keystrokes: memset(reportBuffer, 0, sizeof(reportBuffer)); usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
Can you remember if i have to send the keyboard up arrow with some Modifier so it works / behaves like any keyboard?