summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTérence Clastres <t.clastres@gmail.com>2018-08-14 02:59:58 +0200
committerTérence Clastres <t.clastres@gmail.com>2018-08-18 20:49:17 +0200
commit51b5c01b8bbe65075d955f78f1c0bef4a1b53293 (patch)
tree82ac455a9eb105a7be90501d9faa81b1cfbe5f28
parentc2b4f1961221adab44aca6d20c0cad2905b13336 (diff)
Add knob leds and refine colors
-rw-r--r--libs/surfaces/launch_control_xl/controllers.cc113
-rw-r--r--libs/surfaces/launch_control_xl/launch_control_xl.cc2
-rw-r--r--libs/surfaces/launch_control_xl/launch_control_xl.h16
3 files changed, 102 insertions, 29 deletions
diff --git a/libs/surfaces/launch_control_xl/controllers.cc b/libs/surfaces/launch_control_xl/controllers.cc
index 85fbfa85ce..8725144f06 100644
--- a/libs/surfaces/launch_control_xl/controllers.cc
+++ b/libs/surfaces/launch_control_xl/controllers.cc
@@ -38,15 +38,15 @@ LaunchControlXL::build_maps ()
Knob* knob;
- #define MAKE_KNOB(i,cc, index, color) \
- knob = new Knob ((i), (cc), (index), (color), (*this)); \
+ #define MAKE_KNOB(i,cc, index) \
+ knob = new Knob ((i), (cc), (index), (*this)); \
cc_knob_map.insert (std::make_pair (knob->controller_number(), knob)); \
id_knob_map.insert (std::make_pair (knob->id(), knob))
for (uint8_t n = 0; n < 8; ++n) {
- MAKE_KNOB (static_cast<KnobID>(n), (n + 13), n, RedFull);
- MAKE_KNOB (static_cast<KnobID>(n + 8), (n + 29), (n + 8), GreenFull);
- MAKE_KNOB (static_cast<KnobID>(n + 16), (n + 49), (n + 16), Yellow);
+ MAKE_KNOB (static_cast<KnobID>(n), (n + 13), n);
+ MAKE_KNOB (static_cast<KnobID>(n + 8), (n + 29), (n + 8));
+ MAKE_KNOB (static_cast<KnobID>(n + 16), (n + 49), (n + 16));
}
/* Faders */
@@ -86,22 +86,22 @@ LaunchControlXL::build_maps ()
id_note_button_map.insert (std::make_pair (note_button->id(), note_button))
- MAKE_TRACK_BUTTON_PRESS(Focus1, 41, 24, GreenFull, &LaunchControlXL::button_track_focus_1);
- MAKE_TRACK_BUTTON_PRESS(Focus2, 42, 25, GreenFull, &LaunchControlXL::button_track_focus_2);
- MAKE_TRACK_BUTTON_PRESS(Focus3, 43, 26, GreenFull, &LaunchControlXL::button_track_focus_3);
- MAKE_TRACK_BUTTON_PRESS(Focus4, 44, 27, GreenFull, &LaunchControlXL::button_track_focus_4);
- MAKE_TRACK_BUTTON_PRESS(Focus5, 57, 28, GreenFull, &LaunchControlXL::button_track_focus_5);
- MAKE_TRACK_BUTTON_PRESS(Focus6, 58, 29, GreenFull, &LaunchControlXL::button_track_focus_6);
- MAKE_TRACK_BUTTON_PRESS(Focus7, 59, 30, GreenFull, &LaunchControlXL::button_track_focus_7);
- MAKE_TRACK_BUTTON_PRESS(Focus8, 60, 31, GreenFull, &LaunchControlXL::button_track_focus_8);
- MAKE_TRACK_BUTTON_PRESS(Control1, 73, 32, Yellow, &LaunchControlXL::button_track_control_1);
- MAKE_TRACK_BUTTON_PRESS(Control2, 74, 33, Yellow, &LaunchControlXL::button_track_control_2);
- MAKE_TRACK_BUTTON_PRESS(Control3, 75, 34, Yellow, &LaunchControlXL::button_track_control_3);
- MAKE_TRACK_BUTTON_PRESS(Control4, 76, 35, Yellow, &LaunchControlXL::button_track_control_4);
- MAKE_TRACK_BUTTON_PRESS(Control5, 89, 36, Yellow, &LaunchControlXL::button_track_control_5);
- MAKE_TRACK_BUTTON_PRESS(Control6, 90, 37, Yellow, &LaunchControlXL::button_track_control_6);
- MAKE_TRACK_BUTTON_PRESS(Control7, 91, 38, Yellow, &LaunchControlXL::button_track_control_7);
- MAKE_TRACK_BUTTON_PRESS(Control8, 92, 39, Yellow, &LaunchControlXL::button_track_control_8);
+ MAKE_TRACK_BUTTON_PRESS(Focus1, 41, 24, YellowLow, &LaunchControlXL::button_track_focus_1);
+ MAKE_TRACK_BUTTON_PRESS(Focus2, 42, 25, YellowLow, &LaunchControlXL::button_track_focus_2);
+ MAKE_TRACK_BUTTON_PRESS(Focus3, 43, 26, YellowLow, &LaunchControlXL::button_track_focus_3);
+ MAKE_TRACK_BUTTON_PRESS(Focus4, 44, 27, YellowLow, &LaunchControlXL::button_track_focus_4);
+ MAKE_TRACK_BUTTON_PRESS(Focus5, 57, 28, YellowLow, &LaunchControlXL::button_track_focus_5);
+ MAKE_TRACK_BUTTON_PRESS(Focus6, 58, 29, YellowLow, &LaunchControlXL::button_track_focus_6);
+ MAKE_TRACK_BUTTON_PRESS(Focus7, 59, 30, YellowLow, &LaunchControlXL::button_track_focus_7);
+ MAKE_TRACK_BUTTON_PRESS(Focus8, 60, 31, YellowLow, &LaunchControlXL::button_track_focus_8);
+ MAKE_TRACK_BUTTON_PRESS(Control1, 73, 32, AmberLow, &LaunchControlXL::button_track_control_1);
+ MAKE_TRACK_BUTTON_PRESS(Control2, 74, 33, AmberLow, &LaunchControlXL::button_track_control_2);
+ MAKE_TRACK_BUTTON_PRESS(Control3, 75, 34, AmberLow, &LaunchControlXL::button_track_control_3);
+ MAKE_TRACK_BUTTON_PRESS(Control4, 76, 35, AmberLow, &LaunchControlXL::button_track_control_4);
+ MAKE_TRACK_BUTTON_PRESS(Control5, 89, 36, AmberLow, &LaunchControlXL::button_track_control_5);
+ MAKE_TRACK_BUTTON_PRESS(Control6, 90, 37, AmberLow, &LaunchControlXL::button_track_control_6);
+ MAKE_TRACK_BUTTON_PRESS(Control7, 91, 38, AmberLow, &LaunchControlXL::button_track_control_7);
+ MAKE_TRACK_BUTTON_PRESS(Control8, 92, 39, AmberLow, &LaunchControlXL::button_track_control_8);
MAKE_SELECT_BUTTON_PRESS(SelectUp, 104, 44, &LaunchControlXL::button_select_up);
MAKE_SELECT_BUTTON_PRESS(SelectDown, 105, 45, &LaunchControlXL::button_select_down);
@@ -291,7 +291,7 @@ LaunchControlXL::update_track_focus_led(uint8_t n)
if (stripable[n]) {
if ( stripable[n]->is_selected() ) {
- b->set_color(AmberFull);
+ b->set_color(YellowFull);
} else {
b->set_color(AmberLow);
}
@@ -347,6 +347,73 @@ LaunchControlXL::get_ac_by_state(uint8_t n) {
return ac;
}
+LaunchControlXL::Knob**
+LaunchControlXL::knobs_by_collumn(uint8_t col, Knob** knob_col)
+{
+ for (uint8_t n = 0; n < 3; ++n) {
+ knob_col[n] = id_knob_map.find(static_cast<KnobID>(col+n*8))->second;
+ }
+
+ return knob_col;
+}
+
+void
+LaunchControlXL::update_knob_led(uint8_t n)
+{
+ LEDColor color;
+
+ uint32_t absolute_strip_num = (n + bank_start) % 8;
+
+ switch (absolute_strip_num) {
+ case 0:
+ case 4:
+ if (stripable[n] && stripable[n]->is_selected()) {
+ color = RedFull;
+ } else {
+ color = RedLow;
+ }
+ break;
+
+ case 1:
+ case 5:
+ if (stripable[n] && stripable[n]->is_selected()) {
+ color = YellowFull;
+ } else {
+ color = YellowLow;
+ }
+ break;
+
+ case 2:
+ case 6:
+ if (stripable[n] && stripable[n]->is_selected()) {
+ color = GreenFull;
+ } else {
+ color = GreenLow;
+ }
+ break;
+
+ case 3:
+ case 7:
+ if (stripable[n] && stripable[n]->is_selected()) {
+ color = AmberFull;
+ } else {
+ color = AmberLow;
+ }
+ }
+
+ Knob* knobs_col[3];
+ knobs_by_collumn(n, knobs_col);
+
+ for (uint8_t s = 0; s < 3; ++s)
+ {
+ if (stripable[n]) {
+ knobs_col[s]->set_color(color);
+ } else {
+ knobs_col[s]->set_color(Off);
+ }
+ write (knobs_col[s]->state_msg());
+ }
+}
void
LaunchControlXL::update_track_control_led(uint8_t n)
@@ -363,7 +430,7 @@ LaunchControlXL::update_track_control_led(uint8_t n)
switch(track_mode()) {
case TrackMute:
if (ac->get_value()) {
- b->set_color(AmberFull);
+ b->set_color(YellowFull);
} else {
b->set_color(AmberLow);
}
diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.cc b/libs/surfaces/launch_control_xl/launch_control_xl.cc
index 87a2033c5f..65588a7f79 100644
--- a/libs/surfaces/launch_control_xl/launch_control_xl.cc
+++ b/libs/surfaces/launch_control_xl/launch_control_xl.cc
@@ -812,6 +812,7 @@ LaunchControlXL::stripable_property_change (PropertyChange const& what_changed,
}
if (which < 8) {
update_track_focus_led ((uint8_t) which);
+ update_knob_led((uint8_t) which);
}
}
}
@@ -876,6 +877,7 @@ LaunchControlXL::switch_bank (uint32_t base)
}
update_track_focus_led(n);
button_track_mode(track_mode());
+ update_knob_led(n);
}
}
diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.h b/libs/surfaces/launch_control_xl/launch_control_xl.h
index 3439ee2ff3..2487666829 100644
--- a/libs/surfaces/launch_control_xl/launch_control_xl.h
+++ b/libs/surfaces/launch_control_xl/launch_control_xl.h
@@ -138,7 +138,7 @@ public:
enum LEDFlag { Normal = 0xC, Blink = 0x8, DoubleBuffering = 0x0 };
- enum LEDColor { Off=0, RedLow = 1, RedFull = 3, GreenLow = 16, GreenFull = 48, Yellow = 50, AmberLow = 17, AmberFull = 51};
+ enum LEDColor { Off=0, RedLow = 1, RedFull = 3, GreenLow = 16, GreenFull = 48, YellowLow = 34, YellowFull = 51, AmberLow = 18, AmberFull = 35};
struct Controller {
@@ -277,20 +277,20 @@ public:
struct TrackStateButton : public NoteButton, public LED {
TrackStateButton(ButtonID id, uint8_t nn, uint8_t index, void (LaunchControlXL::*press)(), LaunchControlXL& l)
: NoteButton(id, nn, press)
- , LED(index, Yellow, l) {}
+ , LED(index, YellowLow, l) {}
TrackStateButton(ButtonID id, uint8_t nn, uint8_t index, void (LaunchControlXL::*press)(),
void (LaunchControlXL::*release)(),
LaunchControlXL& l)
: NoteButton(id, nn, press, release)
- , LED(index, Yellow, l) {}
+ , LED(index, YellowLow, l) {}
TrackStateButton(ButtonID id, uint8_t nn, uint8_t index, void (LaunchControlXL::*press)(),
void (LaunchControlXL::*release)(),
void (LaunchControlXL::*release_long)(),
LaunchControlXL& l)
: NoteButton(id, nn, press, release, release_long)
- , LED(index, Yellow, l) {}
+ , LED(index, YellowLow, l) {}
MidiByteArray state_msg(bool light) const;
};
@@ -308,9 +308,9 @@ public:
};
struct Knob : public Controller, public MultiColorLED {
- Knob(KnobID id, uint8_t cn, uint8_t index, LEDColor color, LaunchControlXL& l)
+ Knob(KnobID id, uint8_t cn, uint8_t index, LaunchControlXL& l)
: Controller(cn, 64)
- , MultiColorLED(index, color, l)
+ , MultiColorLED(index, Off, l)
, _id(id) {} // knob 50/50 value
KnobID id() const { return _id; }
@@ -446,6 +446,10 @@ private:
void notify_loop_state_changed();
void notify_parameter_changed(std::string);
+ /* Knob methods */
+
+ Knob** knobs_by_collumn(uint8_t col, Knob** knob_col);
+ void update_knob_led(uint8_t n);
/* Button methods */