Subversion Repositories f9daq

Rev

Rev 212 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
212 f9daq 1
#include <formatio.h>
2
#include <cvirte.h>
3
#include <userint.h>
4
#include "AitGui.h"
5
#include "XYSCAN.h"
6
 
7
#include <stdbool.h>
8
#include "AitInterface.h"
9
#include "AitMduManager_DEF.h"
10
 
11
#include "H1D.h"
12
#include "H2D.h"
13
#include "H3D.h"
14
 
292 f9daq 15
static int node[3];
212 f9daq 16
typedef unsigned short ushort;
17
typedef unsigned int uint;
18
 
19
static int ait;
20
static int xyscan;
21
//#define MIKRO
22
 
23
#ifdef MIKRO
24
#include "MIKRO.h"
25
#endif
26
 
292 f9daq 27
#define uSMC_USB
28
#ifdef uSMC_USB
29
#  include "uSMC.h"
30
#  define uSMC_SERIAL_X "0000000000004925"
31
#  define uSMC_SERIAL_Y "0000000000006030"
32
#  define uSMC_SERIAL_Z "0000000000002894"
33
const char serials[3][16]= {uSMC_SERIAL_X,uSMC_SERIAL_Y,uSMC_SERIAL_Z};
34
#endif /* uSMC_USB */
35
 
212 f9daq 36
static int daq_on;
37
static int plothandle[4]= {0,0,0, 0};
38
static int tfID;
39
static int controlID;
40
static int verbose;
41
 
42
#define MAX_THREADS 10
43
 
44
static CmtThreadPoolHandle poolHandle = 0;
45
 
46
 
47
/*
48
 
49
x: 140000 280000
50
 
51
*/
52
 
53
//**************************** missing declarations in the library
54
char strbuf[0xFF];
55
 
56
int gLog=0;
57
 
58
int printf(const char *format, ...) {
59
  va_list aptr;
60
  int ret;
61
  FILE *flog;
62
 
63
  va_start(aptr, format);
64
  ret = vsprintf(strbuf, format, aptr);
65
  va_end(aptr);
66
  SetCtrlVal(ait,AIT_STDIO,strbuf);
67
 
68
  if (gLog) {
69
    flog = fopen ("stdio.log", "a");
70
    fprintf (flog, "%s", strbuf);
71
    fclose (flog);
72
  }
73
  return(ret);
74
}
75
 
76
 
77
 
78
static int timeout=0;    
79
int CVICALLBACK SetTimeoutCB (int panel, int control, int event,
80
                                                                                                                        void *callbackData, int eventData1, int eventData2) {
81
        switch (event) {
82
                case EVENT_TIMER_TICK:
83
                        timeout=1;
84
                        printf("#### Timeout\n");
85
                        break;
86
        }
87
        return 0;
88
}
89
 
90
 
91
 
92
static void start_timer (double tout) {
93
        timeout = 0;
94
  SetCtrlAttribute (ait, AIT_TIMER, ATTR_INTERVAL, tout);
95
  SetCtrlAttribute (ait, AIT_TIMER, ATTR_ENABLED, 1);
96
}
97
 
98
static void stop_timer ( void ) {
99
  SetCtrlAttribute (ait, AIT_TIMER, ATTR_ENABLED, 0);
100
  //DRSSetTimeout();
101
}
102
 
103
 
104
 
105
void CVICALLBACK EndOfThread ( CmtThreadPoolHandle poolhandle,
106
                               CmtThreadFunctionID functionID, unsigned int event,
107
                               int value, void *callbackData  ) {
108
 
109
  daq_on=0;
110
  //SetDimming(0);
111
  printf("End of Thread \n");
112
  return ;
113
 
114
}
115
 
116
int AitInit() {
117
  InitializeConnection();
118
  return 0;
119
}
120
 
121
 
122
int AitValidEvent() {
123
 
124
  return 1;
125
};
126
 
127
int AitToFile(FILE *fp, int n) {
128
        const int bsize=10000 ;
129
        unsigned short a[bsize] ;
130
        unsigned short buffer[2]={0x1};
131
        buffer[1] = (unsigned short)(n*CHANNELS*2);  
132
        for (int eventNum = 0; eventNum < n; eventNum++) {
133
 
134
    for (int channel = 0; channel < CHANNELS; channel++) {
135
                        int index = channel+ CHANNELS * eventNum;
136
                        if (index<bsize)
137
        a[index] = ExtractAdcData(eventNum, channel);
138
                }
139
        }
140
        fwrite(buffer, 2*sizeof(short),1,fp);
141
        return fwrite(a, 1,buffer[1],fp);
142
};
143
 
