RBComb 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- RBComb/Helper/BoardPinout.py +584 -0
- RBComb/Helper/BoardUnits.py +35 -0
- RBComb/Helper/FunctionInterpolator.py +52 -0
- RBComb/Helper/__init__.py +0 -0
- RBComb/LaserInterface.py +103 -0
- RBComb/RBComb576.py +131 -0
- RBComb/SerialBridge.py +75 -0
- RBComb/__init__.py +0 -0
- rbcomb-0.2.0.dist-info/METADATA +18 -0
- rbcomb-0.2.0.dist-info/RECORD +12 -0
- rbcomb-0.2.0.dist-info/WHEEL +5 -0
- rbcomb-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
import numpy as np;
|
|
2
|
+
|
|
3
|
+
class BoardPinout:
|
|
4
|
+
def getOutputNumber(self, i, j):
|
|
5
|
+
return self.pinNumber[i,j];
|
|
6
|
+
|
|
7
|
+
def __init__(self):
|
|
8
|
+
self.pinNumber = np.zeros([36,16], dtype='int');
|
|
9
|
+
self.pinNumber[0,0] = 63;
|
|
10
|
+
self.pinNumber[0,1] = 62;
|
|
11
|
+
self.pinNumber[0,2] = 61;
|
|
12
|
+
self.pinNumber[0,3] = 51;
|
|
13
|
+
self.pinNumber[0,4] = 50;
|
|
14
|
+
self.pinNumber[0,5] = 49;
|
|
15
|
+
self.pinNumber[0,6] = 39;
|
|
16
|
+
self.pinNumber[0,7] = 38;
|
|
17
|
+
self.pinNumber[0,8] = 37;
|
|
18
|
+
self.pinNumber[0,9] = 27;
|
|
19
|
+
self.pinNumber[0,10] = 26;
|
|
20
|
+
self.pinNumber[0,11] = 25;
|
|
21
|
+
self.pinNumber[0,12] = 15;
|
|
22
|
+
self.pinNumber[0,13] = 14;
|
|
23
|
+
self.pinNumber[0,14] = 13;
|
|
24
|
+
self.pinNumber[0,15] = 3;
|
|
25
|
+
self.pinNumber[1,0] = 60;
|
|
26
|
+
self.pinNumber[1,1] = 59;
|
|
27
|
+
self.pinNumber[1,2] = 58;
|
|
28
|
+
self.pinNumber[1,3] = 48;
|
|
29
|
+
self.pinNumber[1,4] = 47;
|
|
30
|
+
self.pinNumber[1,5] = 46;
|
|
31
|
+
self.pinNumber[1,6] = 36;
|
|
32
|
+
self.pinNumber[1,7] = 35;
|
|
33
|
+
self.pinNumber[1,8] = 34;
|
|
34
|
+
self.pinNumber[1,9] = 24;
|
|
35
|
+
self.pinNumber[1,10] = 23;
|
|
36
|
+
self.pinNumber[1,11] = 22;
|
|
37
|
+
self.pinNumber[1,12] = 12;
|
|
38
|
+
self.pinNumber[1,13] = 11;
|
|
39
|
+
self.pinNumber[1,14] = 10;
|
|
40
|
+
self.pinNumber[1,15] = 2;
|
|
41
|
+
self.pinNumber[2,0] = 57;
|
|
42
|
+
self.pinNumber[2,1] = 56;
|
|
43
|
+
self.pinNumber[2,2] = 55;
|
|
44
|
+
self.pinNumber[2,3] = 45;
|
|
45
|
+
self.pinNumber[2,4] = 44;
|
|
46
|
+
self.pinNumber[2,5] = 43;
|
|
47
|
+
self.pinNumber[2,6] = 33;
|
|
48
|
+
self.pinNumber[2,7] = 32;
|
|
49
|
+
self.pinNumber[2,8] = 31;
|
|
50
|
+
self.pinNumber[2,9] = 21;
|
|
51
|
+
self.pinNumber[2,10] = 20;
|
|
52
|
+
self.pinNumber[2,11] = 19;
|
|
53
|
+
self.pinNumber[2,12] = 9;
|
|
54
|
+
self.pinNumber[2,13] = 8;
|
|
55
|
+
self.pinNumber[2,14] = 7;
|
|
56
|
+
self.pinNumber[2,15] = 1;
|
|
57
|
+
self.pinNumber[3,0] = 54;
|
|
58
|
+
self.pinNumber[3,1] = 53;
|
|
59
|
+
self.pinNumber[3,2] = 52;
|
|
60
|
+
self.pinNumber[3,3] = 42;
|
|
61
|
+
self.pinNumber[3,4] = 41;
|
|
62
|
+
self.pinNumber[3,5] = 40;
|
|
63
|
+
self.pinNumber[3,6] = 30;
|
|
64
|
+
self.pinNumber[3,7] = 29;
|
|
65
|
+
self.pinNumber[3,8] = 28;
|
|
66
|
+
self.pinNumber[3,9] = 18;
|
|
67
|
+
self.pinNumber[3,10] = 17;
|
|
68
|
+
self.pinNumber[3,11] = 16;
|
|
69
|
+
self.pinNumber[3,12] = 6;
|
|
70
|
+
self.pinNumber[3,13] = 5;
|
|
71
|
+
self.pinNumber[3,14] = 4;
|
|
72
|
+
self.pinNumber[3,15] = 0;
|
|
73
|
+
self.pinNumber[4,0] = 127;
|
|
74
|
+
self.pinNumber[4,1] = 126;
|
|
75
|
+
self.pinNumber[4,2] = 125;
|
|
76
|
+
self.pinNumber[4,3] = 115;
|
|
77
|
+
self.pinNumber[4,4] = 114;
|
|
78
|
+
self.pinNumber[4,5] = 113;
|
|
79
|
+
self.pinNumber[4,6] = 103;
|
|
80
|
+
self.pinNumber[4,7] = 102;
|
|
81
|
+
self.pinNumber[4,8] = 101;
|
|
82
|
+
self.pinNumber[4,9] = 91;
|
|
83
|
+
self.pinNumber[4,10] = 90;
|
|
84
|
+
self.pinNumber[4,11] = 89;
|
|
85
|
+
self.pinNumber[4,12] = 79;
|
|
86
|
+
self.pinNumber[4,13] = 78;
|
|
87
|
+
self.pinNumber[4,14] = 77;
|
|
88
|
+
self.pinNumber[4,15] = 67;
|
|
89
|
+
self.pinNumber[5,0] = 124;
|
|
90
|
+
self.pinNumber[5,1] = 123;
|
|
91
|
+
self.pinNumber[5,2] = 122;
|
|
92
|
+
self.pinNumber[5,3] = 112;
|
|
93
|
+
self.pinNumber[5,4] = 111;
|
|
94
|
+
self.pinNumber[5,5] = 110;
|
|
95
|
+
self.pinNumber[5,6] = 100;
|
|
96
|
+
self.pinNumber[5,7] = 99;
|
|
97
|
+
self.pinNumber[5,8] = 98;
|
|
98
|
+
self.pinNumber[5,9] = 88;
|
|
99
|
+
self.pinNumber[5,10] = 87;
|
|
100
|
+
self.pinNumber[5,11] = 86;
|
|
101
|
+
self.pinNumber[5,12] = 76;
|
|
102
|
+
self.pinNumber[5,13] = 75;
|
|
103
|
+
self.pinNumber[5,14] = 74;
|
|
104
|
+
self.pinNumber[5,15] = 66;
|
|
105
|
+
self.pinNumber[6,0] = 121;
|
|
106
|
+
self.pinNumber[6,1] = 120;
|
|
107
|
+
self.pinNumber[6,2] = 119;
|
|
108
|
+
self.pinNumber[6,3] = 109;
|
|
109
|
+
self.pinNumber[6,4] = 108;
|
|
110
|
+
self.pinNumber[6,5] = 107;
|
|
111
|
+
self.pinNumber[6,6] = 97;
|
|
112
|
+
self.pinNumber[6,7] = 96;
|
|
113
|
+
self.pinNumber[6,8] = 95;
|
|
114
|
+
self.pinNumber[6,9] = 85;
|
|
115
|
+
self.pinNumber[6,10] = 84;
|
|
116
|
+
self.pinNumber[6,11] = 83;
|
|
117
|
+
self.pinNumber[6,12] = 73;
|
|
118
|
+
self.pinNumber[6,13] = 72;
|
|
119
|
+
self.pinNumber[6,14] = 71;
|
|
120
|
+
self.pinNumber[6,15] = 65;
|
|
121
|
+
self.pinNumber[7,0] = 118;
|
|
122
|
+
self.pinNumber[7,1] = 117;
|
|
123
|
+
self.pinNumber[7,2] = 116;
|
|
124
|
+
self.pinNumber[7,3] = 106;
|
|
125
|
+
self.pinNumber[7,4] = 105;
|
|
126
|
+
self.pinNumber[7,5] = 104;
|
|
127
|
+
self.pinNumber[7,6] = 94;
|
|
128
|
+
self.pinNumber[7,7] = 93;
|
|
129
|
+
self.pinNumber[7,8] = 92;
|
|
130
|
+
self.pinNumber[7,9] = 82;
|
|
131
|
+
self.pinNumber[7,10] = 81;
|
|
132
|
+
self.pinNumber[7,11] = 80;
|
|
133
|
+
self.pinNumber[7,12] = 70;
|
|
134
|
+
self.pinNumber[7,13] = 69;
|
|
135
|
+
self.pinNumber[7,14] = 68;
|
|
136
|
+
self.pinNumber[7,15] = 64;
|
|
137
|
+
self.pinNumber[8,0] = 191;
|
|
138
|
+
self.pinNumber[8,1] = 190;
|
|
139
|
+
self.pinNumber[8,2] = 189;
|
|
140
|
+
self.pinNumber[8,3] = 179;
|
|
141
|
+
self.pinNumber[8,4] = 178;
|
|
142
|
+
self.pinNumber[8,5] = 177;
|
|
143
|
+
self.pinNumber[8,6] = 167;
|
|
144
|
+
self.pinNumber[8,7] = 166;
|
|
145
|
+
self.pinNumber[8,8] = 165;
|
|
146
|
+
self.pinNumber[8,9] = 155;
|
|
147
|
+
self.pinNumber[8,10] = 154;
|
|
148
|
+
self.pinNumber[8,11] = 153;
|
|
149
|
+
self.pinNumber[8,12] = 143;
|
|
150
|
+
self.pinNumber[8,13] = 142;
|
|
151
|
+
self.pinNumber[8,14] = 141;
|
|
152
|
+
self.pinNumber[8,15] = 131;
|
|
153
|
+
self.pinNumber[9,0] = 188;
|
|
154
|
+
self.pinNumber[9,1] = 187;
|
|
155
|
+
self.pinNumber[9,2] = 186;
|
|
156
|
+
self.pinNumber[9,3] = 176;
|
|
157
|
+
self.pinNumber[9,4] = 175;
|
|
158
|
+
self.pinNumber[9,5] = 174;
|
|
159
|
+
self.pinNumber[9,6] = 164;
|
|
160
|
+
self.pinNumber[9,7] = 163;
|
|
161
|
+
self.pinNumber[9,8] = 162;
|
|
162
|
+
self.pinNumber[9,9] = 152;
|
|
163
|
+
self.pinNumber[9,10] = 151;
|
|
164
|
+
self.pinNumber[9,11] = 150;
|
|
165
|
+
self.pinNumber[9,12] = 140;
|
|
166
|
+
self.pinNumber[9,13] = 139;
|
|
167
|
+
self.pinNumber[9,14] = 138;
|
|
168
|
+
self.pinNumber[9,15] = 130;
|
|
169
|
+
self.pinNumber[10,0] = 185;
|
|
170
|
+
self.pinNumber[10,1] = 184;
|
|
171
|
+
self.pinNumber[10,2] = 183;
|
|
172
|
+
self.pinNumber[10,3] = 173;
|
|
173
|
+
self.pinNumber[10,4] = 172;
|
|
174
|
+
self.pinNumber[10,5] = 171;
|
|
175
|
+
self.pinNumber[10,6] = 161;
|
|
176
|
+
self.pinNumber[10,7] = 160;
|
|
177
|
+
self.pinNumber[10,8] = 159;
|
|
178
|
+
self.pinNumber[10,9] = 149;
|
|
179
|
+
self.pinNumber[10,10] = 148;
|
|
180
|
+
self.pinNumber[10,11] = 147;
|
|
181
|
+
self.pinNumber[10,12] = 137;
|
|
182
|
+
self.pinNumber[10,13] = 136;
|
|
183
|
+
self.pinNumber[10,14] = 135;
|
|
184
|
+
self.pinNumber[10,15] = 129;
|
|
185
|
+
self.pinNumber[11,0] = 182;
|
|
186
|
+
self.pinNumber[11,1] = 181;
|
|
187
|
+
self.pinNumber[11,2] = 180;
|
|
188
|
+
self.pinNumber[11,3] = 170;
|
|
189
|
+
self.pinNumber[11,4] = 169;
|
|
190
|
+
self.pinNumber[11,5] = 168;
|
|
191
|
+
self.pinNumber[11,6] = 158;
|
|
192
|
+
self.pinNumber[11,7] = 157;
|
|
193
|
+
self.pinNumber[11,8] = 156;
|
|
194
|
+
self.pinNumber[11,9] = 146;
|
|
195
|
+
self.pinNumber[11,10] = 145;
|
|
196
|
+
self.pinNumber[11,11] = 144;
|
|
197
|
+
self.pinNumber[11,12] = 134;
|
|
198
|
+
self.pinNumber[11,13] = 133;
|
|
199
|
+
self.pinNumber[11,14] = 132;
|
|
200
|
+
self.pinNumber[11,15] = 128;
|
|
201
|
+
self.pinNumber[12,0] = 255;
|
|
202
|
+
self.pinNumber[12,1] = 254;
|
|
203
|
+
self.pinNumber[12,2] = 253;
|
|
204
|
+
self.pinNumber[12,3] = 243;
|
|
205
|
+
self.pinNumber[12,4] = 242;
|
|
206
|
+
self.pinNumber[12,5] = 241;
|
|
207
|
+
self.pinNumber[12,6] = 231;
|
|
208
|
+
self.pinNumber[12,7] = 230;
|
|
209
|
+
self.pinNumber[12,8] = 229;
|
|
210
|
+
self.pinNumber[12,9] = 219;
|
|
211
|
+
self.pinNumber[12,10] = 218;
|
|
212
|
+
self.pinNumber[12,11] = 217;
|
|
213
|
+
self.pinNumber[12,12] = 207;
|
|
214
|
+
self.pinNumber[12,13] = 206;
|
|
215
|
+
self.pinNumber[12,14] = 205;
|
|
216
|
+
self.pinNumber[12,15] = 195;
|
|
217
|
+
self.pinNumber[13,0] = 252;
|
|
218
|
+
self.pinNumber[13,1] = 251;
|
|
219
|
+
self.pinNumber[13,2] = 250;
|
|
220
|
+
self.pinNumber[13,3] = 240;
|
|
221
|
+
self.pinNumber[13,4] = 239;
|
|
222
|
+
self.pinNumber[13,5] = 238;
|
|
223
|
+
self.pinNumber[13,6] = 228;
|
|
224
|
+
self.pinNumber[13,7] = 227;
|
|
225
|
+
self.pinNumber[13,8] = 226;
|
|
226
|
+
self.pinNumber[13,9] = 216;
|
|
227
|
+
self.pinNumber[13,10] = 215;
|
|
228
|
+
self.pinNumber[13,11] = 214;
|
|
229
|
+
self.pinNumber[13,12] = 204;
|
|
230
|
+
self.pinNumber[13,13] = 203;
|
|
231
|
+
self.pinNumber[13,14] = 202;
|
|
232
|
+
self.pinNumber[13,15] = 194;
|
|
233
|
+
self.pinNumber[14,0] = 249;
|
|
234
|
+
self.pinNumber[14,1] = 248;
|
|
235
|
+
self.pinNumber[14,2] = 247;
|
|
236
|
+
self.pinNumber[14,3] = 237;
|
|
237
|
+
self.pinNumber[14,4] = 236;
|
|
238
|
+
self.pinNumber[14,5] = 235;
|
|
239
|
+
self.pinNumber[14,6] = 225;
|
|
240
|
+
self.pinNumber[14,7] = 224;
|
|
241
|
+
self.pinNumber[14,8] = 223;
|
|
242
|
+
self.pinNumber[14,9] = 213;
|
|
243
|
+
self.pinNumber[14,10] = 212;
|
|
244
|
+
self.pinNumber[14,11] = 211;
|
|
245
|
+
self.pinNumber[14,12] = 201;
|
|
246
|
+
self.pinNumber[14,13] = 200;
|
|
247
|
+
self.pinNumber[14,14] = 199;
|
|
248
|
+
self.pinNumber[14,15] = 193;
|
|
249
|
+
self.pinNumber[15,0] = 246;
|
|
250
|
+
self.pinNumber[15,1] = 245;
|
|
251
|
+
self.pinNumber[15,2] = 244;
|
|
252
|
+
self.pinNumber[15,3] = 234;
|
|
253
|
+
self.pinNumber[15,4] = 233;
|
|
254
|
+
self.pinNumber[15,5] = 232;
|
|
255
|
+
self.pinNumber[15,6] = 222;
|
|
256
|
+
self.pinNumber[15,7] = 221;
|
|
257
|
+
self.pinNumber[15,8] = 220;
|
|
258
|
+
self.pinNumber[15,9] = 210;
|
|
259
|
+
self.pinNumber[15,10] = 209;
|
|
260
|
+
self.pinNumber[15,11] = 208;
|
|
261
|
+
self.pinNumber[15,12] = 198;
|
|
262
|
+
self.pinNumber[15,13] = 197;
|
|
263
|
+
self.pinNumber[15,14] = 196;
|
|
264
|
+
self.pinNumber[15,15] = 192;
|
|
265
|
+
self.pinNumber[16,0] = 319;
|
|
266
|
+
self.pinNumber[16,1] = 318;
|
|
267
|
+
self.pinNumber[16,2] = 317;
|
|
268
|
+
self.pinNumber[16,3] = 307;
|
|
269
|
+
self.pinNumber[16,4] = 306;
|
|
270
|
+
self.pinNumber[16,5] = 305;
|
|
271
|
+
self.pinNumber[16,6] = 295;
|
|
272
|
+
self.pinNumber[16,7] = 294;
|
|
273
|
+
self.pinNumber[16,8] = 293;
|
|
274
|
+
self.pinNumber[16,9] = 283;
|
|
275
|
+
self.pinNumber[16,10] = 282;
|
|
276
|
+
self.pinNumber[16,11] = 281;
|
|
277
|
+
self.pinNumber[16,12] = 271;
|
|
278
|
+
self.pinNumber[16,13] = 270;
|
|
279
|
+
self.pinNumber[16,14] = 269;
|
|
280
|
+
self.pinNumber[16,15] = 259;
|
|
281
|
+
self.pinNumber[17,0] = 316;
|
|
282
|
+
self.pinNumber[17,1] = 315;
|
|
283
|
+
self.pinNumber[17,2] = 314;
|
|
284
|
+
self.pinNumber[17,3] = 304;
|
|
285
|
+
self.pinNumber[17,4] = 303;
|
|
286
|
+
self.pinNumber[17,5] = 302;
|
|
287
|
+
self.pinNumber[17,6] = 292;
|
|
288
|
+
self.pinNumber[17,7] = 291;
|
|
289
|
+
self.pinNumber[17,8] = 290;
|
|
290
|
+
self.pinNumber[17,9] = 280;
|
|
291
|
+
self.pinNumber[17,10] = 279;
|
|
292
|
+
self.pinNumber[17,11] = 278;
|
|
293
|
+
self.pinNumber[17,12] = 268;
|
|
294
|
+
self.pinNumber[17,13] = 267;
|
|
295
|
+
self.pinNumber[17,14] = 266;
|
|
296
|
+
self.pinNumber[17,15] = 258;
|
|
297
|
+
self.pinNumber[18,0] = 313;
|
|
298
|
+
self.pinNumber[18,1] = 312;
|
|
299
|
+
self.pinNumber[18,2] = 311;
|
|
300
|
+
self.pinNumber[18,3] = 301;
|
|
301
|
+
self.pinNumber[18,4] = 300;
|
|
302
|
+
self.pinNumber[18,5] = 299;
|
|
303
|
+
self.pinNumber[18,6] = 289;
|
|
304
|
+
self.pinNumber[18,7] = 288;
|
|
305
|
+
self.pinNumber[18,8] = 287;
|
|
306
|
+
self.pinNumber[18,9] = 277;
|
|
307
|
+
self.pinNumber[18,10] = 276;
|
|
308
|
+
self.pinNumber[18,11] = 275;
|
|
309
|
+
self.pinNumber[18,12] = 265;
|
|
310
|
+
self.pinNumber[18,13] = 264;
|
|
311
|
+
self.pinNumber[18,14] = 263;
|
|
312
|
+
self.pinNumber[18,15] = 257;
|
|
313
|
+
self.pinNumber[19,0] = 310;
|
|
314
|
+
self.pinNumber[19,1] = 309;
|
|
315
|
+
self.pinNumber[19,2] = 308;
|
|
316
|
+
self.pinNumber[19,3] = 298;
|
|
317
|
+
self.pinNumber[19,4] = 297;
|
|
318
|
+
self.pinNumber[19,5] = 296;
|
|
319
|
+
self.pinNumber[19,6] = 286;
|
|
320
|
+
self.pinNumber[19,7] = 285;
|
|
321
|
+
self.pinNumber[19,8] = 284;
|
|
322
|
+
self.pinNumber[19,9] = 274;
|
|
323
|
+
self.pinNumber[19,10] = 273;
|
|
324
|
+
self.pinNumber[19,11] = 272;
|
|
325
|
+
self.pinNumber[19,12] = 262;
|
|
326
|
+
self.pinNumber[19,13] = 261;
|
|
327
|
+
self.pinNumber[19,14] = 260;
|
|
328
|
+
self.pinNumber[19,15] = 256;
|
|
329
|
+
self.pinNumber[20,0] = 383;
|
|
330
|
+
self.pinNumber[20,1] = 382;
|
|
331
|
+
self.pinNumber[20,2] = 381;
|
|
332
|
+
self.pinNumber[20,3] = 371;
|
|
333
|
+
self.pinNumber[20,4] = 370;
|
|
334
|
+
self.pinNumber[20,5] = 369;
|
|
335
|
+
self.pinNumber[20,6] = 359;
|
|
336
|
+
self.pinNumber[20,7] = 358;
|
|
337
|
+
self.pinNumber[20,8] = 357;
|
|
338
|
+
self.pinNumber[20,9] = 347;
|
|
339
|
+
self.pinNumber[20,10] = 346;
|
|
340
|
+
self.pinNumber[20,11] = 345;
|
|
341
|
+
self.pinNumber[20,12] = 335;
|
|
342
|
+
self.pinNumber[20,13] = 334;
|
|
343
|
+
self.pinNumber[20,14] = 333;
|
|
344
|
+
self.pinNumber[20,15] = 323;
|
|
345
|
+
self.pinNumber[21,0] = 380;
|
|
346
|
+
self.pinNumber[21,1] = 379;
|
|
347
|
+
self.pinNumber[21,2] = 378;
|
|
348
|
+
self.pinNumber[21,3] = 368;
|
|
349
|
+
self.pinNumber[21,4] = 367;
|
|
350
|
+
self.pinNumber[21,5] = 366;
|
|
351
|
+
self.pinNumber[21,6] = 356;
|
|
352
|
+
self.pinNumber[21,7] = 355;
|
|
353
|
+
self.pinNumber[21,8] = 354;
|
|
354
|
+
self.pinNumber[21,9] = 344;
|
|
355
|
+
self.pinNumber[21,10] = 343;
|
|
356
|
+
self.pinNumber[21,11] = 342;
|
|
357
|
+
self.pinNumber[21,12] = 332;
|
|
358
|
+
self.pinNumber[21,13] = 331;
|
|
359
|
+
self.pinNumber[21,14] = 330;
|
|
360
|
+
self.pinNumber[21,15] = 322;
|
|
361
|
+
self.pinNumber[22,0] = 377;
|
|
362
|
+
self.pinNumber[22,1] = 376;
|
|
363
|
+
self.pinNumber[22,2] = 375;
|
|
364
|
+
self.pinNumber[22,3] = 365;
|
|
365
|
+
self.pinNumber[22,4] = 364;
|
|
366
|
+
self.pinNumber[22,5] = 363;
|
|
367
|
+
self.pinNumber[22,6] = 353;
|
|
368
|
+
self.pinNumber[22,7] = 352;
|
|
369
|
+
self.pinNumber[22,8] = 351;
|
|
370
|
+
self.pinNumber[22,9] = 341;
|
|
371
|
+
self.pinNumber[22,10] = 340;
|
|
372
|
+
self.pinNumber[22,11] = 339;
|
|
373
|
+
self.pinNumber[22,12] = 329;
|
|
374
|
+
self.pinNumber[22,13] = 328;
|
|
375
|
+
self.pinNumber[22,14] = 327;
|
|
376
|
+
self.pinNumber[22,15] = 321;
|
|
377
|
+
self.pinNumber[23,0] = 374;
|
|
378
|
+
self.pinNumber[23,1] = 373;
|
|
379
|
+
self.pinNumber[23,2] = 372;
|
|
380
|
+
self.pinNumber[23,3] = 362;
|
|
381
|
+
self.pinNumber[23,4] = 361;
|
|
382
|
+
self.pinNumber[23,5] = 360;
|
|
383
|
+
self.pinNumber[23,6] = 350;
|
|
384
|
+
self.pinNumber[23,7] = 349;
|
|
385
|
+
self.pinNumber[23,8] = 348;
|
|
386
|
+
self.pinNumber[23,9] = 338;
|
|
387
|
+
self.pinNumber[23,10] = 337;
|
|
388
|
+
self.pinNumber[23,11] = 336;
|
|
389
|
+
self.pinNumber[23,12] = 326;
|
|
390
|
+
self.pinNumber[23,13] = 325;
|
|
391
|
+
self.pinNumber[23,14] = 324;
|
|
392
|
+
self.pinNumber[23,15] = 320;
|
|
393
|
+
self.pinNumber[24,0] = 447;
|
|
394
|
+
self.pinNumber[24,1] = 446;
|
|
395
|
+
self.pinNumber[24,2] = 445;
|
|
396
|
+
self.pinNumber[24,3] = 435;
|
|
397
|
+
self.pinNumber[24,4] = 434;
|
|
398
|
+
self.pinNumber[24,5] = 433;
|
|
399
|
+
self.pinNumber[24,6] = 423;
|
|
400
|
+
self.pinNumber[24,7] = 422;
|
|
401
|
+
self.pinNumber[24,8] = 421;
|
|
402
|
+
self.pinNumber[24,9] = 411;
|
|
403
|
+
self.pinNumber[24,10] = 410;
|
|
404
|
+
self.pinNumber[24,11] = 409;
|
|
405
|
+
self.pinNumber[24,12] = 399;
|
|
406
|
+
self.pinNumber[24,13] = 398;
|
|
407
|
+
self.pinNumber[24,14] = 397;
|
|
408
|
+
self.pinNumber[24,15] = 387;
|
|
409
|
+
self.pinNumber[25,0] = 444;
|
|
410
|
+
self.pinNumber[25,1] = 443;
|
|
411
|
+
self.pinNumber[25,2] = 442;
|
|
412
|
+
self.pinNumber[25,3] = 432;
|
|
413
|
+
self.pinNumber[25,4] = 431;
|
|
414
|
+
self.pinNumber[25,5] = 430;
|
|
415
|
+
self.pinNumber[25,6] = 420;
|
|
416
|
+
self.pinNumber[25,7] = 419;
|
|
417
|
+
self.pinNumber[25,8] = 418;
|
|
418
|
+
self.pinNumber[25,9] = 408;
|
|
419
|
+
self.pinNumber[25,10] = 407;
|
|
420
|
+
self.pinNumber[25,11] = 406;
|
|
421
|
+
self.pinNumber[25,12] = 396;
|
|
422
|
+
self.pinNumber[25,13] = 395;
|
|
423
|
+
self.pinNumber[25,14] = 394;
|
|
424
|
+
self.pinNumber[25,15] = 386;
|
|
425
|
+
self.pinNumber[26,0] = 441;
|
|
426
|
+
self.pinNumber[26,1] = 440;
|
|
427
|
+
self.pinNumber[26,2] = 439;
|
|
428
|
+
self.pinNumber[26,3] = 429;
|
|
429
|
+
self.pinNumber[26,4] = 428;
|
|
430
|
+
self.pinNumber[26,5] = 427;
|
|
431
|
+
self.pinNumber[26,6] = 417;
|
|
432
|
+
self.pinNumber[26,7] = 416;
|
|
433
|
+
self.pinNumber[26,8] = 415;
|
|
434
|
+
self.pinNumber[26,9] = 405;
|
|
435
|
+
self.pinNumber[26,10] = 404;
|
|
436
|
+
self.pinNumber[26,11] = 403;
|
|
437
|
+
self.pinNumber[26,12] = 393;
|
|
438
|
+
self.pinNumber[26,13] = 392;
|
|
439
|
+
self.pinNumber[26,14] = 391;
|
|
440
|
+
self.pinNumber[26,15] = 385;
|
|
441
|
+
self.pinNumber[27,0] = 438;
|
|
442
|
+
self.pinNumber[27,1] = 437;
|
|
443
|
+
self.pinNumber[27,2] = 436;
|
|
444
|
+
self.pinNumber[27,3] = 426;
|
|
445
|
+
self.pinNumber[27,4] = 425;
|
|
446
|
+
self.pinNumber[27,5] = 424;
|
|
447
|
+
self.pinNumber[27,6] = 414;
|
|
448
|
+
self.pinNumber[27,7] = 413;
|
|
449
|
+
self.pinNumber[27,8] = 412;
|
|
450
|
+
self.pinNumber[27,9] = 402;
|
|
451
|
+
self.pinNumber[27,10] = 401;
|
|
452
|
+
self.pinNumber[27,11] = 400;
|
|
453
|
+
self.pinNumber[27,12] = 390;
|
|
454
|
+
self.pinNumber[27,13] = 389;
|
|
455
|
+
self.pinNumber[27,14] = 388;
|
|
456
|
+
self.pinNumber[27,15] = 384;
|
|
457
|
+
self.pinNumber[28,0] = 511;
|
|
458
|
+
self.pinNumber[28,1] = 510;
|
|
459
|
+
self.pinNumber[28,2] = 509;
|
|
460
|
+
self.pinNumber[28,3] = 499;
|
|
461
|
+
self.pinNumber[28,4] = 498;
|
|
462
|
+
self.pinNumber[28,5] = 497;
|
|
463
|
+
self.pinNumber[28,6] = 487;
|
|
464
|
+
self.pinNumber[28,7] = 486;
|
|
465
|
+
self.pinNumber[28,8] = 485;
|
|
466
|
+
self.pinNumber[28,9] = 475;
|
|
467
|
+
self.pinNumber[28,10] = 474;
|
|
468
|
+
self.pinNumber[28,11] = 473;
|
|
469
|
+
self.pinNumber[28,12] = 463;
|
|
470
|
+
self.pinNumber[28,13] = 462;
|
|
471
|
+
self.pinNumber[28,14] = 461;
|
|
472
|
+
self.pinNumber[28,15] = 451;
|
|
473
|
+
self.pinNumber[29,0] = 508;
|
|
474
|
+
self.pinNumber[29,1] = 507;
|
|
475
|
+
self.pinNumber[29,2] = 506;
|
|
476
|
+
self.pinNumber[29,3] = 496;
|
|
477
|
+
self.pinNumber[29,4] = 495;
|
|
478
|
+
self.pinNumber[29,5] = 494;
|
|
479
|
+
self.pinNumber[29,6] = 484;
|
|
480
|
+
self.pinNumber[29,7] = 483;
|
|
481
|
+
self.pinNumber[29,8] = 482;
|
|
482
|
+
self.pinNumber[29,9] = 472;
|
|
483
|
+
self.pinNumber[29,10] = 471;
|
|
484
|
+
self.pinNumber[29,11] = 470;
|
|
485
|
+
self.pinNumber[29,12] = 460;
|
|
486
|
+
self.pinNumber[29,13] = 459;
|
|
487
|
+
self.pinNumber[29,14] = 458;
|
|
488
|
+
self.pinNumber[29,15] = 450;
|
|
489
|
+
self.pinNumber[30,0] = 505;
|
|
490
|
+
self.pinNumber[30,1] = 504;
|
|
491
|
+
self.pinNumber[30,2] = 503;
|
|
492
|
+
self.pinNumber[30,3] = 493;
|
|
493
|
+
self.pinNumber[30,4] = 492;
|
|
494
|
+
self.pinNumber[30,5] = 491;
|
|
495
|
+
self.pinNumber[30,6] = 481;
|
|
496
|
+
self.pinNumber[30,7] = 480;
|
|
497
|
+
self.pinNumber[30,8] = 479;
|
|
498
|
+
self.pinNumber[30,9] = 469;
|
|
499
|
+
self.pinNumber[30,10] = 468;
|
|
500
|
+
self.pinNumber[30,11] = 467;
|
|
501
|
+
self.pinNumber[30,12] = 457;
|
|
502
|
+
self.pinNumber[30,13] = 456;
|
|
503
|
+
self.pinNumber[30,14] = 455;
|
|
504
|
+
self.pinNumber[30,15] = 449;
|
|
505
|
+
self.pinNumber[31,0] = 502;
|
|
506
|
+
self.pinNumber[31,1] = 501;
|
|
507
|
+
self.pinNumber[31,2] = 500;
|
|
508
|
+
self.pinNumber[31,3] = 490;
|
|
509
|
+
self.pinNumber[31,4] = 489;
|
|
510
|
+
self.pinNumber[31,5] = 488;
|
|
511
|
+
self.pinNumber[31,6] = 478;
|
|
512
|
+
self.pinNumber[31,7] = 477;
|
|
513
|
+
self.pinNumber[31,8] = 476;
|
|
514
|
+
self.pinNumber[31,9] = 466;
|
|
515
|
+
self.pinNumber[31,10] = 465;
|
|
516
|
+
self.pinNumber[31,11] = 464;
|
|
517
|
+
self.pinNumber[31,12] = 454;
|
|
518
|
+
self.pinNumber[31,13] = 453;
|
|
519
|
+
self.pinNumber[31,14] = 452;
|
|
520
|
+
self.pinNumber[31,15] = 448;
|
|
521
|
+
self.pinNumber[32,0] = 575;
|
|
522
|
+
self.pinNumber[32,1] = 574;
|
|
523
|
+
self.pinNumber[32,2] = 573;
|
|
524
|
+
self.pinNumber[32,3] = 563;
|
|
525
|
+
self.pinNumber[32,4] = 562;
|
|
526
|
+
self.pinNumber[32,5] = 561;
|
|
527
|
+
self.pinNumber[32,6] = 551;
|
|
528
|
+
self.pinNumber[32,7] = 550;
|
|
529
|
+
self.pinNumber[32,8] = 549;
|
|
530
|
+
self.pinNumber[32,9] = 539;
|
|
531
|
+
self.pinNumber[32,10] = 538;
|
|
532
|
+
self.pinNumber[32,11] = 537;
|
|
533
|
+
self.pinNumber[32,12] = 527;
|
|
534
|
+
self.pinNumber[32,13] = 526;
|
|
535
|
+
self.pinNumber[32,14] = 525;
|
|
536
|
+
self.pinNumber[32,15] = 515;
|
|
537
|
+
self.pinNumber[33,0] = 572;
|
|
538
|
+
self.pinNumber[33,1] = 571;
|
|
539
|
+
self.pinNumber[33,2] = 570;
|
|
540
|
+
self.pinNumber[33,3] = 560;
|
|
541
|
+
self.pinNumber[33,4] = 559;
|
|
542
|
+
self.pinNumber[33,5] = 558;
|
|
543
|
+
self.pinNumber[33,6] = 548;
|
|
544
|
+
self.pinNumber[33,7] = 547;
|
|
545
|
+
self.pinNumber[33,8] = 546;
|
|
546
|
+
self.pinNumber[33,9] = 536;
|
|
547
|
+
self.pinNumber[33,10] = 535;
|
|
548
|
+
self.pinNumber[33,11] = 534;
|
|
549
|
+
self.pinNumber[33,12] = 524;
|
|
550
|
+
self.pinNumber[33,13] = 523;
|
|
551
|
+
self.pinNumber[33,14] = 522;
|
|
552
|
+
self.pinNumber[33,15] = 514;
|
|
553
|
+
self.pinNumber[34,0] = 569;
|
|
554
|
+
self.pinNumber[34,1] = 568;
|
|
555
|
+
self.pinNumber[34,2] = 567;
|
|
556
|
+
self.pinNumber[34,3] = 557;
|
|
557
|
+
self.pinNumber[34,4] = 556;
|
|
558
|
+
self.pinNumber[34,5] = 555;
|
|
559
|
+
self.pinNumber[34,6] = 545;
|
|
560
|
+
self.pinNumber[34,7] = 544;
|
|
561
|
+
self.pinNumber[34,8] = 543;
|
|
562
|
+
self.pinNumber[34,9] = 533;
|
|
563
|
+
self.pinNumber[34,10] = 532;
|
|
564
|
+
self.pinNumber[34,11] = 531;
|
|
565
|
+
self.pinNumber[34,12] = 521;
|
|
566
|
+
self.pinNumber[34,13] = 520;
|
|
567
|
+
self.pinNumber[34,14] = 519;
|
|
568
|
+
self.pinNumber[34,15] = 513;
|
|
569
|
+
self.pinNumber[35,0] = 566;
|
|
570
|
+
self.pinNumber[35,1] = 565;
|
|
571
|
+
self.pinNumber[35,2] = 564;
|
|
572
|
+
self.pinNumber[35,3] = 554;
|
|
573
|
+
self.pinNumber[35,4] = 553;
|
|
574
|
+
self.pinNumber[35,5] = 552;
|
|
575
|
+
self.pinNumber[35,6] = 542;
|
|
576
|
+
self.pinNumber[35,7] = 541;
|
|
577
|
+
self.pinNumber[35,8] = 540;
|
|
578
|
+
self.pinNumber[35,9] = 530;
|
|
579
|
+
self.pinNumber[35,10] = 529;
|
|
580
|
+
self.pinNumber[35,11] = 528;
|
|
581
|
+
self.pinNumber[35,12] = 518;
|
|
582
|
+
self.pinNumber[35,13] = 517;
|
|
583
|
+
self.pinNumber[35,14] = 516;
|
|
584
|
+
self.pinNumber[35,15] = 512;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import numpy as np;
|
|
2
|
+
|
|
3
|
+
class BoardUnits:
|
|
4
|
+
def __init__(self, masterClock= 100.0e6, clockDivider = 713.0):
|
|
5
|
+
self.boardMasterClock = masterClock;
|
|
6
|
+
self.clockDivider = clockDivider;
|
|
7
|
+
self.sampleRate = self.boardMasterClock/self.clockDivider;
|
|
8
|
+
|
|
9
|
+
def convertFrequencyIntegerToHz(self, integerFrequency):
|
|
10
|
+
return integerFrequency*float(self.sampleRate)/float(2**32);
|
|
11
|
+
|
|
12
|
+
def convertFrequencyHzToInteger(self, hzFrequency):
|
|
13
|
+
return int(np.round(hzFrequency*float(2**32)/float(self.sampleRate)));
|
|
14
|
+
|
|
15
|
+
def convertTimeToSteps(self, time):
|
|
16
|
+
return int(np.round(time*float(self.sampleRate)));
|
|
17
|
+
|
|
18
|
+
def convertFrequencyRangeToSweepSpeed(self, frequencyStart, frequencyEnd, sweepDuration):
|
|
19
|
+
return int(np.round((frequencyEnd - frequencyStart)*float(2**32)/((float(self.sampleRate)**2)*sweepDuration)));
|
|
20
|
+
|
|
21
|
+
def convertDegreesPhaseToInteger(self, degreesPhase):
|
|
22
|
+
return int(np.round((2**32)*np.mod(degreesPhase/360.0,1.0)));
|
|
23
|
+
|
|
24
|
+
def convertNormalizedAmplitudeToInteger(self, amplitude):
|
|
25
|
+
if amplitude < 0:
|
|
26
|
+
return 1 + int(np.ceil(amplitude*(2**17-1)));
|
|
27
|
+
else:
|
|
28
|
+
return int(np.floor(amplitude*(2**17-1)));
|
|
29
|
+
|
|
30
|
+
def convertBraidingDurationToIntegerSpeed(self, braidDuration):
|
|
31
|
+
return int(np.round(float(2**28)/(self.sampleRate*braidDuration)));
|
|
32
|
+
|
|
33
|
+
def convertIntegerSpeedToBraidDuration(self, integerSpeed):
|
|
34
|
+
return float(2**28)/(self.sampleRate*float(integerSpeed));
|
|
35
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import numpy as np;
|
|
2
|
+
|
|
3
|
+
class FunctionInterpolator:
|
|
4
|
+
def __init__(self):
|
|
5
|
+
self.yScaling = (2**17-1);
|
|
6
|
+
self.fpgaDependentRange = np.arange(-(2**17),(2**17),64, dtype='float');
|
|
7
|
+
self.functionDependentRange = np.arange(0,0.25*0.25,64.0*0.25*0.25/(2**18));
|
|
8
|
+
self.divRatio = 2**18;
|
|
9
|
+
self.interpolationMatrix = ((np.array((np.transpose(np.array([
|
|
10
|
+
((self.fpgaDependentRange**0)),
|
|
11
|
+
((self.fpgaDependentRange**1)/(self.divRatio**1)),
|
|
12
|
+
((self.fpgaDependentRange**2)/(self.divRatio**2)),
|
|
13
|
+
((self.fpgaDependentRange**3)/(self.divRatio**3)),
|
|
14
|
+
((self.fpgaDependentRange**4)/(self.divRatio**4)),
|
|
15
|
+
((self.fpgaDependentRange**5)/(self.divRatio**5))]))), dtype='float')))/self.yScaling;
|
|
16
|
+
|
|
17
|
+
# Here we must add safety to check that there are no overflows:
|
|
18
|
+
# 1. In the parameters
|
|
19
|
+
# 2. In the final results
|
|
20
|
+
# 3. In the intermediate calculations
|
|
21
|
+
def performInterpolation(self, function):
|
|
22
|
+
result = np.zeros((6,16), dtype='float');
|
|
23
|
+
for ind in range(16):
|
|
24
|
+
result[:,ind] = np.round(np.linalg.lstsq(self.interpolationMatrix,
|
|
25
|
+
function(float(ind)*0.25*0.25+self.functionDependentRange), rcond=None)[0]);
|
|
26
|
+
return np.array(result,dtype='int');
|
|
27
|
+
|
|
28
|
+
# Here we check for overflows in intermediate and final results
|
|
29
|
+
def performPartialValidation(self, interpolationResults, part):
|
|
30
|
+
result = np.zeros(len(self.fpgaDependentRange));
|
|
31
|
+
coefficients = interpolationResults[:,part];
|
|
32
|
+
for i in range(6):
|
|
33
|
+
result = result*self.fpgaDependentRange;
|
|
34
|
+
result = np.array(result/self.divRatio, dtype = 'int');
|
|
35
|
+
result = result + coefficients[len(coefficients)-i-1];
|
|
36
|
+
return result;
|
|
37
|
+
|
|
38
|
+
def performValidation(self, interpolationResults):
|
|
39
|
+
for i in range(16):
|
|
40
|
+
if i == 0:
|
|
41
|
+
p1 = self.performPartialValidation(interpolationResults,i);
|
|
42
|
+
else:
|
|
43
|
+
p1 = np.append(p1, self.performPartialValidation(interpolationResults,i));
|
|
44
|
+
return p1;
|
|
45
|
+
|
|
46
|
+
def getXRange(self):
|
|
47
|
+
return np.arange(0,1.0,64*0.25*0.25/(2**18));
|
|
48
|
+
|
|
49
|
+
def getConstantFunction(self, offsetValue):
|
|
50
|
+
func = lambda x: (offsetValue+np.zeros(np.shape(x),dtype='float'));
|
|
51
|
+
return self.performInterpolation(func);
|
|
52
|
+
|
|
File without changes
|
RBComb/LaserInterface.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import numpy as np;
|
|
2
|
+
class LaserInterface:
|
|
3
|
+
def __init__(self, bridgeLink):
|
|
4
|
+
self.bridgeLink = bridgeLink;
|
|
5
|
+
self.multvec = np.array([1, 2**8, 2**16, 2**24, 2*32, 2**40]);
|
|
6
|
+
|
|
7
|
+
def _internal_vectToScalar(self, data):
|
|
8
|
+
cumsum = 0;
|
|
9
|
+
for i in range(6):
|
|
10
|
+
cumsum = cumsum*256 + data[5-i];
|
|
11
|
+
return cumsum;
|
|
12
|
+
|
|
13
|
+
def _internal_numericalResponseCommand(self, command):
|
|
14
|
+
self.bridgeLink._internal_sendCommand(command);
|
|
15
|
+
data = self.bridgeLink.getData(6);
|
|
16
|
+
if len(data) < 6:
|
|
17
|
+
print('Insufficient data received. Check that the laser is selected.');
|
|
18
|
+
return 0;
|
|
19
|
+
return self._internal_vectToScalar(data);
|
|
20
|
+
|
|
21
|
+
def requestDisplacement(self, axis):
|
|
22
|
+
if axis < 0 or axis > 3:
|
|
23
|
+
print('Axis must be 1, 2 or 3');
|
|
24
|
+
return 0;
|
|
25
|
+
return self._internal_numericalResponseCommand(53 + axis);
|
|
26
|
+
|
|
27
|
+
#DEPRECATED
|
|
28
|
+
def scheduleAcquisition(self, axis, delay):
|
|
29
|
+
if axis < 0 or axis > 3:
|
|
30
|
+
print('Axis must be 1, 2 or 3');
|
|
31
|
+
return 0;
|
|
32
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(delay+((2**30)*(axis-1)));
|
|
33
|
+
self.bridgeLink._internal_sendCommand(57);
|
|
34
|
+
|
|
35
|
+
#DEPRECATED
|
|
36
|
+
def requestTimeTrace(self):
|
|
37
|
+
result = np.zeros((2**15,2), dtype='float');
|
|
38
|
+
self.bridgeLink.flushInput()
|
|
39
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(2**15+2**31);
|
|
40
|
+
self.bridgeLink._internal_sendCommand(61)
|
|
41
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(0);
|
|
42
|
+
self.bridgeLink._internal_sendCommand(58);
|
|
43
|
+
buff = self.bridgeLink.getData((2**15)*6);
|
|
44
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(2**16);
|
|
45
|
+
self.bridgeLink._internal_sendCommand(61)
|
|
46
|
+
buff += self.bridgeLink.getData((2**15)*6);
|
|
47
|
+
currentTime = 0;
|
|
48
|
+
for i in range(2**15):
|
|
49
|
+
currentIndex = i*12;
|
|
50
|
+
disp = self._internal_vectToScalar(buff[currentIndex:(currentIndex+6)]);
|
|
51
|
+
deltaT = self._internal_vectToScalar(buff[(currentIndex+6):(currentIndex+12)]);
|
|
52
|
+
currentTime += deltaT;
|
|
53
|
+
result[i,0] = currentTime;
|
|
54
|
+
result[i,1] = disp;
|
|
55
|
+
return result;
|
|
56
|
+
|
|
57
|
+
#Carli time trace request
|
|
58
|
+
def requestTimeTraceCarli(self):
|
|
59
|
+
result = np.zeros((self.length,2), dtype='float')
|
|
60
|
+
#request data
|
|
61
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(0)
|
|
62
|
+
self.bridgeLink._internal_sendCommand(58)
|
|
63
|
+
#get data
|
|
64
|
+
buff = self.bridgeLink.getData((self.length)*12)
|
|
65
|
+
print(f'requested: {self.length}, gotten: {int(len(buff)/12)}')
|
|
66
|
+
print(len(buff))
|
|
67
|
+
if self.length != int(len(buff)/12):
|
|
68
|
+
print("Communication failure")
|
|
69
|
+
return None
|
|
70
|
+
#process data
|
|
71
|
+
currentTime = 0
|
|
72
|
+
for i in range(int(self.length)):
|
|
73
|
+
if i % 100000 == 0:
|
|
74
|
+
print(i)
|
|
75
|
+
currentIndex = i*12
|
|
76
|
+
disp = self._internal_vectToScalar(buff[currentIndex:(currentIndex+6)])
|
|
77
|
+
deltaT = self._internal_vectToScalar(buff[(currentIndex+6):(currentIndex+12)])
|
|
78
|
+
currentTime += deltaT
|
|
79
|
+
result[i,0] = currentTime
|
|
80
|
+
result[i,1] = disp
|
|
81
|
+
return result
|
|
82
|
+
|
|
83
|
+
#Carli acquisition schedule
|
|
84
|
+
def scheduleAcquisitionCarli(self, axis, delay, length=2**16):
|
|
85
|
+
#set length of acquisition
|
|
86
|
+
self.length = length
|
|
87
|
+
self.bridgeLink.flushInput()
|
|
88
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(length+2**31)
|
|
89
|
+
self.bridgeLink._internal_sendCommand(61)
|
|
90
|
+
#schedule acquisition
|
|
91
|
+
if axis < 0 or axis > 3:
|
|
92
|
+
print("Axis must be 1, 2 or 3")
|
|
93
|
+
return 0;
|
|
94
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(delay+((2**30)*(axis-1)))
|
|
95
|
+
self.bridgeLink._internal_sendCommand(57)
|
|
96
|
+
|
|
97
|
+
#OUT OF ORDER
|
|
98
|
+
def isAcquisitionFinished(self):
|
|
99
|
+
return self._internal_numericalResponseCommand(60) == 32768;
|
|
100
|
+
|
|
101
|
+
def requestTimeSinceMeasurementEnded(self):
|
|
102
|
+
return self._internal_numericalResponseCommand(59);
|
|
103
|
+
|
RBComb/RBComb576.py
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import numpy as np;
|
|
2
|
+
|
|
3
|
+
class RBComb576:
|
|
4
|
+
def __init__(self, bridgeLink):
|
|
5
|
+
self.bridgeLink = bridgeLink;
|
|
6
|
+
self.bridge2Comps = np.zeros([6,16], dtype='int');
|
|
7
|
+
self.bridge2Comps[:] = 2**18;
|
|
8
|
+
self.bridge2Comps[4,:] = 2**8;
|
|
9
|
+
self.bridge2Comps[5,:] = 2**6;
|
|
10
|
+
self.braidingOrder = np.array([1]*16,dtype='int');
|
|
11
|
+
for i in range(15):
|
|
12
|
+
self.braidingOrder[i+1] = 2*self.braidingOrder[i];
|
|
13
|
+
|
|
14
|
+
def sendDataToAllDACs(self, dataToSend, ldacBubble=False):
|
|
15
|
+
if ldacBubble:
|
|
16
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(dataToSend + 2**24);
|
|
17
|
+
else:
|
|
18
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(dataToSend);
|
|
19
|
+
self.bridgeLink._internal_sendCommand(25);
|
|
20
|
+
|
|
21
|
+
def setGain(self, highGain):
|
|
22
|
+
# True means gain of 2, false means gain of 1
|
|
23
|
+
if highGain:
|
|
24
|
+
self.sendDataToAllDACs(2**22 + 2**21 + 2**20 + 2**2);
|
|
25
|
+
else:
|
|
26
|
+
self.sendDataToAllDACs(2**22 + 2**21 + 2**20);
|
|
27
|
+
|
|
28
|
+
def outputRampUp(self):
|
|
29
|
+
self.bridgeLink._internal_sendCommand(28);
|
|
30
|
+
|
|
31
|
+
def outputRampDown(self):
|
|
32
|
+
self.bridgeLink._internal_sendCommand(29);
|
|
33
|
+
|
|
34
|
+
def setPhase(self, sineGenerator, newPhase):
|
|
35
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(newPhase);
|
|
36
|
+
self.bridgeLink._internal_sendCommand(0+sineGenerator);
|
|
37
|
+
|
|
38
|
+
def setFrequency(self, sineGenerator, newFrequency):
|
|
39
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(newFrequency);
|
|
40
|
+
self.bridgeLink._internal_sendCommand(4+sineGenerator);
|
|
41
|
+
|
|
42
|
+
def setSweepFrequencyStep(self, sineGenerator, newFrequencyStep):
|
|
43
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(newFrequencyStep);
|
|
44
|
+
self.bridgeLink._internal_sendCommand(8+sineGenerator);
|
|
45
|
+
|
|
46
|
+
def setSweepFrequencyMax(self, sineGenerator, newFrequencyMax):
|
|
47
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(newFrequencyMax);
|
|
48
|
+
self.bridgeLink._internal_sendCommand(16+sineGenerator);
|
|
49
|
+
|
|
50
|
+
def setBraidingLength(self, newBraidingLength):
|
|
51
|
+
self.bridgeLink._internal_setDataBuff(newBraidingLength);
|
|
52
|
+
self.bridgeLink._internal_sendCommand(52);
|
|
53
|
+
|
|
54
|
+
def setBraidingFrame(self, newBraidingFrame):
|
|
55
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(newBraidingFrame);
|
|
56
|
+
self.bridgeLink._internal_sendCommand(59);
|
|
57
|
+
|
|
58
|
+
def setBraidingSpeed(self, newBraidingSpeed):
|
|
59
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(newBraidingSpeed);
|
|
60
|
+
self.bridgeLink._internal_sendCommand(60);
|
|
61
|
+
|
|
62
|
+
def setBraidingOrder(self, braidingOrder):
|
|
63
|
+
self.bridgeLink._internal_setDataBuff(int(np.sum(braidingOrder*self.braidingOrder[0:len(braidingOrder)])));
|
|
64
|
+
self.bridgeLink._internal_sendCommand(51);
|
|
65
|
+
|
|
66
|
+
def setBraidingAB(self, braidingAB):
|
|
67
|
+
self.bridgeLink._internal_setDataBuff(int(np.sum(braidingAB*self.braidingOrder[0:len(braidingAB)])));
|
|
68
|
+
self.bridgeLink._internal_sendCommand(50);
|
|
69
|
+
|
|
70
|
+
def setBraidingHold(self, braidingHold):
|
|
71
|
+
self.bridgeLink._internal_setDataBuff(int(np.sum(braidingHold*self.braidingOrder[0:len(braidingHold)])));
|
|
72
|
+
self.bridgeLink._internal_sendCommand(53);
|
|
73
|
+
|
|
74
|
+
def setCurrentState(self, newState):
|
|
75
|
+
self.bridgeLink._internal_setDataBuff(int(np.sum(newState*self.braidingOrder[0:5])));
|
|
76
|
+
self.bridgeLink._internal_sendCommand(61);
|
|
77
|
+
|
|
78
|
+
def setNextState(self, newState, delay):
|
|
79
|
+
self.bridgeLink._internal_setNX_SINGEN_REG(delay);
|
|
80
|
+
self.bridgeLink._internal_setDataBuff(int(np.sum(newState*self.braidingOrder[0:5])));
|
|
81
|
+
self.bridgeLink._internal_sendCommand(62);
|
|
82
|
+
|
|
83
|
+
def setTaylorCoefficients(self, output, BSequence, coeffs):
|
|
84
|
+
# Convert coefficients to two's complement
|
|
85
|
+
coeffs2Comp = np.array(coeffs, dtype = 'int');
|
|
86
|
+
coeffs2Comp[coeffs < 0] += self.bridge2Comps[coeffs < 0];
|
|
87
|
+
coeffs2Comp[4,:] = (2**8)*coeffs2Comp[4,:] + coeffs2Comp[5,:];
|
|
88
|
+
for j in range(16):
|
|
89
|
+
braidingAddress = output*32+j;
|
|
90
|
+
if BSequence:
|
|
91
|
+
braidingAddress += 16;
|
|
92
|
+
self.bridgeLink._internal_setBraidingMemoryAddress(braidingAddress)
|
|
93
|
+
# Here we will add the two's complement and coefficient merging functions
|
|
94
|
+
for i in range(5):
|
|
95
|
+
currentCoeff = coeffs2Comp[i,j];
|
|
96
|
+
self.bridgeLink._internal_setDataBuff(currentCoeff);
|
|
97
|
+
self.bridgeLink._internal_sendCommand(58-i);
|
|
98
|
+
|
|
99
|
+
def setAmplitude(self, sineGenerator, channelNum, targetAmplitude):
|
|
100
|
+
# Conversion to two's complement
|
|
101
|
+
if targetAmplitude < 0:
|
|
102
|
+
targetAmplitude = 262144 + targetAmplitude;
|
|
103
|
+
|
|
104
|
+
transferBuffer = np.arange(0,7, dtype='uint8')
|
|
105
|
+
|
|
106
|
+
# Set the 6 lsb's of the "Data" register to the 5 lsbs of the channel num
|
|
107
|
+
transferBuffer[0] = (channelNum % 64);
|
|
108
|
+
|
|
109
|
+
# Set the bits 11 to 6 of the "Data" register to the bits 11-6 of the channel num
|
|
110
|
+
channelNum = int(channelNum / 64);
|
|
111
|
+
transferBuffer[1] = 64 + (channelNum % 64);
|
|
112
|
+
|
|
113
|
+
# Transfer the 9 lsb's of the data register into the address register
|
|
114
|
+
transferBuffer[2] = 192 + 20;
|
|
115
|
+
|
|
116
|
+
# Set the 6 lsb's of the "Data" register to the 5 lsbs of the amplitude num
|
|
117
|
+
transferBuffer[3] = (targetAmplitude % 64);
|
|
118
|
+
|
|
119
|
+
# Set the bits 11 to 6 of the "Data" register to the bits 11-6 of the amplitude
|
|
120
|
+
targetAmplitude = int(targetAmplitude / 64);
|
|
121
|
+
transferBuffer[4] = 64 + (targetAmplitude % 64);
|
|
122
|
+
|
|
123
|
+
# Set the bits 17 to 12 of the "Data" register to the bits 17-12 of the amplitude
|
|
124
|
+
targetAmplitude = int(targetAmplitude / 64);
|
|
125
|
+
transferBuffer[5] = 128 + (targetAmplitude % 64);
|
|
126
|
+
|
|
127
|
+
# Perform memory write-up
|
|
128
|
+
transferBuffer[6] = 192 + 12 + sineGenerator;
|
|
129
|
+
|
|
130
|
+
# Send it to the board
|
|
131
|
+
self.bridgeLink.sendArray(transferBuffer);
|
RBComb/SerialBridge.py
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import serial as serial;
|
|
2
|
+
import numpy as np;
|
|
3
|
+
|
|
4
|
+
class SerialBridge:
|
|
5
|
+
def __init__(self, serialPort, alwaysOpen=False, baudRate=5000000):
|
|
6
|
+
self.serialPort = serialPort;
|
|
7
|
+
self.alwaysOpen = alwaysOpen;
|
|
8
|
+
self.baudRate = baudRate
|
|
9
|
+
if self.alwaysOpen:
|
|
10
|
+
self.serialHandle = serial.Serial(self.serialPort, self.baudRate, bytesize=8, stopbits=2, timeout=500);
|
|
11
|
+
|
|
12
|
+
def sendArray(self, transferBuffer):
|
|
13
|
+
if not self.alwaysOpen:
|
|
14
|
+
self.serialHandle = serial.Serial(self.serialPort, self.baudRate, bytesize=8, stopbits=2, timeout=1);
|
|
15
|
+
self.serialHandle.reset_input_buffer();
|
|
16
|
+
self.serialHandle.write(transferBuffer.astype('ubyte'));
|
|
17
|
+
if not self.alwaysOpen:
|
|
18
|
+
self.closeConnection();
|
|
19
|
+
|
|
20
|
+
def getData(self, length):
|
|
21
|
+
return self.serialHandle.read(length);
|
|
22
|
+
|
|
23
|
+
def flushInput(self):
|
|
24
|
+
self.serialHandle.reset_input_buffer();
|
|
25
|
+
|
|
26
|
+
def _internal_sendCommand(self, command):
|
|
27
|
+
transferBuffer = np.arange(0,1, dtype='uint8')
|
|
28
|
+
transferBuffer[0] = 192 + command;
|
|
29
|
+
self.sendArray(transferBuffer);
|
|
30
|
+
|
|
31
|
+
def _internal_setDataBuff(self, dataToFill):
|
|
32
|
+
transferBuffer = np.arange(0,3, dtype='uint8')
|
|
33
|
+
# Set the 6 lsb's of the "Data" register
|
|
34
|
+
transferBuffer[0] = (dataToFill % 64);
|
|
35
|
+
|
|
36
|
+
# Set the bits 11 to 6 of the "Data" register
|
|
37
|
+
dataToFill = int(dataToFill / 64);
|
|
38
|
+
transferBuffer[1] = 64 + (dataToFill % 64);
|
|
39
|
+
|
|
40
|
+
# Set the bits 17 to 12 of the "Data" register
|
|
41
|
+
dataToFill = int(dataToFill / 64);
|
|
42
|
+
transferBuffer[2] = 128 + (dataToFill % 64);
|
|
43
|
+
self.sendArray(transferBuffer);
|
|
44
|
+
|
|
45
|
+
def _internal_setNX_SINGEN_REG(self, dataToFill):
|
|
46
|
+
# Set lower 12 bits
|
|
47
|
+
self._internal_setDataBuff(dataToFill % (2**18))
|
|
48
|
+
self._internal_sendCommand(22);
|
|
49
|
+
# Set upper 12 bits
|
|
50
|
+
self._internal_setDataBuff(int(dataToFill/(2**18)) % (2**18))
|
|
51
|
+
self._internal_sendCommand(23);
|
|
52
|
+
|
|
53
|
+
def _internal_setBraidingMemoryAddress(self, braidingAddress):
|
|
54
|
+
self._internal_setDataBuff(braidingAddress);
|
|
55
|
+
self._internal_sendCommand(20);
|
|
56
|
+
|
|
57
|
+
def selectBoard(self, boardID):
|
|
58
|
+
data = np.arange(0,1, dtype='uint8')
|
|
59
|
+
data[0] = boardID + 224;
|
|
60
|
+
self.sendArray(data);
|
|
61
|
+
|
|
62
|
+
def selectAllBoards(self):
|
|
63
|
+
self.selectBoard(15);
|
|
64
|
+
|
|
65
|
+
def selectLaser(self):
|
|
66
|
+
self.selectBoard(14);
|
|
67
|
+
|
|
68
|
+
def closeConnection(self):
|
|
69
|
+
self.serialHandle.close();
|
|
70
|
+
|
|
71
|
+
def enableClock(self):
|
|
72
|
+
self._internal_sendCommand(26);
|
|
73
|
+
|
|
74
|
+
def disableClock(self):
|
|
75
|
+
self._internal_sendCommand(27);
|
RBComb/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: RBComb
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: API to talk to the RBComb bridge
|
|
5
|
+
Home-page: https://gitlab.phys.ethz.ch/code/experiment/rbcomb-fpgaCode/
|
|
6
|
+
Author: Pascal Engeler
|
|
7
|
+
Author-email: huberse@phys.ethz.ch
|
|
8
|
+
Requires-Python: >=3.8
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
Requires-Dist: numpy>=1.18.0
|
|
11
|
+
Requires-Dist: pyserial>=3.5
|
|
12
|
+
Dynamic: author
|
|
13
|
+
Dynamic: author-email
|
|
14
|
+
Dynamic: description-content-type
|
|
15
|
+
Dynamic: home-page
|
|
16
|
+
Dynamic: requires-dist
|
|
17
|
+
Dynamic: requires-python
|
|
18
|
+
Dynamic: summary
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
RBComb/LaserInterface.py,sha256=4IxZurrfZCtF2Pv6HhGZLrkJAGCpNWMp0Go1_2lta6g,4016
|
|
2
|
+
RBComb/RBComb576.py,sha256=JFwbSe4MLAdRr_FdrTR1j9wcpucBZCH6x_uxw-T3ugo,5884
|
|
3
|
+
RBComb/SerialBridge.py,sha256=feIpNgm-d-HGzGE4V6qtjBaIHE-kvdUu25YUafQCpq4,2687
|
|
4
|
+
RBComb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
RBComb/Helper/BoardPinout.py,sha256=rEmPyseujZPDVvCBSM8ZxDEEQ7k3aSytQPZuunN6liY,20885
|
|
6
|
+
RBComb/Helper/BoardUnits.py,sha256=8v_Kgh8wBNECLGn0Adiq8I2yxn_lDDVB8SatCQTqlCA,1486
|
|
7
|
+
RBComb/Helper/FunctionInterpolator.py,sha256=TA1MdWKJUgjhyFDQHnHVLaJngY51pj346cN7fHPAGbA,2423
|
|
8
|
+
RBComb/Helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
rbcomb-0.2.0.dist-info/METADATA,sha256=Y6cIjvE4J818CENsfDLFRsNYCUva1_e0CMNhWiOVSyc,499
|
|
10
|
+
rbcomb-0.2.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
11
|
+
rbcomb-0.2.0.dist-info/top_level.txt,sha256=r-FUOFpE0giise9-SRQl0-70z8gtAl1gROIXgtD0RmQ,7
|
|
12
|
+
rbcomb-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
RBComb
|