summaryrefslogtreecommitdiff
path: root/libs/surfaces/push2/leds.cc
blob: 1e5423e17abd67648a08ef476a032fa2f37a0ab5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <algorithm>

#include "push2.h"

using namespace ArdourSurface;
using std::make_pair;
using std::max;
using std::min;

void
Push2::LED::set_color (uint8_t ci)
{
	color_index = max (uint8_t(0), min (uint8_t(127), ci));
}

void
Push2::LED::set_state (LED::State s)
{
	state = s;
}

MidiByteArray
Push2::LED::update ()
{
	MidiByteArray msg;

	switch (type) {
	case Pad:
	case TouchStrip:
		msg.push_back (0x90);
		break;
	case ColorButton:
	case WhiteButton:
		msg.push_back (0xb0);
		break;
	}

	msg.push_back (state);
	msg.push_back (color_index);

	return msg;
}

void
Push2::set_led_color (uint32_t id, uint8_t color_index)
{
	leds[id].set_color (color_index);
	// write (leds[id].update ());
}

void
Push2::build_led_map ()
{
	uint8_t id = 0;
	uint8_t extra;

	/* Touch strip - there is only one */

	leds.insert (make_pair (id, LED (id, LED::TouchStrip, 12)));
	id++;

	/* Pads

	   Pad 0 is in the bottom left corner, id rises going left=>right
	   across each row
	*/

	for (extra = 36; id < 64; ++id, ++extra) {
		leds.insert (make_pair (id, LED (id, LED::Pad, extra)));
	}

	/* Buttons

	   We start with Button 0 at the upper left of the surface, increasing
	   across the device and wrapping, until we're at the Master button on
	   the right.

	   Then we descend down the left side. Then down the right side of the
	   pads. Finally the column on the far right., going clockwise around
	   each 4-way diagonal button.

	   66 buttons in total
	*/

	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 3)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 9)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 102)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 103)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 104)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 105)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 106)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 107)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 108)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 109)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 30)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 59)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 118)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 52)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 110)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 112)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 119)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 53)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 111)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 113)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 60)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 61)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 29)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 20)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 21)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 22)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 23)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 24)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 25)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 26)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 27)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 28)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 35)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 117)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 116)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 88)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 87)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 90)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 89)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 86)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 85)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 43)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 42)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 41)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 40)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 39)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 38)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 37)));
	leds.insert (make_pair (id, LED (id, LED::ColorButton, 36)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 46)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 45)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 47)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 44)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 56)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 57)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 58)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 31)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 50)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 51)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 55)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 63)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 54)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 62)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 49)));
	leds.insert (make_pair (id, LED (id, LED::WhiteButton, 48)));
}