Skip to content

Button Indices

Button indexing follows a 10x10 grid pattern. Corner indices (dimmed) are virtual - no physical button exists.

90
91
92
93
94
95
96
97
98
99
80
81
82
83
84
85
86
87
88
89
70
71
72
73
74
75
76
77
78
79
60
61
62
63
64
65
66
67
68
69
50
51
52
53
54
55
56
57
58
59
40
41
42
43
44
45
46
47
48
49
30
31
32
33
34
35
36
37
38
39
20
21
22
23
24
25
26
27
28
29
10
11
12
13
14
15
16
17
18
19
0
1
2
3
4
5
6
7
8
9

Indices: 11-18, 21-28, 31-38, 41-48, 51-58, 61-68, 71-78, 81-88

// Row from index
int row = index / 10; // 1-8
// Column from index
int col = index % 10; // 1-8

Indices: 91-98

IndexButtonPolyBoard Function
91Arrow UpOctave Up
92Arrow DownOctave Down
93Arrow LeftTranspose Down
94Arrow RightTranspose Up
95SessionPage 1
96NotePage 2
97DevicePage 3
98UserPage 4

Indices: 1-8

IndexButton
1Record Arm
2Track Select
3Mute
4Solo
5Volume
6Pan
7Sends
8Stop Clip

Indices: 80, 70, 60, 50, 40, 30, 20, 10 (top to bottom)

IndexButtonPolyBoard Function
80ShiftModifier key
70Click(unused)
60Undo(unused)
50Delete(unused)
40QuantiseScale Lock toggle (global)
30Duplicate(unused)
20DoubleScale selection
10Circle (Record)Root selection

Indices: 89, 79, 69, 59, 49, 39, 29, 19 (top to bottom)

Scene launch buttons (arrow shape). Used as octave indicator in play mode:

IndexPositionOctave Indication
89TopTurns off first when octave < 5
79
69
59
49
39
29
19BottomTurns off first when octave > 5
  • All lit: Default octave (5)
  • Off from bottom: Higher octave (+1 to +5)
  • Off from top: Lower octave (-1 to -5)
enum SurfaceKeyType index_to_surface_key_type(unsigned char index) {
if (index >= 90) return SURFACE_CTRL;
if (index <= 10) return SURFACE_CTRL;
if (index % 10 == 9) return SURFACE_CTRL;
if (index % 10 == 0) return SURFACE_CTRL;
return SURFACE_PAD;
}

Use hal_plot_led(type, index, r, g, b) where RGB values are 0-63.

TypeValueUsage
TYPEPAD0Main grid and controls
TYPESETUP1Setup button only