====== OTUS ====== {{tag>project audio music hadez}} [[leute:hadez]] bought an OTUS and doesn't get around using it. Be nice, don't scratch it, don't drown it in club-mate. ===== Drivers ===== [[http://eks.fi/index2.php?p=support&o=Otus%20Series|OTUS Product Support Website]] (Login: ywrlroxuriw:ywrlroxuriwywrlroxuriw) ==== Windows ==== * [[http://follvalsch.de/dump/EKS/EKS_DriverPack_WIN_16.12.2010.exe|Drivers]] * [[http://follvalsch.de/dump/EKS/EKS_OTUSFW_WIN_11.2.2009.zip|Firmware 1.5]] The OTUS came bundled with NI Traktor LE, however in more recent versions of Traktor LE, OTUS support was removed. NI support wants to push you to invest into Traktor Pro. Lesson learned: don't ever update Traktor. ==== OSX ==== * [[http://follvalsch.de/dump/EKS/EKS_OTUSFW_OSX_23.2.2009.dmg|Drivers]] * [[http://follvalsch.de/dump/EKS/EKS_DriverPack_OSX_16.12.2010.dmg|Firmware 1.5]] ==== Linux ==== EKS claimed support for Linux, that's why hadez bought the damn thing. Turns out there's no Linux driver, so he reverse engineered the protocol. * [[https://github.com/shackspace/LOTUS|Repo at GitHub]] There is [[http://mixxx.org/wiki/doku.php/eks_otus|OTUS HID support in mixxx 1.11.0]]! ===== Protocol ===== typedef struct OTUSMsg_ { unsigned short magic; // 0x0035 unsigned short jog0Rot; // 0x0000..0xffff, rollover signed short jog0Speed; // <0: CCW rotation, >0: CW rotation unsigned int timestamp; // looks like unixtime, have to check details unsigned int _0a_0d_reserved; unsigned char jog2Rot; // 0x0000..0x00ff, rollover unsigned char jog4Rot; // 0x0000..0x00ff, rollover unsigned char jog3Rot; // 0x0000..0x00ff, rollover unsigned char jog1Rot; // 0x0000..0x00ff, rollover unsigned short rotAGain; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotBGain; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotAHigh; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotBHigh; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotAMid; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotBMid; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotALow; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotBLow; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotXFader; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short rotMaster; // 0x0000..0x7dc0, mask: 0xfff0 unsigned short padY; // 0x0000..0xffff, 0x0000:bottom unsigned short padX; // 0x0000..0xffff, 0x0000:left unsigned short pitchA; // 0x0000..0xffff unsigned short pitchB; // 0x0000..0xffff unsigned int buttons; // one-hot bitmask for 32 button actions unsigned char filler; unsigned char msgCounter; // 0x0000..0xff00, mask:0xff00, rollover unsigned short status; // 0x0000: Deck A, 0x0001: Deck B unsigned char _36_reserved; unsigned char _37_reserved; unsigned int _38_3b_reserved; unsigned int _3c_3f_reserved; } __attribute__((__packed__)) OTUSMsg; // button mapping for the OTUSMsg.buttons field #define OTUS_BUTTON_PLAYPAUSE 0x00008000 #define OTUS_BUTTON_UNKNOWN3 0x00004000 #define OTUS_BUTTON_JOG3 0x00002000 #define OTUS_BUTTON_RETURNLEFT 0x00001000 #define OTUS_BUTTON_SHIFT 0x00000800 #define OTUS_BUTTON_RETURNRIGHT 0x00000400 #define OTUS_BUTTON_JOG4 0x00000200 #define OTUS_BUTTON_PITCH_SCALE 0x00000100 #define OTUS_BUTTON_LOOP 0x00000080 #define OTUS_BUTTON_LOOPOUT 0x00000040 #define OTUS_BUTTON_LOOPIN 0x00000020 #define OTUS_BUTTON_LOOPFULL 0x00000010 #define OTUS_BUTTON_LOOPHALF 0x00000008 #define OTUS_BUTTON_LOOPQUARTER 0x00000004 #define OTUS_BUTTON_LOOPEIGTH 0x00000002 #define OTUS_BUTTON_JOG2 0x00000001 #define OTUS_BUTTON_XYPAD 0x80000000 #define OTUS_BUTTON_PITCH 0x40000000 #define OTUS_BUTTON_USER5 0x20000000 #define OTUS_BUTTON_USER4 0x10000000 #define OTUS_BUTTON_USER3 0x08000000 #define OTUS_BUTTON_USER2 0x04000000 #define OTUS_BUTTON_USER1 0x02000000 #define OTUS_BUTTON_USER0 0x01000000 #define OTUS_BUTTON_MOUSERIGHT 0x00800000 #define OTUS_BUTTON_MOUSELEFT 0x00400000 #define OTUS_BUTTON_MOUSELEFT 0x00400000 #define OTUS_BUTTON_JOG0 0x00200000 #define OTUS_BUTTON_JOG1 0x00100000 #define OTUS_BUTTON_FASTFORWARD 0x00080000 #define OTUS_BUTTON_UNKNOWN1 0x00040000 #define OTUS_BUTTON_UNKNOWN2 0x00020000 #define OTUS_BUTTON_CUE 0x00010000 // IDs for value knobs #define OTUS_VALUE_JOG0ROT 0 #define OTUS_VALUE_JOG0SPEED 1 #define OTUS_VALUE_JOG1ROT 2 #define OTUS_VALUE_JOG2ROT 3 #define OTUS_VALUE_JOG3ROT 4 #define OTUS_VALUE_JOG4ROT 5 #define OTUS_VALUE_GAINA 6 #define OTUS_VALUE_GAINB 7 #define OTUS_VALUE_GAINM 8 #define OTUS_VALUE_HIGHA 9 #define OTUS_VALUE_HIGHB 10 #define OTUS_VALUE_MIDA 11 #define OTUS_VALUE_MIDB 12 #define OTUS_VALUE_LOWA 13 #define OTUS_VALUE_LOWB 14 #define OTUS_VALUE_XFADER 15 #define OTUS_VALUE_PITCHA 16 #define OTUS_VALUE_PITCHB 17 #define OTUS_VALUE_PADX 18 #define OTUS_VALUE_PADY 19