Subversion Repositories f9daq

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
309 f9daq 1
#include <ansi_c.h>
2
#include <utility.h>
3
#include <cvirte.h>             
4
#include <userint.h>
5
#include "mergerjtag.h"
6
 
7
static int panelHandle;
8
 
9
void bin2hex (const char * str, char *target)
10
{
11
   char target0[0xFF],target1[0xFF];
12
        int i; 
13
   int end= strlen(str);
14
   target0[0]=0;
15
   if (end>32) strncpy (target0, &str[end-32-1] , 32);
16
   target0[32]=0;
17
 
18
   end-=32;
19
 
20
   if (end>0) {
21
         strncpy (target1, &str[0] , end);
22
     target1[end-1] = 0;
23
   }     
24
//   printf("==>%s %s\n==>%s\n", target1, target0, str);
25
   sprintf(target,"0x%08X%08X",strtoul (target1, NULL, 2)  ,strtoul (target0, NULL, 2)   );
26
}
27
 
28
char impact_output[255]= "impact_merger.txt";
29
 
30
int jtagexecute(const char *impactcmd, int wait){
31
        char cmd[255];
32
        int jtagchainid = 1;
33
        FILE *fp        =fopen("impact.cmd","w");
34
        fprintf(fp,"setmode -bscan\n");
35
        fprintf(fp,"setcable -port usb21 -baud 3000000\n");
36
        fprintf(fp,"identify\n");  
37
  fprintf(fp,"%s\n", impactcmd );
38
        fprintf(fp,"exit\n");
39
        fclose(fp);
40
        sprintf(cmd,"impact.bat  impact.cmd  %s ", impact_output);      
41
        printf("%s\n",cmd);
42
        if (wait) return system(cmd);
43
  else return LaunchExecutableEx (cmd, LE_SHOWNORMAL, NULL);     
44
}
45
 
46
int loadbit( int wait){
47
 
48
        const char impactcmd[255]="impact.cmd";
49
        char cmd[255];
50
        int jtagchainid = 1;
51
        char bitfile[255]="arich_merger_rev01.bit";
52
        //GetCtrlVal(pnl, PANEL_BITFILE,bitfile);
53
  char foutput[255]="impacttest_feb";  
54
 
55
 
56
 
57
        FILE *fp        =fopen(impactcmd,"w");
58
 
59
        fprintf(fp,
60
                "setmode -bscan\n"
61
                "setcable -port usb21 -baud 3000000\n"
62
                "identify\n");
63
 
64
          //fprintf(fp, "readdna -p %d\n", jtagchainid );  
65
          fprintf(fp,   "assignfile -p %d -file %s\n",jtagchainid, bitfile );
66
          fprintf(fp,   "program -p %d -prog\n" ,jtagchainid );
67
//      fprintf(fp,     "verify -p %d\n",jtagchainid );
68
 
69
        fprintf(fp,"exit\n");
70
        fclose(fp);
71
 
72
        sprintf(cmd,"impact.bat  %s  %s ",  impactcmd,impact_output);      
73
        printf("%s\n",cmd);
74
        if (wait) system(cmd);
75
    else LaunchExecutableEx (cmd, LE_SHOWNORMAL, NULL);  
76
 
77
return 0;
78
 
79
}
80
 
81
int ImpactOutputInspect( const char *fname, const char *opt){
82
          FILE *fout;
83
 
84
        const int ndim=400;
85
    char buff[ndim];
86
        char fpgasn[0xFF], hexsn[0XFF];    
87
    char impactout[255];
88
        char *ret;
89
        char *ret0;
90
        char *ret1;
91
        char *ret2;
92
        int downloadok=0;
93
        int xc6slx45=0;
94
        FILE *fp = NULL;
95
                if (fname!=NULL) fp = fopen (fname, opt);
96
          fout = fopen (impact_output, "r");
97
      while (fgets(buff,ndim,fout)!=NULL) {
98
//        printf("%s",buff);
99
            ret=strstr(buff, "INFO:iMPACT:188 - '1': Programming completed successfully.");
100
            if (ret !=NULL){
101
                  printf("Download OK!\n");  
102
                  //SetCtrlVal(pnl,firmware_control[febboard], 1);
103
                  downloadok=1;
104
            }
105
            ret=strstr(buff, "INFO:iMPACT:501 - '1': Added Device xc5vlx50t successfully.");
106
            if (ret !=NULL){
107
                  printf("Device xc5vlx50t found!\n");  
108
                  //SetCtrlVal(pnl,fpga_control[febboard], 1);
109
                  xc6slx45=1;
110
            }
111
 
112
                        ret=strstr(buff, "Temperature");
113
                        for (int k=0;k<2;k++){
114
                        if (ret !=NULL){
115
 
116
                                  char t0[0xFF]="";  
117
                      printf("#%s#\n",ret);
118
                            for (int i=0;i<3;i++){
119
                              ret=strstr(ret, "Reading:");
120
                              if (ret!=NULL) {
121
                                            ret=(ret+8);
122
                                sscanf(ret,"%s", t0);
123
                                      printf("t=%ul sens=%d T=%s\n",time(NULL), i+k*2, t0);            
124
                                                        if (fp){
125
                                                          fprintf(fp, "%ul %d %s\n",time(NULL), i+k*2, t0);            
126
              }
127
                                    } else break;
128
                                  }
129
 
130
                                        if (k==0) {
131
                                                 fgets(buff,ndim,fout);
132
                                                 ret=strstr(buff, "Reading:");
133
                                        }        
134
                                }
135
            }
136
 
137
 
138
            ret=strstr(buff, "'1': DNA =");
139
            if (ret !=NULL){
140
                  sscanf(ret,"'1': DNA = '%s", fpgasn);
141
 
142
                  bin2hex(fpgasn,hexsn);
143
                  printf("%s",hexsn);
144
              //SetCtrlVal(pnl,target_control[febboard], hexsn);
145
            } else {
146
              sprintf(hexsn,"");
147
            }
148
      }
149
                        if (fp) fclose (fp);
150
      fclose(fout);
151
 
152
    return 0;    
153
}
154
 