144
int AitFillHistograms(int events) {
145
  ushort rawAdcData = 0;
146
  ushort adcData = 0;
147
  int channelReceived = 0;
148
  int channelExpected = 0;
149
  bool includeSaturated = 0; // cbIncludeSaturated.Checked;
150
  ushort max[CHANNELS];
151
  ushort min[CHANNELS];
152
  ushort average[CHANNELS];
153
  int  total[CHANNELS];
154
  for (int i = 0; i < CHANNELS; i++) {
155
    min[i] = 0xFFFF;
156
    max[i] = 0;
157
    total[i] = 0;
158
  }
159
 
160
  double threshold, xysumcut;
161
  GetCtrlVal (ait, AIT_ADCTHRESHOLD, &threshold);
162
  GetCtrlVal (ait, AIT_XYCUT, &xysumcut);
163
 
164
  for (int eventNum = 0; eventNum < events; eventNum++) {
165
 
166
    int sum = 0;
167
    double a[4]= {0,0,0,0} ;
168
    for (int channel = 0; channel < CHANNELS; channel++) {
169
 
170
      rawAdcData = ExtractAdcData(eventNum, channel);
171
      if (addChannelNum == true) {
172
        channelReceived = (rawAdcData >> 12) & 0xF;
173
        channelExpected = (channel & 0xF);
174
        if (channelReceived != channelExpected) {
175
 
176
          AddMessage("ERROR in Event %d : Expected channel %d, received %d -ANALYSIS STOPPED", eventNum, channelExpected, channelReceived);
177
 
178
          //EnableRegisterScanTimer(true);
179
          return eventNum;
180
        }
181
      }
182
      adcData = (ushort)(rawAdcData & 0x0FFF);    // remove channel number
183
      //if ((includeSaturated == true) || ((includeSaturated == false) && (adcData < (ADCMAX - 2))))
184
 
185
      if (adcData>threshold) H1D_Fill(channel, adcData,1);
186
      a[channel]=adcData;
187
      total[channel] = total[channel] + adcData;
188
      if (adcData > max[channel])
189
        max[channel] = adcData;
190
      else if (adcData < min[channel])
191
        min[channel] = adcData;
192
 
193
      sum += adcData;
194
    }
195
    if (sum>threshold) {
196
      H1D_Fill(10, sum, 1 );
197
      double x = a[0]/(a[0]+a[1]);
198
      double y = a[2]/(a[2]+a[3]);
199
      if (sum>xysumcut) H2D_Fill(0, x, y , 1 );
200
    }
201
    histogramTotalEvents++;
202
  }
203
  //tbAdcStatistics.Clear();
204
  for (int channel = 0; channel < CHANNELS; channel++) {
205
    average[channel] = (ushort)(total[channel] / events);
206
 
207
    if (verbose) AddMessage(" {channel:%d}  : {min:0x%d}  {max:0x%d}  {max-min:%d}  {average:%d}\n", channel + 1, min[channel], max[channel], max[channel] - min[channel], average[channel]);
208
    //if (channel < (CHANNELS - 1))
209
    //    tbAdcStatistics.AppendText(Environment.NewLine);
210
 
211
  }
212
  //SetTextboxToTop(tbAdcStatistics);
213
  return 1;
214
};
215
 
216
 
217
int CVICALLBACK RefreshGraphs (int panel, int control, int event,
218
                               void *callbackData, int eventData1, int eventData2) {
219
  switch (event) {
220
    case EVENT_TIMER_TICK:
221
//      if (!daq_on ) return 0;
222
    case EVENT_COMMIT: {
223
 
224
      int ch=0;
225
                        int logy=0;
226
                        int updateplots=0;
227
      GetCtrlVal(ait,AIT_CH, &ch);
228
                        GetCtrlVal(ait,AIT_LOGY, &logy);
229
                  GetCtrlVal(ait,AIT_UPDATEPLOTS, &updateplots);
230
                        if (!updateplots) return 0;
231
                        if (logy){
232
                                SetCtrlAttribute (ait, AIT_GRAPH, ATTR_YMAP_MODE, VAL_LOG);
233
                          SetCtrlAttribute (ait, AIT_GRAPHSUM, ATTR_YMAP_MODE, VAL_LOG);
234
 
235
                        } else {
236
                                SetCtrlAttribute (ait, AIT_GRAPH, ATTR_YMAP_MODE, VAL_LINEAR);
237
                          SetCtrlAttribute (ait, AIT_GRAPHSUM, ATTR_YMAP_MODE, VAL_LINEAR);
238
 
239
                        }
240
      H1D_Draw(ch,ait,AIT_GRAPH,&plothandle[0]);
241
      H1D_Draw(10,ait,AIT_GRAPHSUM,&plothandle[1]);
242
      H2D_Draw(0,ait,AIT_GRAPHXY,&plothandle[2]);
243
 
244
 
245
    }
246
 
247
 
248
    break;
249
 
250
  }
251
  return 0;
252
}
253
 
254
 
255
 
