//
// EKS Otus HID controller script v1.0
// Copyright (C) 2012, Sean M. Pappalardo, Ilkka Tuohela
// but feel free to tweak this to your heart's content!
// For Mixxx version 1.11.x
//
// EKS Otus HID interface specification
function EKSOtusController() {
this.controller = new HIDController();
// Initialized to firmware version by version response packet
this.version_major = undefined;
this.version_minor = undefined;
this.controller.activeDeck = 1;
this.controller.LEDColors = { off: 0x0, red: 0x0f, green: 0xf0, amber: 0xff };
this.controller.deckOutputColors = { 1: "red", 2: "green", 3: "red", 4: "green"};
// Static variables for HID specs
this.wheelLEDCount = 60;
this.buttonLEDCount = 22;
this.sliderLEDCount = 20;
this.registerInputPackets = function() {
var packet = undefined;
var name = undefined;
var offset = 0;
packet = new HIDPacket("control",[0x0,0x35],64);
packet.addControl("hid","wheel_position",2,"H");
packet.addControl("hid","wheel_speed",4,"h");
packet.addControl("hid","timestamp",6,"I");
packet.addControl("hid","slider_value",10,"H");
packet.addControl("hid","slider_position",12,"H");
packet.addControl("hid","rate_encoder",14,"B",undefined,true);
packet.addControl("hid","jog_se",15,"B",undefined,true);
packet.addControl("hid","jog_sw",16,"B",undefined,true);
packet.addControl("hid","rate_encoder",17,"B",undefined,true);
packet.addControl("hid","gain_1",18,"H");
packet.addControl("hid","gain_2",20,"H");
packet.addControl("hid","eq_high_1",22,"H");
packet.addControl("hid","eq_high_2",24,"H");
packet.addControl("hid","eq_mid_1",26,"H");
packet.addControl("hid","eq_mid_2",28,"H");
packet.addControl("hid","eq_low_1",30,"H");
packet.addControl("hid","eq_low_2",32,"H");
packet.addControl("hid","crossfader",34,"H");
packet.addControl("hid","headphones",36,"H");
packet.addControl("hid","trackpad_x",38,"H");
packet.addControl("hid","trackpad_y",40,"H");
packet.addControl("hid","slider_pos_2",42,"H");
packet.addControl("hid","slider_pos_1",44,"H");
packet.addControl("hid","keylock",46,"I",0x1);
packet.addControl("hid","beatloop_8",46,"I",0x2);
packet.addControl("hid","beatloop_4",46,"I",0x4);
packet.addControl("hid","beatloop_2",46,"I",0x8);
packet.addControl("hid","beatloop_1",46,"I",0x10);
packet.addControl("hid","loop_in",46,"I",0x20);
packet.addControl("hid","loop_out",46,"I",0x40);
packet.addControl("hid","reloop_exit",46,"I",0x80);
packet.addControl("hid","slider_scale",46,"I",0x100);
packet.addControl("hid","jog_se_button",46,"I",0x200);
packet.addControl("hid","eject_right",46,"I",0x400);
packet.addControl("hid","deck_switch",46,"I",0x800);
packet.addControl("hid","eject_left",46,"I",0x1000);
packet.addControl("hid","jog_sw_button",46,"I",0x2000);
packet.addControl("hid","stop",46,"I",0x4000);
packet.addControl("hid","play",46,"I",0x8000);
packet.addControl("hid","cue",46,"I",0x10000);
packet.addControl("hid","reverse",46,"I",0x20000);
packet.addControl("hid","brake",46,"I",0x40000);
packet.addControl("hid","fastforward",46,"I",0x80000);
packet.addControl("hid","jog_nw_button",46,"I",0x100000);
packet.addControl("hid","jog_touch",46,"I",0x200000);
packet.addControl("hid","trackpad_left",46,"I",0x400000);
packet.addControl("hid","trackpad_right",46,"I",0x800000);
packet.addControl("hid","hotcue_1",46,"I",0x1000000);
packet.addControl("hid","hotcue_2",46,"I",0x2000000);
packet.addControl("hid","hotcue_3",46,"I",0x4000000);
packet.addControl("hid","hotcue_4",46,"I",0x8000000);
packet.addControl("hid","hotcue_5",46,"I",0x10000000);
packet.addControl("hid","hotcue_6",46,"I",0x20000000);
packet.addControl("hid","touch_slider",46,"I",0x40000000)
packet.addControl("hid","touch_trackpad"