155
 
156
FILE *fmon=NULL;  
157
int main (int argc, char *argv[]) {
158
        if (InitCVIRTE (0, argv, 0) == 0)
159
                return -1;      /* out of memory */
160
        if ((panelHandle = LoadPanel (0, "mergerjtag.uir", PANEL)) < 0)
161
                return -1;
162
  double tinterval;
163
  GetCtrlVal(panelHandle, PANEL_TINTERVAL, &tinterval);
164
  SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_INTERVAL, tinterval);
165
  TimerOnOffCB(panelHandle, PANEL_TIMERON, EVENT_COMMIT,NULL,0,0);  
166
 
167
        DisplayPanel (panelHandle);
168
        RunUserInterface ();
169
        DiscardPanel (panelHandle);
170
        if (fmon) fclose(fmon);
171
        return 0;
172
}
173
 
174
int CVICALLBACK ExitCB (int panel, int control, int event,
175
                                                                                                void *callbackData, int eventData1, int eventData2) {
176
        switch (event) {
177
                case EVENT_COMMIT:
178
                        QuitUserInterface (0);
179
                        break;
180
        }
181
        return 0;
182
}
183
 
184
int CVICALLBACK ReadCB (int panel, int control, int event,
185
                                                                                                void *callbackData, int eventData1, int eventData2) {
186
        switch (event) {
187
                case EVENT_COMMIT:
188
                        jtagexecute("readTemperatureAndVoltage -p 1\n", 1);
189
                        ImpactOutputInspect("read_out.txt","w");  
190
                        break;
191
        }
192
        return 0;
193
}
194
 
195
int CVICALLBACK LoadCB (int panel, int control, int event,
196
                                                                                                void *callbackData, int eventData1, int eventData2) {
197
        switch (event) {
198
                case EVENT_COMMIT:
199
                        loadbit(1);
200
                        ImpactOutputInspect("loadbit_out.txt","w");
201
                        break;
202
        }
203
        return 0;
204
}
205
 
206
int CVICALLBACK TimerOnOffCB (int panel, int control, int event,
207
                              void *callbackData, int eventData1, int eventData2)
208
{
209
  int state;
210
  switch (event)
211
  {
212
    case EVENT_COMMIT:
213
      GetCtrlVal(panel, control, &state);
214
      if (state){
215
                                 printf ("Enabling timer....\n");
216
         ResumeTimerCallbacks();
217
      } else {
218
         SuspendTimerCallbacks ();
219
         printf ("Disabling timer....\n");
220
      }
221
      break;
222
  }
223
  return 0;
224
}
225
int CVICALLBACK SetIntervalCB (int panel, int control, int event,
226
                               void *callbackData, int eventData1, int eventData2) {
227
  double tinterval;
228
  switch (event) {
229
    case EVENT_COMMIT:
230
      GetCtrlVal(panel, control, &tinterval);
231
      SetCtrlAttribute (panel, PANEL_TIMER, ATTR_INTERVAL, tinterval);
232
      break;
233
  }
234
  return 0;
235
}
236
 
237
 
238
 
239
int CVICALLBACK TimerCB (int panel, int control, int event,
240
                                                                                                 void *callbackData, int eventData1, int eventData2) {
241
        switch (event) {
242
                case EVENT_TIMER_TICK:
243
                        jtagexecute("readTemperatureAndVoltage -p 1\n", 1);
244
                        ImpactOutputInspect("merger_temperature.txt","a");
245
                        break;
246
        }
247
        return 0;
248
}
249
 
250
int CVICALLBACK DrawCB (int panel, int control, int event,
251
                                                                                                void *callbackData, int eventData1, int eventData2) {
252
        switch (event) {
253
                case EVENT_COMMIT:{
254
 
255
                        char name[MAX_PATHNAME_LEN];
256
//      char dfile[MAX_PATHNAME_LEN];
257
//      char efile[MAX_PATHNAME_LEN];
258
//      status = FileSelectPopup ("dat", "*.dat", ".dat",
259
//                                "Izberi datoteko s podatki",
260
//                                VAL_LOAD_BUTTON, 0, 0, 1, 0, efile);
261
//      EscapeString(efile,dfile);
262
      sprintf(name ,"C:/root/bin/root.exe TDraw.cxx(\\\"%s\\\")", "merger_temperature.txt");
263
        //              sprintf(name ,"C:/root/bin/root.exe IUdraw.cxx");
264
      printf("%s\n",name);
265
      LaunchExecutable(name);
266
                        break;
267
                }      
268
        }
269
        return 0;
270
}