256
int CVICALLBACK daq(void *functionData) {
257
 
258
 
259
  int neve;
260
  char filename[0xff];
261
        char fname[0xff];  
262
        char pname[0xff];
263
 
264
 
265
 
266
  int pfreq;
267
  int enabledoutput;
268
  int neveold = 0;
269
  double rate;
270
  int *args =  (int *) functionData;
271
 
272
  GetCtrlVal(ait, AIT_FILENAME, fname );
273
        GetCtrlVal(ait, AIT_PATHNAME, pname );
274
        sprintf(filename,"%s/%s", pname, fname);
275
 
276
  GetCtrlVal(ait,AIT_NEVE, &neve);
277
  GetCtrlVal(ait,AIT_DEBUG, &verbose);
278
  GetCtrlVal(ait,AIT_PFREQ, &pfreq);
279
  GetCtrlVal(ait,AIT_ENABLEDOUTPUT, &enabledoutput);
280
 
281
 
282
        int range=0;
283
        int nch = range;
284
        GetCtrlVal(ait,AIT_MAX, &range);  
285
        if (range>512) nch = 512;
286
 
287
 
288
  for (int i=0; i<4; i++) {
289
    char name[0xFF];
290
    sprintf(name,"adc%d", i);
291
 
292
    H1D_Init(i, name,name, range, 0 , range);
293
    H1D_SetTitleX(0,"ADC");
294
    H1D_SetTitleY(0,"N");
295
  }
296
  H1D_Init(10, "adcsum","adcsum", range, 0 , 4*range);
297
  H1D_SetTitleX(0,"ADC");
298
  H1D_SetTitleY(0,"N");
299
 
300
  H2D_Init(0, "cog","Center of gravity", 256, 0 ,1, 256, 0 ,1);
301
  H2D_SetTitleX(0,"x");
302
  H2D_SetTitleY(0,"y");
303
 
304
 
305
 
306
  FILE *fp= NULL;
307
 
308
  if (enabledoutput) {
309
    if (args[0]) fp =  fopen(filename,"wb");
310
    else         fp =  fopen(filename,"ab");
311
  }
312
 
313
 
314
 
315
 
316
 
317
  time_t t=0,told=0, tstart=0;
318
 
319
  if (!AitInit()) {
320
 
321
 
322
                ReadRegisters();
323
 
324
 
325
      // Update UI
326
      int csrDetector = ReadSD4Register(ADDR_CSR_DETECTOR);
327
 
328
      int  value = ((GetBit(csrDetector, BIT_CSR_DET_ADCGAIN2) ? 1 : 0) << 1) |
329
                   ((GetBit(csrDetector, BIT_CSR_DET_ADCGAIN1) ? 1 : 0) << 0);
330
      SetCtrlVal (ait, AIT_GETADCGAIN, value);
331
      double valued = GetThreshold();
332
      SetCtrlVal (ait, AIT_GETADCTHRESHOLD, valued);
333
      valued = GetIntegrationTime();
334
      SetCtrlVal (ait, AIT_GETADCINTEGRATIONTIME, valued);
335
      valued = GetHvVoltage(ADDR_HV_VMON);
336
      SetCtrlVal (ait, AIT_BIASMON, valued);
337
 
338
                        value =
339
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN4) ? 1 : 0) << 3) |
340
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN3) ? 1 : 0) << 2) |
341
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN2) ? 1 : 0) << 1) |
342
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN1) ? 1 : 0) << 0);
343
      SetCtrlVal (ait, AIT_GETADCSUMGAIN, value);
344
 
345
 
346
 
347
    RefreshGraphs (ait, 0 , EVENT_COMMIT ,NULL, 0, 0 );
348
 
349
    daq_on=1;
350
                //RefreshGraphs (ait, 0 , EVENT_TIMER_TICK ,NULL, 0, 0 );    
351
    time(&tstart);
352
    told=tstart;
353
    int i=0;
354
    for (i=0; i<neve; i++) {
355
      start_timer(1);// 1 s timeout
356
      // Set ADC reset
357
      ResetAdc(true);
358
      // Clear ADC reset
359
      ResetAdc(false);
360
      int eventsAcquired = Acquire(pfreq);
361
                        stop_timer();
362
                        if (!daq_on) break;
363
                        if (timeout) {
364
                           i--;
365
                                 printf("INFO Timeout\n");
366
                                 continue;
367
                        }
368
      int isvalid =1;
369
      if (eventsAcquired < 1) {
370
        printf("Acquired events %d\n", eventsAcquired);
371
        isvalid = 0;
372
      } else {
373
        AitFillHistograms(eventsAcquired);
374
        if (verbose) ShowEvent(1);
375
      }
376
 
377
      int nb =  ( isvalid && fp ) ? AitToFile( fp , pfreq ) : 0;
378
      SetCtrlVal(ait,AIT_CEVE,i);
379
      if (!isvalid) i--;
380
 
381
      time(&t);
382
      if (t!=told ) {
383
        rate =  (i-neveold);
384
        printf("%d events in %2.2f min (%d s) Rate %f Hz %s   ",i+1, (double)(t-tstart)/60.,(t-tstart), rate , ctime(&t));
385
        neveold = i;
386
                                RefreshGraphs (ait, 0 , EVENT_COMMIT ,NULL, 0, 0 );  
387
        double daqBlocksize = GetAdcEventSize() * pfreq * 2.0;
388
        double daqTimeMs = BlockTransferTime();
389
        double daqTransferRate = daqBlocksize / daqTimeMs;
390
        SetCtrlVal(ait,AIT_DAQBLOCKSIZE, daqBlocksize);
391
        SetCtrlVal(ait,AIT_DAQTIMEMS,daqTimeMs);
392
        SetCtrlVal(ait,AIT_DAQTRANSFERRATE,daqTransferRate);
393
      }
394
      told=t;
395
 
396
 
397
 
398
    }
