~max-linke/mixxx/previewdeck

« back to all changes in this revision

Viewing changes to mixxx/res/controllers/Nintendo Wiimote.js

  • Committer: Max Linke
  • Date: 2012-06-03 14:37:44 UTC
  • mfrom: (2994.9.25 mixxx-trunk)
  • Revision ID: kain88@640x4-20120603143744-lhm7g01hmse348sv
mergeĀ fromĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// Nintendo Wii Remote Game Controller HID mapping
 
3
// Copyright (C) 2012, Ilkka Tuohela
 
4
// For Mixxx version 1.11.x
 
5
//
 
6
 
 
7
// WiiMoteController is defined in Wiimote.hid.js
 
8
Wiimote = new WiimoteController();
 
9
 
 
10
Wiimote.activeDeck = 1;
 
11
 
 
12
// Mandatory function for mixxx controllers
 
13
Wiimote.init = function(id) {
 
14
    Wiimote.id = id;
 
15
    // Required to make virtual deck resolution work
 
16
    Wiimote.controller.activeDeck = 1;
 
17
    Wiimote.controller.auto_repeat_interval = 100;
 
18
    Wiimote.registerInputPackets();
 
19
    Wiimote.registerCallbacks();
 
20
 
 
21
    var controller = Wiimote.controller;
 
22
    controller.registerAutoRepeatTimer = function() {
 
23
        controller.auto_repeat_timer = engine.beginTimer(
 
24
            controller.auto_repeat_interval,
 
25
            "Wiimote.controller.controlAutoRepeat()"
 
26
        )
 
27
    }
 
28
 
 
29
    script.HIDDebug("Wiimote controller initialized: " + Wiimote.id);
 
30
}
 
31
 
 
32
// Mandatory function for mixxx controllers
 
33
Wiimote.shutdown = function() {
 
34
    Wiimote.controller.close();
 
35
    script.HIDDebug("Wiimote controller shutdown: " + Wiimote.id);
 
36
}
 
37
 
 
38
// Mandatory function to receive anything from HID
 
39
Wiimote.incomingData = function(data,length) {
 
40
    Wiimote.controller.parsePacket(data,length);
 
41
}
 
42
 
 
43
// Register callbacks for 'hid' controls defined in WiimoteController
 
44
Wiimote.registerCallbacks = function(id) {
 
45
    var packet = Wiimote.controller.resolveInputPacket('control');
 
46
    if (packet==undefined) {
 
47
        script.HIDDebug("No input packet 'control' defined");
 
48
        return;
 
49
    }
 
50
    var controller = Wiimote.controller;
 
51
    if (controller==undefined) {
 
52
        script.HIDDebug("Error registrering callbacks: controller is undefined");
 
53
        return;
 
54
    }
 
55
 
 
56
    // Link HID buttons to deck1 and deck2 play buttons
 
57
    controller.linkModifier("hid","button_bottom","shift");
 
58
    controller.registerInputCallback("control","hid","button_home",Wiimote.deck_cue);
 
59
    controller.registerInputCallback("control","hid","button_a",Wiimote.play_load);
 
60
 
 
61
    controller.registerInputCallback("control","hid","button_minus",Wiimote.jog);
 
62
    controller.registerInputCallback("control","hid","button_plus",Wiimote.jog);
 
63
    controller.enableBitAutoRepeat("hid","button_minus");
 
64
    controller.enableBitAutoRepeat("hid","button_plus");
 
65
 
 
66
    controller.registerInputCallback("control","hid","arrow_left",Wiimote.seek_loop);
 
67
    controller.registerInputCallback("control","hid","arrow_right",Wiimote.seek_loop);
 
68
 
 
69
    controller.registerInputCallback("control","hid","arrow_up",Wiimote.select);
 
70
    controller.registerInputCallback("control","hid","arrow_down",Wiimote.select);
 
71
    controller.enableBitAutoRepeat("hid","arrow_up");
 
72
    controller.enableBitAutoRepeat("hid","arrow_down");
 
73
 
 
74
    controller.registerInputCallback("control","hid","button_1",Wiimote.hotcue);
 
75
    controller.registerInputCallback("control","hid","button_2",Wiimote.hotcue);
 
76
 
 
77
 
 
78
};
 
79
 
 
80
Wiimote.seek_loop = function(field) { 
 
81
    var controller = Wiimote.controller;
 
82
    var value;
 
83
    var group = controller.resolveDeckGroup(Wiimote.activeDeck);
 
84
    if (group==undefined)
 
85
        return;
 
86
    if (field.value==controller.buttonStates.released)
 
87
        value = false;
 
88
    else
 
89
        value = true;
 
90
    if (controller.modifierIsSet('shift')) {
 
91
        if (field.name=="arrow_left") 
 
92
            engine.setValue(group,'back',value);
 
93
        if (field.name=="arrow_right") 
 
94
            engine.setValue(group,'fwd',value);
 
95
    } else {
 
96
        // Reset back/gwd states (can be left on if you release shift)
 
97
        if (engine.getValue(group,'back'))
 
98
            engine.setValue(group,'back',false);
 
99
        if (engine.getValue(group,'fwd'))
 
100
            engine.setValue(group,'fwd',false);
 
101
        if (field.value==controller.buttonStates.released)
 
102
            return;
 
103
        if (field.name=="arrow_left") 
 
104
            engine.setValue(group,'loop_in',value);
 
105
        if (field.name=="arrow_right") 
 
106
            if (engine.getValue(group,'loop_enabled'))
 
107
                engine.setValue(group,'reloop_exit',true);
 
108
            else
 
109
                engine.setValue(group,'loop_out',true);
 
110
    }
 
111
};
 
