HID vs MIDI
Most of the DJ controllers on the market today can be sorted in two categories: MIDI controllers and HID controllers.
Some controllers even provide both interfaces.
But what exactly is the difference between MIDI and HID, and when to use which?
The MIDI interface is the old legacy interface, that was developed many years ago to let digital musical instruments communicate together.
It's based on short "messages" that usually represent a button pressed or released, or the movement of a slider.
MIDI is still used by some manufacturer because some competitor DJ software are still not compatible with HID.
But, the main problem with MIDI, is that it cannot track fast movements, and therefore is very ill-adapted for controllers with jog-wheels.
Windows MIDI stack has a built-in speed limit, and will likely crash if it receives MIDI messages too fast.
On Windows VISTA, it will crash much faster than on Windows XP, which requires manufacturers who still want to implement MIDI for their jog-wheel controllers, to implement different settings for latency depending on the operating system, and hope that it will be enough not to crash for the majority of users.
HID (Human Interface Device), is a sub-protocol of the USB protocol, that is used by devices whose function is to let the humans interact with the computer. Mouse, keyboard, joystick, are examples of HID devices.
The HID protocol defines a memory block of an arbitrary length, where each bit or group of bits can represent a button, a slider or a jogwheel. The device writes in this memory according to the state of its elements, and the computer reads the memory block whenever something changes.
The conceptual difference between HID and MIDI is that HID is a "pull" model, where the software application will require data whenever it is ready to process them, whereas MIDI is a "push" model, where the controller will force-feed the application with data whether it's ready to process it or not.
This results in a better latency in HID, and allow the controller to have fast-moving elements like jog-wheel, without risking to crash the operating system.
It also let the controllers implement more extensive LCD displays with lines of text etc, and let the application use it, without the usual MIDI bandwidth problems.
Both protocols are natively supported by all versions of Windows or MacOS, and don't require any specific driver to install.
So, to summarize, the MIDI interface is an old protocol, that can still be safely used for simple controllers that have only buttons, sliders and LEDs, but is ill-advised for controllers with jog-wheels or LCD displays.
And the HID interface is a newer protocol, better suited for more complicated controllers, but that might not be compatible with older DJ software (but is compatible with VirtualDJ of course).
Implementing new controllers in VirtualDJ 6