399
    time(&t);
400
    printf("%d events in %2.2f min (%d s) %s",i+1, (double)(t-tstart)/60.,t-tstart, ctime(&t));
401
 
402
  }
403
 
404
  if (fp) fclose(fp);
405
 
406
 
407
        RefreshGraphs (ait, 0 , EVENT_TIMER_TICK ,NULL, 0, 0 );
408
  return 0;
409
 
410
}
411
 
412
 
413
int CVICALLBACK scan(void *functionData) {
414
 
415
        int dx[3]={0,0,0};
416
        int nx[3]={0,0,0};
417
        int x0[3]={0,0,0};
418
        int ix[3]={0,0,0};
419
        int idx[3]={0,0,0};  
420
        unsigned short size;
421
        unsigned short posrec={0x2};   
422
        unsigned short runbuf={0x3};
423
 
424
        int  n[3];
425
        char filename[0xFF];
426
        char fname[0xff];  
427
        char pname[0xff];
428
        int enabledoutput;
429
 
430
        FILE *fp;
431
        GetCtrlVal(ait, AIT_FILENAME, fname );
432
        GetCtrlVal(ait, AIT_PATHNAME, pname );
433
        sprintf(filename,"%s/%s", pname, fname);
434
 
435
        GetCtrlVal(ait,AIT_ENABLEDOUTPUT, &enabledoutput);
436
        int fsize;
437
        if ( GetFileInfo(filename,&fsize) ) {
438
                 MessagePopup ("Warning", "File exist. Remove it first or choose another file");
439
           return 0;
440
        }        
441
        GetCtrlVal(xyscan, SCAN_STEPX, &dx[0]);
442
        GetCtrlVal(xyscan, SCAN_STEPY, &dx[1]);
443
        GetCtrlVal(xyscan, SCAN_NSTEPSX, &nx[0]);
444
        GetCtrlVal(xyscan, SCAN_NSTEPSY, &nx[1]);
445
        GetCtrlVal(xyscan, SCAN_STARTX, &x0[0]);
446
        GetCtrlVal(xyscan, SCAN_STARTY, &x0[1]);
447
 
448
 
449
        if (enabledoutput) {
450
                                fp =  fopen(filename,"ab");
451
                                if (fp) {
452
                                         size=36;
453
                                         fwrite(&runbuf, sizeof(unsigned short),1 ,fp);
454
                                         fwrite(&size  , sizeof(unsigned short),1 ,fp);
455
                                         fwrite(x0    , 1,4*3 ,fp);
456
                                         fwrite(dx    , 1,4*3 ,fp);
457
                                         fwrite(nx    , 1,4*3 ,fp);
458
                                         fclose(fp);
459
                                }    
460
        }      
461
 
462
  for (int j=0; j<nx[1]; j++) {
463
 
464
         SetCtrlVal (xyscan, SCAN_IY, j);
465
         ix[1]= x0[1]+j*dx[1];
466
#ifdef MIKRO
467
                MIKRO_MoveTo(2,ix[1]);
468
                MIKRO_GetPosition(2,&n[1]);
292 f9daq 469
            SetCtrlVal (xyscan, SCAN_YP, n[1]);
470
#endif
471
#ifdef uSMC_USB
472
                uSMC_MoveTo(node[1],ix[1]);
473
                uSMC_GetPosition(node[1],&n[1]);
474
            SetCtrlVal (xyscan, SCAN_YP, n[1]);
475
#endif
476
 
212 f9daq 477
 
292 f9daq 478
 
212 f9daq 479
         for (int i=0; i<nx[0]; i++) {
480
                SetCtrlVal (xyscan, SCAN_IX, i);  
481
                ix[0]= x0[0]+i*dx[0];
482
#ifdef MIKRO
292 f9daq 483
                    MIKRO_MoveTo(1,ix[0]);
212 f9daq 484
                        MIKRO_GetPosition(1,&n[0]);
485
                        SetCtrlVal (xyscan, SCAN_XP, n[0]);
292 f9daq 486
#endif          
487
#ifdef uSMC_USB
488
                    uSMC_MoveTo(node[0],ix[0]);
489
                        uSMC_GetPosition(node[0],&n[0]);
490
                        SetCtrlVal (xyscan, SCAN_XP, n[0]);
491
#endif                  
212 f9daq 492
 
493
                        if (enabledoutput) {
494
                                fp =  fopen(filename,"ab");
495
                                if (fp) {
496
                                         time_t mtime;
497
                                         idx[0]=i;
498
                                         idx[1]=j;
499
                                         size=24+sizeof(mtime);
500
                                         fwrite(&posrec, sizeof(unsigned short),1 ,fp);
501
                                         fwrite(&size  , sizeof(unsigned short),1 ,fp);
502
                                         fwrite(n     , 1,4*3 ,fp);
503
                                         fwrite(idx    , 1,4*3 ,fp);
504
                                         time(&mtime);  
505
                                         fwrite(&mtime  , sizeof(time_t),1 ,fp);
506
                                         fclose(fp);
507
                                }    
508
                        }      
509
 
292 f9daq 510
 
212 f9daq 511
                        int newfile=0;
512
                        daq(&newfile);
513
                        if (!daq_on) break;
514
                }
515
                if (!daq_on) break;
516
        }
517
 
518
        return 0;
519
}
520
 
