Add test patterns for new tower abstraction with cubes in it
[SugarCubes.git] / _Mappings.pde
1 /**
2 * DOUBLE BLACK DIAMOND DOUBLE BLACK DIAMOND
3 *
4 * //\\ //\\ //\\ //\\
5 * ///\\\ ///\\\ ///\\\ ///\\\
6 * \\\/// \\\/// \\\/// \\\///
7 * \\// \\// \\// \\//
8 *
9 * EXPERTS ONLY!! EXPERTS ONLY!!
10 *
11 * This file implements the mapping functions needed to lay out the physical
12 * cubes and the output ports on the panda board. It should only be modified
13 * when physical changes or tuning is being done to the structure.
14 */
15
16 public Model buildModel() {
17 // TODO(mcslee): find a cleaner way of representing this data, probably
18 // serialized in some more neutral form. also figure out what's going on
19 // with the indexing starting at 1 and some indices missing.
20 ArrayList<Tower> towerList = new ArrayList<Tower>();
21 ArrayList<Cube> tower;
22 Cube[] cubes = new Cube[79];
23 int cubeIndex = 1;
24
25 tower = new ArrayList<Cube>();
26 tower.add(cubes[cubeIndex++] = new Cube(0, 0, 0, 0, 0, 0));
27 tower.add(cubes[cubeIndex++] = new Cube(5, Cube.EDGE_HEIGHT, -10, 0, 20, 0));
28 tower.add(cubes[cubeIndex++] = new Cube(0, 2*Cube.EDGE_HEIGHT, -6, 0, 0, 0));
29 tower.add(cubes[cubeIndex++] = new Cube(-5, 3*Cube.EDGE_HEIGHT, -2, 0, -20, 0));
30 towerList.add(new Tower(tower));
31
32 tower = new ArrayList<Cube>();
33 tower.add(cubes[cubeIndex++] = new Cube(Cube.EDGE_WIDTH + 2, 0, 0, 0, 0, 0));
34 tower.add(cubes[cubeIndex++] = new Cube(Cube.EDGE_WIDTH + 2, Cube.EDGE_HEIGHT, 5, 0, 10, 0));
35 tower.add(cubes[cubeIndex++] = new Cube(Cube.EDGE_WIDTH + 2, 2*Cube.EDGE_HEIGHT, 2, 0, 20, 0));
36 tower.add(cubes[cubeIndex++] = new Cube(Cube.EDGE_WIDTH + 2, 3*Cube.EDGE_HEIGHT, 0, 0, 30, 0));
37 towerList.add(new Tower(tower));
38
39 // Back Cubes behind DJ platform (in order of increasing x)
40 tower = new ArrayList<Cube>();
41 tower.add(cubes[cubeIndex++] = new Cube(50, 0, BASS_DEPTH, 0, 0, 0));
42 tower.add(cubes[cubeIndex++] = new Cube(52, 5+Cube.EDGE_HEIGHT, BASS_DEPTH, 0, 20, 0));
43 tower.add(cubes[cubeIndex++] = new Cube(48, 5+2*Cube.EDGE_HEIGHT, BASS_DEPTH + 10, 0, 0, 0));
44 tower.add(cubes[cubeIndex++] = new Cube(45, 5+3*Cube.EDGE_HEIGHT, BASS_DEPTH + 15, 0, -20, 0));
45 tower.add(cubes[cubeIndex++] = new Cube(48, 5+4*Cube.EDGE_HEIGHT, BASS_DEPTH + 13, 0, 0, 0));
46 towerList.add(new Tower(tower));
47
48 tower = new ArrayList<Cube>();
49 tower.add(cubes[cubeIndex++] = new Cube(79, 0, BASS_DEPTH, 0, 0, 0));
50 tower.add(cubes[cubeIndex++] = new Cube(81, 5+Cube.EDGE_HEIGHT, BASS_DEPTH, 0, 20, 0));
51 tower.add(cubes[cubeIndex++] = new Cube(83, 5+2*Cube.EDGE_HEIGHT, BASS_DEPTH + 10, 0, 0, 0));
52 tower.add(cubes[cubeIndex++] = new Cube(81, 5+3*Cube.EDGE_HEIGHT, BASS_DEPTH + 15, 0, -20, 0));
53 tower.add(cubes[cubeIndex++] = new Cube(79, 5+4*Cube.EDGE_HEIGHT, BASS_DEPTH + 13, 0, 0, 0));
54 towerList.add(new Tower(tower));
55
56 tower = new ArrayList<Cube>();
57 tower.add(cubes[cubeIndex++] = new Cube(107, 0, BASS_DEPTH, 0, 0, 0));
58 tower.add(cubes[cubeIndex++] = new Cube(111, 5+Cube.EDGE_HEIGHT, BASS_DEPTH, 0, 20, 0));
59 tower.add(cubes[cubeIndex++] = new Cube(113, 5+2*Cube.EDGE_HEIGHT, BASS_DEPTH + 10, 0, 0, 0));
60 tower.add(cubes[cubeIndex++] = new Cube(110, 5+3*Cube.EDGE_HEIGHT, BASS_DEPTH + 15, 0, -20, 0));
61 // tower.add(cubes[cubeIndex++] = new Cube(115, 5+4*Cube.EDGE_HEIGHT, BASS_DEPTH + 13, 0, 0, 0));
62 towerList.add(new Tower(tower));
63
64 tower = new ArrayList<Cube>();
65 tower.add(cubes[cubeIndex++] = new Cube(133, 0, BASS_DEPTH, 0, 0, 0));
66 tower.add(cubes[cubeIndex++] = new Cube(131, 5+Cube.EDGE_HEIGHT, BASS_DEPTH, 0, 20, 0));
67 tower.add(cubes[cubeIndex++] = new Cube(133, 5+2*Cube.EDGE_HEIGHT, BASS_DEPTH + 10, 0, 0, 0));
68 tower.add(cubes[cubeIndex++] = new Cube(135, 5+3*Cube.EDGE_HEIGHT, BASS_DEPTH + 15, 0, -20, 0));
69 // tower.add(cubes[cubeIndex++] = new Cube(137, 5+4*Cube.EDGE_HEIGHT, BASS_DEPTH + 13, 0, 0, 0));
70 towerList.add(new Tower(tower));
71
72 tower = new ArrayList<Cube>();
73 tower.add(cubes[cubeIndex++] = new Cube(165, 0, BASS_DEPTH, 0, 0, 0));
74 tower.add(cubes[cubeIndex++] = new Cube(164, 5+Cube.EDGE_HEIGHT, BASS_DEPTH, 0, 20, 0));
75 tower.add(cubes[cubeIndex++] = new Cube(167, 5+2*Cube.EDGE_HEIGHT, BASS_DEPTH + 10, 0, 0, 0));
76 tower.add(cubes[cubeIndex++] = new Cube(163, 5+3*Cube.EDGE_HEIGHT, BASS_DEPTH + 15, 0, -20, 0));
77 tower.add(cubes[cubeIndex++] = new Cube(168, 5+4*Cube.EDGE_HEIGHT, BASS_DEPTH + 13, 0, 0, 0));
78 towerList.add(new Tower(tower));
79
80 // front DJ cubes
81 tower = new ArrayList<Cube>();
82 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2, BASS_HEIGHT + 0, 10, 0, 0, 0));
83 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2, BASS_HEIGHT + Cube.EDGE_HEIGHT, 0, 0, 20, 0));
84 towerList.add(new Tower(tower));
85
86 tower = new ArrayList<Cube>();
87 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + Cube.EDGE_HEIGHT + 2, BASS_HEIGHT+Cube.EDGE_HEIGHT, 0, 0, 20, 0));
88 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + Cube.EDGE_HEIGHT + 3, BASS_HEIGHT, 10, 0, 0, 0));
89 towerList.add(new Tower(tower));
90
91 tower = new ArrayList<Cube>();
92 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 2*Cube.EDGE_HEIGHT + 5, BASS_HEIGHT + 0, 10, 0, 0, 0));
93 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 2*Cube.EDGE_HEIGHT + 6, BASS_HEIGHT + Cube.EDGE_HEIGHT, 10, 0, 10, 0));
94 towerList.add(new Tower(tower));
95
96 tower = new ArrayList<Cube>();
97 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 3*Cube.EDGE_HEIGHT + 9, BASS_HEIGHT + 0, 10, 0, 0, 0));
98 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 3*Cube.EDGE_HEIGHT + 8, BASS_HEIGHT + Cube.EDGE_HEIGHT, 10, 0, 0, 0));
99 towerList.add(new Tower(tower));
100
101 tower = new ArrayList<Cube>();
102 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 4*Cube.EDGE_HEIGHT + 15, BASS_HEIGHT + 0, 10, 0, 0, 0));
103 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 4*Cube.EDGE_HEIGHT + 14, BASS_HEIGHT + Cube.EDGE_HEIGHT, 10, 0, 0, 0));
104 towerList.add(new Tower(tower));
105
106 // left dj cubes
107 tower = new ArrayList<Cube>();
108 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2, BASS_HEIGHT + 0, Cube.EDGE_HEIGHT + 2, 0, 0, 0));
109 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2, BASS_HEIGHT + Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 4, 0, 20, 0));
110 towerList.add(new Tower(tower));
111
112 tower = new ArrayList<Cube>();
113 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2, BASS_HEIGHT + 0, 2*Cube.EDGE_HEIGHT + 4, 0, 0, 0));
114 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2, BASS_HEIGHT + Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 6, 0, 20, 0));
115 towerList.add(new Tower(tower));
116
117 // right dj cubes
118 tower = new ArrayList<Cube>();
119 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 4*Cube.EDGE_HEIGHT + 15, BASS_HEIGHT + 0, Cube.EDGE_HEIGHT + 2, 0, 0, 0));
120 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 4*Cube.EDGE_HEIGHT + 15, BASS_HEIGHT + Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 4, 0, 20, 0));
121 towerList.add(new Tower(tower));
122
123 tower = new ArrayList<Cube>();
124 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 4*Cube.EDGE_HEIGHT + 15, BASS_HEIGHT + 0, 2*Cube.EDGE_HEIGHT + 4, 0, 0, 0));
125 tower.add(cubes[cubeIndex++] = new Cube((TRAILER_WIDTH - BASS_WIDTH)/2 + 4*Cube.EDGE_HEIGHT + 15, BASS_HEIGHT + Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 6, 0, 20, 0));
126 towerList.add(new Tower(tower));
127
128 tower = new ArrayList<Cube>();
129 tower.add(cubes[cubeIndex++] = new Cube(200, 0, 10, 0, 0, 0));
130 tower.add(cubes[cubeIndex++] = new Cube(205, Cube.EDGE_HEIGHT, 0, 0, 20, 0));
131 tower.add(cubes[cubeIndex++] = new Cube(200, 2*Cube.EDGE_HEIGHT, 4, 0, 0, 0));
132 tower.add(cubes[cubeIndex++] = new Cube(195, 3*Cube.EDGE_HEIGHT, 8, 0, -20, 0));
133 tower.add(cubes[cubeIndex++] = new Cube(200, 4*Cube.EDGE_HEIGHT, 3, 0, 0, 0));
134 towerList.add(new Tower(tower));
135
136 tower = new ArrayList<Cube>();
137 tower.add(cubes[cubeIndex++] = new Cube(10, 0 , Cube.EDGE_HEIGHT + 10, 0, 40, 0));
138 tower.add(cubes[cubeIndex++] = new Cube(3, Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 8, 0, 20, 0));
139 tower.add(cubes[cubeIndex++] = new Cube(0, 2*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 10, 0, 40, 0));
140 tower.add(cubes[cubeIndex++] = new Cube(0, 3*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 10, 0, 60, 0));
141 tower.add(cubes[cubeIndex++] = new Cube(0, 4*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 10, 0, 40, 0));
142 towerList.add(new Tower(tower));
143
144 tower = new ArrayList<Cube>();
145 tower.add(cubes[cubeIndex++] = new Cube(20, 0, 2*Cube.EDGE_HEIGHT + 18, 0, 40, 0));
146 tower.add(cubes[cubeIndex++] = new Cube(30, Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 20, 0));
147 tower.add(cubes[cubeIndex++] = new Cube(25, 2*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 40, 0));
148 tower.add(cubes[cubeIndex++] = new Cube(30, 3*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 60, 0));
149 tower.add(cubes[cubeIndex++] = new Cube(32, 4*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 40, 0));
150 towerList.add(new Tower(tower));
151
152 tower = new ArrayList<Cube>();
153 tower.add(cubes[cubeIndex++] = new Cube(210, 0, Cube.EDGE_HEIGHT + 15, 0, 40, 0));
154 tower.add(cubes[cubeIndex++] = new Cube(215, Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 20, 0));
155 tower.add(cubes[cubeIndex++] = new Cube(218, 2*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 40, 0));
156 tower.add(cubes[cubeIndex++] = new Cube(213, 3*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 60, 0));
157 tower.add(cubes[cubeIndex++] = new Cube(210, 4*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 40, 0));
158 towerList.add(new Tower(tower));
159
160 tower = new ArrayList<Cube>();
161 tower.add(cubes[cubeIndex++] = new Cube(210, 0, 2*Cube.EDGE_HEIGHT + 25, 0, 40, 0));
162 tower.add(cubes[cubeIndex++] = new Cube(215, Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 20, 0));
163 tower.add(cubes[cubeIndex++] = new Cube(212, 2*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 40, 0));
164 tower.add(cubes[cubeIndex++] = new Cube(215, 3*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 60, 0));
165 tower.add(cubes[cubeIndex++] = new Cube(210, 4*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 40, 0));
166 towerList.add(new Tower(tower));
167
168 return new Model(towerList, cubes);
169 }
170
171 public PandaMapping[] buildPandaList() {
172 return new PandaMapping[] {
173 new PandaMapping(
174 "10.200.1.28", new int[][] {
175 { 1, 2, 3, 4 }, // ch1
176 { 5, 6, 7, 8 }, // ch2
177 { 9, 10, 11, 12 }, // ch3
178 { 13, 14, 15, 16 }, // ch4
179 { 17, 18, 19, 20 }, // ch5
180 { 21, 22, 23, 24 }, // ch6
181 { 25, 26, 27, 28 }, // ch7
182 { 29, 30, 31, 32 }, // ch8
183 }),
184
185 new PandaMapping(
186 "10.200.1.29", new int[][] {
187 { 33, 34, 35, 36 }, // ch9
188 { 37, 38, 39, 40 }, // ch10
189 { 41, 42, 43, 44 }, // ch11
190 { 45, 46, 47, 48 }, // ch12
191 { 49, 50, 51, 52 }, // ch13
192 { 53, 54, 55, 56 }, // ch14
193 { 57, 58, 59, 60 }, // ch15
194 { 61, 62, 63, 64 }, // ch16
195 }),
196
197 };
198 }
199
200 class PandaMapping {
201
202 // How many channels are on the panda board
203 public final static int CHANNELS_PER_BOARD = 8;
204
205 // How many cubes per channel xc_PB is configured for
206 public final static int CUBES_PER_CHANNEL = 4;
207
208 // How many total pixels on each channel
209 public final static int PIXELS_PER_CHANNEL = Cube.POINTS_PER_CUBE * CUBES_PER_CHANNEL;
210
211 // How many total pixels on the whole board
212 public final static int PIXELS_PER_BOARD = PIXELS_PER_CHANNEL * CHANNELS_PER_BOARD;
213
214 final String ip;
215 final int[][] channelList = new int[CHANNELS_PER_BOARD][CUBES_PER_CHANNEL];
216
217 PandaMapping(String ip, int[][] rawChannelList) {
218 this.ip = ip;
219 for (int chi = 0; chi < CHANNELS_PER_BOARD; ++chi) {
220 int[] cubes = (chi < rawChannelList.length) ? rawChannelList[chi] : new int[]{};
221 for (int cui = 0; cui < CUBES_PER_CHANNEL; ++cui) {
222 channelList[chi][cui] = (cui < cubes.length) ? cubes[cui] : 0;
223 }
224 }
225 }
226 }
227
228