112
 
 
113
Wiimote.select = function(field) { 
 
114
    var controller = Wiimote.controller;
 
115
    if (!controller.modifierIsSet('shift'))  {
 
116
        if (field.value==controller.buttonStates.released)
 
117
            return;
 
118
        if (field.name=="arrow_up") 
 
119
            engine.setValue("[Playlist]","SelectPrevTrack",true);
 
120
        if (field.name=="arrow_down") 
 
121
            engine.setValue("[Playlist]","SelectNextTrack",true);
 
122
    } else {
 
123
        var group = controller.resolveDeckGroup(Wiimote.activeDeck);
 
124
        var value;
 
125
        if (group==undefined)
 
126
            return;
 
127
        if (field.name=="arrow_up") {
 
128
            value = engine.getValue(group,'rate')+0.02;
 
129
            engine.setValue(group,"rate",value);
 
130
        }
 
131
        if (field.name=="arrow_down") {
 
132
            value = engine.getValue(group,'rate')-0.02;
 
133
            engine.setValue(group,"rate",value);
 
134
        }
 
135
    }
 
136
}
 
137
 
 
138
// Call cue_default, or select deck if shift (bottom button) is pressed
 
139
Wiimote.deck_cue = function(field) { 
 
140
    var controller = Wiimote.controller;
 
141
    if (!controller.modifierIsSet('shift'))  {
 
142
        var group = controller.resolveDeckGroup(Wiimote.activeDeck);
 
143
        if (field.value==controller.buttonStates.released)
 
144
            engine.setValue(group,'cue_default',false);
 
145
        else
 
146
            engine.setValue(group,'cue_default',true);
 
147
    } else {
 
148
        if (field.value==controller.buttonStates.released)
 
149
            return;
 
150
        switch (Wiimote.activeDeck) {
 
151
            case 1: Wiimote.activeDeck = 2; break;
 
152
            case 2: Wiimote.activeDeck = 1; break;
 
153
            default: Wiimote.activeDeck = 1; break;
 
154
        } 
 
155
        script.HIDDebug("Active deck now " + Wiimote.activeDeck);
 
156
    }
 
157
}
 
158
 
 
159
Wiimote.play_load = function(field) { 
 
160
    var controller = Wiimote.controller;
 
161
    var group = controller.resolveDeckGroup(Wiimote.activeDeck);
 
162
    if (group==undefined)
 
163
        return;
 
164
    if (field.value==controller.buttonStates.released)
 
165
        return;
 
166
    if (!controller.modifierIsSet('shift'))  {
 
167
        controller.togglePlay(group,field);
 
168
    } else {
 
169
        engine.setValue(group,"LoadSelectedTrack",true);
 
170
    }
 
171
}
 
172
 
 
173
Wiimote.jog = function(field) {
 
174
    var controller = Wiimote.controller;
 
175
    var group = controller.resolveDeckGroup(Wiimote.activeDeck);
 
176
    if (group==undefined)
 
177
        return;
 
178
    if (field.name=='button_minus') 
 
179
        if (field.value==controller.buttonStates.released)
 
180
            engine.setValue(group,'jog',0);
 
181
        else
 
182
            engine.setValue(group,'jog',-4);
 
183
    if (field.name=='button_plus') 
 
184
        if (field.value==controller.buttonStates.released)
 
185
            engine.setValue(group,'jog',0);
 
186
        else
 
187
            engine.setValue(group,'jog',4);
 
188
}
 
189
 
 
190
Wiimote.hotcue = function(field) { 
 
191
    var controller = Wiimote.controller;
 
192
    var group = controller.resolveDeckGroup(Wiimote.activeDeck);
 
193
    if (group==undefined)
 
194
        return;
 
195
    if (controller.modifierIsSet('shift'))  {
 
196
        if (field.value==controller.buttonStates.released)
 
197
            return;
 
198
        if (field.name=="button_1") 
 
199
            engine.setValue(group,"hotcue_1_clear",true);
 
200
        if (field.name=="button_2") 
 
201
            engine.setValue(group,"hotcue_2_clear",true);
 
202
    } else {
 
203
        if (field.value==controller.buttonStates.released)
 
204
            return;
 
205
        if (field.name=="button_1") 
 
206
            engine.setValue(group,"hotcue_1_activate",true);
 
207
        if (field.name=="button_2") 
 
208
            engine.setValue(group,"hotcue_2_activate",true);
 
209
    }
 
210
}
 
211