521
 
522
int main (int argc, char *argv[]) {
292 f9daq 523
 
212 f9daq 524
  if (InitCVIRTE (0, argv, 0) == 0)
525
    return -1;  /* out of memory */
526
  if ((ait = LoadPanel (0, "AitGui.uir", AIT)) < 0)
527
    return -1;
528
  if ((xyscan = LoadPanel (0, "XYSCAN.uir", SCAN)) < 0)
529
    return -1;
530
  SetStdioPort (CVI_STDIO_WINDOW);
531
  SetSleepPolicy(VAL_SLEEP_MORE);
532
  CmtNewThreadPool (MAX_THREADS,  &poolHandle);
533
  DisplayPanel (ait);
534
  DisplayPanel (xyscan);
535
  AitInit();
536
 
537
 
538
#ifdef MIKRO
292 f9daq 539
        short port;
540
    GetCtrlVal(xyscan, SCAN_PORT, &port);
212 f9daq 541
        if (MIKRO_Open (port)) MessagePopup ("Error", "Mikro Port Not found !\n Change in the GUI") ;
542
        MIKRO_Init(1,0);
543
        MIKRO_Init(2,0);
544
#endif
292 f9daq 545
#ifdef uSMC_USB
546
  uSMC_Open();
547
  for (int i=0; i<3; i++) {
548
    node[i]=uSMC_FindSerial(serials[i])+1;
549
    uSMC_Init(node[i],1);
550
  }
551
#endif /* uSMC_USB */   
212 f9daq 552
 
553
 
554
  RunUserInterface ();
555
 
556
#ifdef MIKRO    
557
        MIKRO_Close ();
292 f9daq 558
#endif 
559
#ifdef uSMC_USB
560
  for (int i=0; i<3; i++) uSMC_PowerOff(node[i]);
561
  uSMC_Close();
562
#endif /* uSMC_USB */   
212 f9daq 563
  DiscardPanel (ait);
564
  DiscardPanel (xyscan);
565
  return 0;
566
}
567
 
568
int CVICALLBACK StopCB (int panel, int control, int event,
569
                        void *callbackData, int eventData1, int eventData2) {
570
  switch (event) {
571
    case EVENT_COMMIT:
572
      daq_on=0;
573
      break;
574
  }
575
  return 0;
576
}
577
 
578
 
579
int CVICALLBACK StartCB (int panel, int control, int event,
580
                         void *callbackData, int eventData1, int eventData2) {
581
  ThreadFunctionPtr mythread = NULL;
582
  switch (event) {
583
 
584
    case EVENT_COMMIT:
585
 
586
      controlID= control;
587
      if (panel == ait && control == AIT_START) {
588
        mythread = daq;
589
 
590
      }
591
                        if (panel == xyscan && control == SCAN_SCAN)   mythread = scan;  
592
      if (mythread!=NULL) {
593
        printf("New Thread panel=%d button=%d\n", panel, control);
594
 
595
        // SetDimming(1);
596
 
597
 
598
        CmtScheduleThreadPoolFunctionAdv (poolHandle, mythread, &controlID,
599
                                          DEFAULT_THREAD_PRIORITY,
600
                                          EndOfThread,
601
                                          EVENT_TP_THREAD_FUNCTION_END,
602
                                          NULL, RUN_IN_SCHEDULED_THREAD,
603
                                          &tfID);
604
      }
605
      break;
606
  }
607
  return 0;
608
}
609
 
610
 
611
 
612
int CVICALLBACK ExitCB (int panel, int control, int event,
613
                        void *callbackData, int eventData1, int eventData2) {
614
  switch (event) {
615
    case EVENT_COMMIT:
616
      QuitUserInterface (0);
617
      break;
618
  }
619
  return 0;
620
}
621
 
622
int CVICALLBACK ReadCB (int panel, int control, int event,
623
                        void *callbackData, int eventData1, int eventData2) {
624
  switch (event) {
625
    case EVENT_COMMIT:
626
 
627
 
628
 
629
      ReadRegisters();
630
      break;
631
  }
632
  return 0;
633
}
634
 
