Hi André, and hello to all other list members,

I had a little coding rave last night and decided to implement (almost) everything I wished for. See attached file, which contains a new version of a driver for the DM2. The driver compiles with only two small warnings, because I was too lazy to parse incoming MIDI messages. I may need a hint on the MIDI workings anyway, but I'll ask about that later.

(Ben, your good advice about using a library came just a bit too late. You're right again, but I had the code base finished already. I'm thinking of factoring out the state handling stuff so that it can be used in a library.)

 patch < usbdm2_wheels_jj20071206.patch

patching file usbdm2.c
Hunk #2 FAILED at 547.
Hunk #3 FAILED at 577.
Hunk #4 FAILED at 619.
Hunk #5 succeeded at 1075 (offset 8 lines).
3 out of 5 hunks FAILED -- saving rejects to file usbdm2.c.rej

war grad zu faul das zu fixen. schick mir doch das file :)
Keine Ahnung, was ich da wieder gemacht habe... Sorry, André...

But I stopped working on your version anyway when I began designing the data structures for my over-engineered stateful stuff. Lots of binary arithmetic and book-keeping going on there, which got me quite confused. But the thing works, amazingly enough!

I added a DM2.midi.xml which assigns my strange and pointless key tables correctly in a current Mixxx.

Please don't bite my head off for having recoded the whole thing, instead of patching existing stuff. My structures where just so far from what I found in your version that I had to make a fresh start. USB communication has also changed a bit, the MIDI stuff I took from your version almost verbatim (except from having the kernel choose the card index, and a couple other things).

Have a look at it, it's really fun! Here's how you use it:

1. Center the fader and stick before loading the driver / inserting the USB plug. The driver samples the first values as the center points. After that, the joystick and the fader are auto-calibrating.

2. The LEDs should flash a bit, to indicate everything is set up. As long as no LEDs are on, you have controls 1 and 3 on the wheels, to be used with spread64. All buttons send MIDI key on/off events.

3. Pressing and releasing a button on the platters (except the south button, more later), lights that LED and switches the wheel into another controller. Wheel to the right increases the value, wheel to the left decreases the value. At 0 and 127, further turning does nothing.

4. You can precisely center the active control(s) by pressing the respective south button on the platter.

5. Pushing the button which is lit switches the light off and if all lights are off you're back in wheel mode.

6. If you push and hold a button, you can turn the wheel to adjust that parameter, and when you let go off the button, the light goes out again (temporary shifting).

7. This temporary shift also works if you hold a key while another light is on and turn the wheel. When you let go, you return to the former control.

8. The southeast button on the left platter and the southwest button on the right platter do not have a control attached. They only send key on/off. I use them for reverse play.

9. The center button shifts left and right wheels into a temporary control. This control cannot be locked.


Try it with Mixxx! The outer three buttons of each platter control Low, Mid, and High, the inner button (east on left platter, west on right platter) control volume.

Center buttons on the platter and the middle button do what you expect. A and B are mapped to some cue function which I don't fully understand. Upper buttons 1 and 3 switch the flanger on for the respective platter. The joystick changes flanger depth and delay.

I'll make a photo of my DM2 and will label it, so that it can be easier used to configure the driver.

The code is already prepared for sending note on/note off events to drive the LEDs. The LEDs have a "display" layer on top of the "button status" layer. The "display" layer automatically goes off about 1 second after the last LED changing MIDI command. What's missing is the parsing of incoming MIDI events. What's missing also are a few kernel parameters and an interface for reconfiguring (I thought to use MIDI for configuration also).

Oh, about the stupid renaming from usbdm2.ko to dm2.ko. I needed a different name to keep myself from constantly getting confused. Renaming it back to usbdm2 is a snap, of course.

André, your comments on this are naturally valued highest, since I dissected and rearranged the fruits of your labour. So, any comments are welcome! Also, anyone with a DM2 is invited to have a go (don't forget to patch your kernel with André's fix).


More later, hope you don't hate me for being such a separatist...

- Ján

Attachment: dm2-0.0.tgz
Description: application/compressed-tar

-------------------------------------------------------------------------
SF.Net email is sponsored by: 
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to