This repository contains the study of the Pioneer DJM-850 Windows driver and setting utility. The aim of this study is to understand how the computer and the device are communicating hover USB, in order to support it on a GNU/Linux system, as Pioneer do not plan to write anything for this platform.
The reverse engineering process and results are exposed in this repository.
Table of contents :
- Workstation setup
- USB device specifications
- Windows DJM-850 Setting Utility
- Plugged in idle behavior
- DVS (Digital Vinyl System) usage on Windows
- Roadmap
- Linux support
- Firmware and driver versions
- Thank yous
- Legal notices
- Windows DJM-850 Setting Utility :
- Study the discussion when plugging in the device to the computer.
- Study the discussion when plugging out the device from the computer.
- Study the
Mixer input
tab and determine the communication for the available options. - Study the
Mixer output
tab and determine the communication for the available options. - Study the
ASIO
tab and determine the communication for the available options. - Explain the autolaunch behavior of the Setting Utility.
- Plugged in idle behavior :
- Study the transmitted messages when the mixer is plugged into the computer without being used (neither by user nor opened GUI software).
- DVS (Digital Vinyl System) usage on Windows :
- Determine how the timecode signal is sent to the computer, and how the computer sends music signal to the mixer.
- Determine how the left and right audio channels are modelized in the digital audio signal.
- Determine how the USB
1/2
,3/4
,5/6
and7/8
signal routing is modelized. - Determine how the framerate is modelized and used.
- Determine how the audio buffer is used.
I have no plans to study the behavior of MIDI communications (I'm mostly
interested into DVS), so feel free to submit pull requests with your
results. However, by looking a the
USB device specifications,
the MIDI interface (communicating on endpoint 7) does not seem to be a
Vendor specific class
, so MIDI may already be supported out of the box.
The Linux kernel was updated to add support for this mixer :
- Fix Pioneer DJM devices
URB_CONTROL
request direction to set samplerate, scheduled for Linux 5.12. - Add Pioneer DJM-850 support, scheduled for Linux 5.13 :
You can now use the mixer on GNU/Linux and specify the USB output options
(as on the Mixer output
tab of the Setting Utility) via the alsamixer
command :
Notice that the controls are displayed on the Playback
view even if they
should be on the Capture
view, but they are effective. This little bug is
known across DJM devices support for Linux and should be adressed.
This reverse engineering process has been made by using a Pioneer DJM-850-S mixer with firmware version 1.10 (2013.07.31), and by using the Windows driver version 1.500 (2020.07.28).
See the firmware and driver versions on the official download page.
Thanks to the following people and groups for their advices :
- Franta for his article on reverse engineering the Pioneer DJM-250MK2.
- Mixxx community.
- Alsa-devel community.
- Pionner, the Pioneer logo, Pioneer DJ and the Pioneer DJ logo are registered trademarks of Pioneer Corporation.
- Windows is a registered trademark of Microsoft Corporation.
- ASIO is a trademark and software of Steinberg Media Technologies GmbH.