635
int CVICALLBACK ChangeChannelCB (int panel, int control, int event,
636
                                 void *callbackData, int eventData1, int eventData2) {
637
  int ch=0;
638
  switch (event) {
639
    case EVENT_COMMIT:
640
 
641
      int logy=0;
642
      GetCtrlVal(ait,AIT_CH, &ch);
643
                        GetCtrlVal(ait,AIT_LOGY, &logy);
644
                        if (logy){
645
                                SetCtrlAttribute (ait, AIT_GRAPH, ATTR_YMAP_MODE, VAL_LOG);
646
                          SetCtrlAttribute (ait, AIT_GRAPHSUM, ATTR_YMAP_MODE, VAL_LOG);
647
 
648
                        } else {
649
                                SetCtrlAttribute (ait, AIT_GRAPH, ATTR_YMAP_MODE, VAL_LINEAR);
650
                          SetCtrlAttribute (ait, AIT_GRAPHSUM, ATTR_YMAP_MODE, VAL_LINEAR);
651
 
652
                        }
653
      H1D_Draw(ch,ait,AIT_GRAPH,&plothandle[0]);
654
      break;
655
  }
656
  return 0;
657
}
658
 
659
 
660
 
661
 
662
 
663
int CVICALLBACK InitCB (int panel, int control, int event,
664
                        void *callbackData, int eventData1, int eventData2) {
665
  switch (event) {
666
    case EVENT_COMMIT:
667
      AitInit();
668
      break;
669
  }
670
  return 0;
671
}
672
 
673
int CVICALLBACK QuickCB (int panel, int control, int event,
674
                         void *callbackData, int eventData1, int eventData2) {
675
  switch (event) {
676
    case EVENT_COMMIT:
677
      switch (control) {
678
        case AIT_QUICKSETUP_1:
679
          QuickSetupContinuous();
680
                                        SetCtrlVal(ait,AIT_TRGTYPE, 0);
681
          break;
682
        case AIT_QUICKSETUP_2:
683
          QuickSetupDiscriminator();
684
                                        SetCtrlVal(ait,AIT_TRGTYPE, 2);
685
          break;
686
        case AIT_QUICKSETUP_3:
687
          QuickSetupTriggerOff();
688
                            break;
689
 
690
 
691
      }
692
                        float bias = GetHvVoltage(ADDR_HV_VMON);
693
      SetCtrlVal (panel, AIT_BIASMON, bias);
694
                        double  value = GetIntegrationTime();
695
      SetCtrlVal (panel, AIT_GETADCINTEGRATIONTIME, value);
696
                        value = GetThreshold();
697
      SetCtrlVal (panel, AIT_GETADCTHRESHOLD, value);
698
                        int csrDetector = ReadSD4Register(ADDR_CSR_DETECTOR);
699
 
700
      int ivalue = ((GetBit(csrDetector, BIT_CSR_DET_ADCGAIN2) ? 1 : 0) << 1) |
701
              ((GetBit(csrDetector, BIT_CSR_DET_ADCGAIN1) ? 1 : 0) << 0);
702
      SetCtrlVal (panel, AIT_GETADCGAIN, ivalue);
703
                        ivalue =
704
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN4) ? 1 : 0) << 3) |
705
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN3) ? 1 : 0) << 2) |
706
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN2) ? 1 : 0) << 1) |
707
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN1) ? 1 : 0) << 0);
708
      SetCtrlVal (panel, AIT_GETADCSUMGAIN, ivalue);
709
      break;
710
  }
711
  return 0;
712
}
713
 
714
 
715
 
716
int CVICALLBACK MoveStageCB (int panel, int control, int event,
717
                             void *callbackData, int eventData1, int eventData2) {
718
  int axis=0, step=1000, direction=1;
719
  switch (event) {
720
    case EVENT_COMMIT:
721
 
722
      if (panel == xyscan) {
723
        switch (control) {
724
          case SCAN_BR :
725
            axis = 1;
726
            direction = 1;
727
            GetCtrlVal(panel, SCAN_STEPX, &step);
728
            break;
729
          case SCAN_BL :
730
            axis = 1;
731
            direction = -1;
732
            GetCtrlVal(panel, SCAN_STEPX, &step);
733
            break;
734
          case SCAN_BU :
735
            axis = 2;
736
            direction = 1;
737
            GetCtrlVal(panel, SCAN_STEPY, &step);
738
            break;
739
          case SCAN_BD :
740
            axis = 2;
741
            direction = -1;
742
            GetCtrlVal(panel, SCAN_STEPY, &step);
743
            break;
744
        }
745
#ifdef MIKRO
746
        {
747
          int n=0;
748
          MIKRO_MoveFor(axis,  direction*step );
749
          MIKRO_GetPosition(axis,&n);
750
          if (axis == 1) SetCtrlVal (panel, SCAN_XP, n);
751
          if (axis == 2) SetCtrlVal (panel, SCAN_YP, n);
752
        }
292 f9daq 753
#endif // MIKRO  
754
 
755
#ifdef uSMC_USB
756
        {
757
          int n=0;
758
          uSMC_MoveFor(node[axis-1],  direction*step );
759
          uSMC_GetPosition(node[axis-1],&n);
760
          if (axis == 1) SetCtrlVal (panel, SCAN_XP, n);
761
          if (axis == 2) SetCtrlVal (panel, SCAN_YP, n);
762
        }
763
#endif // MIKRO                 
212 f9daq 764
      }
765
 
766
      break;
767
  }
768
  return 0;
769
}
770
 
