Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  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. }
  271.