771
 
772
 
773
 
774
 
775
int CVICALLBACK GoXCB (int panel, int control, int event,
776
                       void *callbackData, int eventData1, int eventData2) {
777
  int n2;
778
  switch (event) {
779
    case EVENT_COMMIT:
780
      GetCtrlVal (panel, SCAN_XG, &n2);
781
#ifdef MIKRO
782
      MIKRO_MoveTo(1,n2);
783
      MIKRO_GetPosition(1,&n2);
784
#endif
292 f9daq 785
#ifdef uSMC_USB  
786
      uSMC_MoveTo(node[0],n2);
787
      uSMC_GetPosition(node[0],&n2);
788
#endif    
789
 
212 f9daq 790
      SetCtrlVal (panel, SCAN_XP, n2);
791
      break;
792
  }
793
  return 0;
794
}
795
 
796
int CVICALLBACK GoYCB (int panel, int control, int event,
797
                       void *callbackData, int eventData1, int eventData2) {
798
  int n2;
799
  switch (event) {
800
    case EVENT_COMMIT:
801
      GetCtrlVal (panel, SCAN_YG, &n2);
802
#ifdef MIKRO
803
      MIKRO_MoveTo(2,n2);
804
      MIKRO_GetPosition(2,&n2);
805
 
806
#endif
292 f9daq 807
#ifdef uSMC_USB  
808
      uSMC_MoveTo(node[1],n2);
809
      uSMC_GetPosition(node[1],&n2);
810
#endif            
212 f9daq 811
      SetCtrlVal (panel, SCAN_YP, n2);
812
      break;
813
  }
814
  return 0;
815
}
816
 
817
int CVICALLBACK GetCurrentPositionCB (int panel, int control, int event,
818
                                      void *callbackData, int eventData1, int eventData2) {
819
 
292 f9daq 820
  int n[2];
212 f9daq 821
  switch (event) {
822
    case EVENT_COMMIT: {
823
#ifdef MIKRO
824
      MIKRO_GetPosition(1,&n[0]);
825
      SetCtrlVal (panel, SCAN_XP, n[0]);
826
      MIKRO_GetPosition(2,&n[1]);
827
      SetCtrlVal (panel, SCAN_YP, n[1]);
828
#endif
292 f9daq 829
#ifdef uSMC_USB  
830
      uSMC_GetPosition(node[0],&n[0]);
831
      SetCtrlVal (panel, SCAN_XP, n[0]);
832
      uSMC_GetPosition(node[1],&n[1]);
833
      SetCtrlVal (panel, SCAN_YP, n[1]);
834
#endif            
212 f9daq 835
      break;
836
    }
837
  }
838
  return 0;
839
}
840
 
841
int CVICALLBACK HomeCB (int panel, int control, int event,
842
                        void *callbackData, int eventData1, int eventData2) {
843
  switch (event) {
844
    case EVENT_COMMIT:
845
#ifdef MIKRO
846
      MIKRO_ReferenceMove(1);
847
      MIKRO_ReferenceMove(2);
848
      GetCurrentPositionCB(panel, control, event, NULL, 0, 0);
849
#endif
292 f9daq 850
#ifdef uSMC_USB
851
        //SetCtrlVal(panel,P1_STAGELED,1);
852
        for (int i=0; i<3; i++) uSMC_ReferenceMove(node[i]);
853
                GetCurrentPositionCB(panel, control, event, NULL, 0, 0);
854
        //SetCtrlVal(panel,P1_STAGELED,0);
855
#endif /* uSMC_USB */     
212 f9daq 856
      break;
857
  }
858
  return 0;
859
}
860
 
861
int CVICALLBACK SetBiasCB (int panel, int control, int event,
862
                           void *callbackData, int eventData1, int eventData2) {
863
  double bias=0;
864
  switch (event) {
865
    case EVENT_COMMIT:
866
      GetCtrlVal (panel, AIT_BIAS, &bias);
867
      SetHvVoltage(ADDR_HV_CTRL, bias);
868
      bias = GetHvVoltage(ADDR_HV_VMON);
869
      SetCtrlVal (panel, AIT_BIASMON, bias);
870
      break;
871
  }
872
  return 0;
873
}
874
 
875
int CVICALLBACK SetHvOnCB (int panel, int control, int event,
876
                           void *callbackData, int eventData1, int eventData2) {
877
  int state=0;
878
  double bias;
879
  switch (event) {
880
    case EVENT_COMMIT:
881
      GetCtrlVal (panel, control, &state);
882
      if (state) SetHvOn(true);
883
      else SetHvOn(false);
884
      bias = GetHvVoltage(ADDR_HV_VMON);
885
      SetCtrlVal (panel, AIT_BIASMON, bias);
886
      break;
887
  }
888
  return 0;
889
}
890
 
891
int CVICALLBACK SetAdcIntegrationTimeCB (int panel, int control, int event,
892
    void *callbackData, int eventData1, int eventData2) {
893
 
894
  switch (event) {
895
    case EVENT_COMMIT: {
896
      double value;
897
      GetCtrlVal (panel, AIT_ADCINTEGRATIONTIME, &value);
898
      SetIntegrationTime(value);
899
      value = GetIntegrationTime();
900
      SetCtrlVal (panel, AIT_GETADCINTEGRATIONTIME, value);
901
    }
902
    break;
903
  }
904
  return 0;
905
}
906
 
907
int CVICALLBACK SetAdcThresholdCB (int panel, int control, int event,
908
                                   void *callbackData, int eventData1, int eventData2) {
909
  switch (event) {
910
    case EVENT_COMMIT: {
911
      double value;
912
      GetCtrlVal (panel, AIT_ADCTHRESHOLD, &value);
913
      SetThreshold(value);
914
      value = GetThreshold();
915
      SetCtrlVal (panel, AIT_GETADCTHRESHOLD, value);
916
    }
917
    break;
918
  }
919
  return 0;
920
}
921
 
922
int CVICALLBACK SetAdcGainCB (int panel, int control, int event,
923
                              void *callbackData, int eventData1, int eventData2) {
924
  switch (event) {
925
    case EVENT_COMMIT: {
926
      int value;
927
      GetCtrlVal (panel, AIT_ADCGAIN, &value);
928
      SetAdcGain(value);
929
      int csrDetector = ReadSD4Register(ADDR_CSR_DETECTOR);
930
 
931
      value = ((GetBit(csrDetector, BIT_CSR_DET_ADCGAIN2) ? 1 : 0) << 1) |
932
              ((GetBit(csrDetector, BIT_CSR_DET_ADCGAIN1) ? 1 : 0) << 0);
933
      SetCtrlVal (panel, AIT_GETADCGAIN, value);
934
    }
935
    break;
936
  }
937
  return 0;
938
}
939
 
940
int CVICALLBACK SetAdcSumGainCB (int panel, int control, int event,
941
                                                                                                                                 void *callbackData, int eventData1, int eventData2) {
942
        switch (event) {
943
                case EVENT_COMMIT:{
944
      int value;
945
      GetCtrlVal (panel, AIT_ADCSUMGAIN, &value);
946
      SetSumGain(value);
947
      int csrDetector = ReadSD4Register(ADDR_CSR_DETECTOR);
948
                        value =
949
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN4) ? 1 : 0) << 3) |
950
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN3) ? 1 : 0) << 2) |
951
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN2) ? 1 : 0) << 1) |
952
                        ((GetBit(csrDetector, BIT_CSR_DET_SUMGAIN1) ? 1 : 0) << 0);
953
      SetCtrlVal (panel, AIT_GETADCSUMGAIN, value);
954
    }
955
 
956
                        break;
957
        }
958
        return 0;
959
}
960
 
961
int CVICALLBACK SetDiscriminatorTypeCB (int panel, int control, int event,
962
                                                                                                                                                                void *callbackData, int eventData1, int eventData2) {
963
        switch (event) {
964
                case EVENT_COMMIT:{
965
                                int trgtype;
966
                        GetCtrlVal(ait,AIT_TRGTYPE, &trgtype);
967
            EnableTrigger(trgtype);
968
                }              
969
                        break;
970
        }
971
        return 0;
972
}
973
 
974
int CVICALLBACK ResetCB (int panel, int control, int event,
975
                                                                                                 void *callbackData, int eventData1, int eventData2) {
976
        switch (event) {
977
                case EVENT_COMMIT:
978
                        ReconfigureDevice() ;
979
                        ReconnectDevice();
980
                        //ResetDevice() ;
981
                        break;
982
        }
983
        return 0;
984
}
985
 
986
int CVICALLBACK OpenScanCB (int panel, int control, int event,
987
                                                                                                                void *callbackData, int eventData1, int eventData2) {
988
        switch (event) {
989
                case EVENT_COMMIT:
990
                        DisplayPanel (xyscan);
991
                        break;
992
        }
993
        return 0;
994
}
995
 
996
int CVICALLBACK OpenMainCB (int panel, int control, int event,
997
                                                                                                                void *callbackData, int eventData1, int eventData2) {
998
        switch (event) {
999
                case EVENT_COMMIT:
1000
                        DisplayPanel (ait);  
1001
                        break;
1002
        }
1003
        return 0;
1004
}