Subversion Repositories f9daq

Rev

Rev 326 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 326 Rev 357
Line 655... Line 655...
655
    if (sa02Verbose) {
655
    if (sa02Verbose) {
656
      sa02Printf("Data in the file:%s\n", filename);
656
      sa02Printf("Data in the file:%s\n", filename);
657
    }
657
    }
658
    if (gFp) {
658
    if (gFp) {
659
      fp=gFp;
659
      fp=gFp;
-
 
660
    }
660
    } else {
661
    else {
661
      if (append) {
662
      if (append) {
662
        fp=fopen(filename,"ab");
663
        fp=fopen(filename,"ab");
-
 
664
      }
663
      } else {
665
      else {
664
        fp=fopen(filename,"wb");
666
        fp=fopen(filename,"wb");
665
      }
667
      }
666
    }
668
    }
667
    output=1;
669
    output=1;
668
    // run header
670
    // run header
Line 676... Line 678...
676
    runinfo.ch  = ch;
678
    runinfo.ch  = ch;
677
    runinfo.neve= toread;
679
    runinfo.neve= toread;
678
    runinfo.writemode= towrite;
680
    runinfo.writemode= towrite;
679
    sa02Printf("RUNINFO x0=%d nx=%d dx=%d\n", runinfo.x0,runinfo.dx,runinfo.nx);
681
    sa02Printf("RUNINFO x0=%d nx=%d dx=%d\n", runinfo.x0,runinfo.dx,runinfo.nx);
680
    nbtotal+=fwrite(&runinfo, 1,sizeof(runinfo),fp); //gzip
682
    nbtotal+=fwrite(&runinfo, 1,sizeof(runinfo),fp); //gzip
-
 
683
  }
681
  } else {
684
  else {
682
    if (sa02Verbose) {
685
    if (sa02Verbose) {
683
      sa02Printf("Data are not written to the file!\n");
686
      sa02Printf("Data are not written to the file!\n");
684
    }
687
    }
685
  }
688
  }
686
 
689
 
687
  if (!neve & (towrite || toread) ) {
690
  if (!neve & (towrite || toread) ) {
688
    neve=1;
691
    neve=1;
689
  }
692
  }
690
 
693
 
691
 
694
 
Line 714... Line 717...
714
  int icfa_visible=0;
717
  int icfa_visible=0;
715
  int icfa_add=0;
718
  int icfa_add=0;
716
  GetPanelAttribute (p6h, ATTR_VISIBLE, &icfa_visible);
719
  GetPanelAttribute (p6h, ATTR_VISIBLE, &icfa_visible);
717
  GetCtrlVal (p6h, MINIRICH_ADD, &icfa_add);
720
  GetCtrlVal (p6h, MINIRICH_ADD, &icfa_add);
718
  if (icfa_visible) {
721
  if (icfa_visible) {
719
    icfa_Init();
722
    icfa_Init();
720
    icfa_Histo();
723
    icfa_Histo();
721
  }  
724
  }
722
  ///////////////////////////////////////////////////////////////
725
  ///////////////////////////////////////////////////////////////
723
  SetCtrlAttribute  (p1h, P1_GRAPH2D, ATTR_LABEL_TEXT , title);
726
  SetCtrlAttribute  (p1h, P1_GRAPH2D, ATTR_LABEL_TEXT , title);
724
  H2DInit(h2, "h2d",title, 144*4, 0,1,neve,data0, dstep);
727
  H2DInit(h2, "h2d",title, 144*4, 0,1,neve,data0, dstep);
725
  H2DSetTitleY(h2,scmd);
728
  H2DSetTitleY(h2,scmd);
726
 
729
 
727
  sa02Printf("H2D nx=%d ny=%d  i=%d neve=%d\n", H2DGetNbinsX(h2),H2DGetNbinsY(h2), i, neve);
730
  sa02Printf("H2D nx=%d ny=%d  i=%d neve=%d\n", H2DGetNbinsX(h2),H2DGetNbinsY(h2), i, neve);
728
 
731
 
729
 
732
 
730
  plot2d(h2,1);
733
  plot2d(h2,1);
731
  for (i=0; i<neve; i++) {
734
  for (i=0; i<neve; i++) {
732
    int nb = sizeof(uint32_t);
735
    int nb = sizeof(uint32_t);
733
    int count=0;
736
    int count=0;
734
 
737
 
735
 
738
 
736
    for (board=0; board<4; board++) {
739
    for (board=0; board<4; board++) {
737
 
740
 
738
      switch (towrite) {
741
      switch (towrite) {
739
        case 1: {
742
        case 1: {
740
          rdata[count+2]= data;
743
          rdata[count+2]= data;
Line 756... Line 759...
756
          break;
759
          break;
757
        }
760
        }
758
      }
761
      }
759
      if (towrite==3) {
762
      if (towrite==3) {
760
        SetCtrlVal(p1h,P1_SETVALUE, chip*36+ch );
763
        SetCtrlVal(p1h,P1_SETVALUE, chip*36+ch );
-
 
764
      }
761
      } else {
765
      else {
762
        SetCtrlVal(p1h,P1_SETVALUE, data);
766
        SetCtrlVal(p1h,P1_SETVALUE, data);
763
      }
767
      }
764
 
768
 
765
 
769
 
766
 
770
 
767
    }
771
    }
768
 
772
 
769
    Sa02SetNeve(toread);
773
    Sa02SetNeve(toread);
770
    sa02Reset();
774
    sa02Reset();
771
 
775
 
772
//    for ( j=0; j< toread; j++)
776
//    for ( j=0; j< toread; j++)
773
    {
777
    {
774
      int eventerror =  0;
778
      int eventerror =  0;
775
 
779
 
776
      if ( (count +2 +dsize)  >= maxsize) {
780
      if ( (count +2 +dsize)  >= maxsize) {
Line 781... Line 785...
781
      }
785
      }
782
 
786
 
783
      do {
787
      do {
784
        if (sendswtrg == 1) Sa02SoftwareTrigger();
788
        if (sendswtrg == 1) Sa02SoftwareTrigger();
785
        nb  = sa02Read(mask, &rdata[count+2] );
789
        nb  = sa02Read(mask, &rdata[count+2] );
-
 
790
      }
786
      } while  ( nb==0 && !ctrl_c);
791
      while  ( nb==0 && !ctrl_c);
787
      if (nb==0)  sa02Printf("nb==0 LINE=%d\n",__LINE__);
792
      if (nb==0)  sa02Printf("nb==0 LINE=%d\n",__LINE__);
788
 
793
 
789
      if (testfixeddata && nb>0) {
794
      if (testfixeddata && nb>0) {
790
        int len = nb / sizeof(uint32_t);
795
        int len = nb / sizeof(uint32_t);
791
        for (ir=0; ir<len; ir++) {
796
        for (ir=0; ir<len; ir++) {
Line 800... Line 805...
800
        readerror++;
805
        readerror++;
801
        if (readerror==3) {
806
        if (readerror==3) {
802
          ctrl_c = 1;
807
          ctrl_c = 1;
803
          system("date >> firmware.lock");
808
          system("date >> firmware.lock");
804
        }
809
        }
-
 
810
      }
805
      } else {
811
      else {
806
        readerror= 0;
812
        readerror= 0;
807
      }
813
      }
808
 
814
 
809
      for (ich=0; ich<144*4; ich++) {
815
      for (ich=0; ich<144*4; ich++) {
810
        int xch = (143 - ich%144) + ich/144*144;
816
        int xch = (143 - ich%144) + ich/144*144;
811
        H2DFillBin(h2, xch,i,rdata[count+2+ich]);
817
        H2DFillBin(h2, xch,i,rdata[count+2+ich]);
812
      }
818
      }
813
     
819
 
814
      if (icfa_visible) icfa_Event(&rdata[count+2], icfa_add );
820
      if (icfa_visible) icfa_Event(&rdata[count+2], icfa_add );
815
       
821
 
816
      /*
822
      /*
817
      for (ich=0; ich<144; ich++) {
823
      for (ich=0; ich<144; ich++) {
818
      //        id=(35-ich/4)+gBoardNumber*36;
824
      //        id=(35-ich/4)+gBoardNumber*36;
819
      //        shft=(ich%4)*8;
825
      //        shft=(ich%4)*8;
820
        id=(17-ich/8)+sa02BoardNumber*18;
826
        id=(17-ich/8)+sa02BoardNumber*18;
Line 826... Line 832...
826
        }
832
        }
827
        if (sa02Verbose>2) {
833
        if (sa02Verbose>2) {
828
          sa02Printf("%02X ",(rdata[count+2+id]>> shft)& 0xF );
834
          sa02Printf("%02X ",(rdata[count+2+id]>> shft)& 0xF );
829
      //        sa02Printf("%02X ",(rdata[count+2+id]>> shft)& 0xFF );
835
      //        sa02Printf("%02X ",(rdata[count+2+id]>> shft)& 0xFF );
830
        }
836
        }
831
      }
837
      }
832
      */
838
      */
833
 
839
 
834
      if (sa02Verbose>2) sa02Printf("\n" );
840
      if (sa02Verbose>2) sa02Printf("\n" );
835
      if (nb>=0) count+=module_header(0x3,&rdata[count],nb/sizeof(uint32_t));  // recid 0x3
841
      if (nb>=0) count+=module_header(0x3,&rdata[count],nb/sizeof(uint32_t));  // recid 0x3
836
 
842
 
Line 850... Line 856...
850
        sa02Printf("%d events in %2.2f min (%d s)  TIMEOUTS=%d %s",ncount, (double)(t-tstart)/60.,t-tstart,  nerrors, ctime(&t));
856
        sa02Printf("%d events in %2.2f min (%d s)  TIMEOUTS=%d %s",ncount, (double)(t-tstart)/60.,t-tstart,  nerrors, ctime(&t));
851
      }
857
      }
852
      if (aborttimeout && (t-tstart)>aborttimeout) {
858
      if (aborttimeout && (t-tstart)>aborttimeout) {
853
        sa02Printf("Abort timeout reached ....\n");
859
        sa02Printf("Abort timeout reached ....\n");
854
        ctrl_c=1;
860
        ctrl_c=1;
855
        break;
861
        break;
856
      }
862
      }
857
      told=t;
863
      told=t;
858
      if (nb==0) {
864
      if (nb==0) {
859
        nerrors++;
865
        nerrors++;
860
        //j--;    /// kako potem pride cez zeljeno stevil ozadetkov?
866
        //j--;    /// kako potem pride cez zeljeno stevil ozadetkov?
861
      } else {
-
 
862
        ncount++;
-
 
863
      }
867
      }
-
 
868
      else {
-
 
869
        ncount++;
-
 
870
      }
864
    }
871
    }
865
    if (externalcmd) {
872
    if (externalcmd) {
866
      char ecmd[256];
873
      char ecmd[256];
867
      sprintf(ecmd,"%s %u %u %u %u",externalcommand,(unsigned int)  tstart,data, rdata[2], rdata[3]);
874
      sprintf(ecmd,"%s %u %u %u %u",externalcommand,(unsigned int)  tstart,data, rdata[2], rdata[3]);
868
      if (sa02Verbose) {
875
      if (sa02Verbose) {
869
        sa02Printf("Executing external command %s\n",ecmd);
876
        sa02Printf("Executing external command %s\n",ecmd);
870
      }
877
      }
871
      system(ecmd);
878
      system(ecmd);
872
    }
879
    }
873
 
880
 
874
    if (output && Random(0,1)<fraction) {
881
    if (output && Random(0,1)<fraction) {
875
      evtrec.id = EVTREC_ID;
882
      evtrec.id = EVTREC_ID;
876
      evtrec.len=count*sizeof(uint32_t)+ sizeof(evtrec);
883
      evtrec.len=count*sizeof(uint32_t)+ sizeof(evtrec);
877
      evtrec.time= (uint32_t) time(NULL);
884
      evtrec.time= (uint32_t) time(NULL);
Line 882... Line 889...
882
      }
889
      }
883
      if (nb!= (int) evtrec.len) {
890
      if (nb!= (int) evtrec.len) {
884
        sa02Printf("Error writing! %d!=%d\n",nb,evtrec.len);
891
        sa02Printf("Error writing! %d!=%d\n",nb,evtrec.len);
885
      }
892
      }
886
      nbtotal+= nb;
893
      nbtotal+= nb;
887
    }
894
    }
888
 
895
 
889
    if (sa02Verbose==1)  {
896
    if (sa02Verbose==1)  {
890
      sa02Printf("[%d/%d] %u \t", i,count, (unsigned int) time(NULL));
897
      sa02Printf("[%d/%d] %u \t", i,count, (unsigned int) time(NULL));
891
      PrintData(rdata,count);
898
      PrintData(rdata,count);
892
    }
899
    }
Line 895... Line 902...
895
      ch += dstep;
902
      ch += dstep;
896
      if (ch>35) {
903
      if (ch>35) {
897
        ch-=36;
904
        ch-=36;
898
        chip++;
905
        chip++;
899
      }
906
      }
-
 
907
    }
900
    } else {
908
    else {
901
      data += dstep;
909
      data += dstep;
902
    }
910
    }
903
    if (ctrl_c ) {
911
    if (ctrl_c ) {
904
      if (!testfixeddata) {
912
      if (!testfixeddata) {
905
        sa02Printf("Ctrl+C Program interrupted ....\n");
913
        sa02Printf("Ctrl+C Program interrupted ....\n");
906
      }
914
      }
907
      break;
915
      break;
908
    }
916
    }
909
  }
917
  }
910
  plot2d(h2, i-1);
918
  plot2d(h2, i-1);
911
  if (icfa_visible) icfa_Draw();
919
  if (icfa_visible) icfa_Draw();
912
 
920
 
913
  if (output) {
921
  if (output) {
914
    sprintf(scmd,"channel;daqtime=%f", Timer()-t0 );
922
    sprintf(scmd,"channel;daqtime=%f", Timer()-t0 );
915
    H2DSetTitleX(h2,scmd);
923
    H2DSetTitleX(h2,scmd);
916
    H2DWrite2File(h2,fp);
924
    H2DWrite2File(h2,fp);
917
    if (!gFp) {
925
    if (!gFp) {
918
      fclose(fp);
926
      fclose(fp);
919
    }
927
    }
920
  }
928
  }
921
  if (sa02Verbose>1) sa02Printf("%d bytes written to file %s\n", nbtotal, filename);
929
  if (sa02Verbose>1) sa02Printf("%d bytes written to file %s\n", nbtotal, filename);
922
  time(&t);
930
  time(&t);
923
  if (toread && !testfixeddata) sa02Printf("%d events in %2.2f min  (%f s)  TIMEOUTS=%d  %s",ncount, (double)(Timer()-t0)/60.,Timer()-t0, nerrors, ctime(&t));
931
  if (toread && !testfixeddata) sa02Printf("%d events in %2.2f min  (%f s)  TIMEOUTS=%d  %s",ncount, (double)(Timer()-t0)/60.,Timer()-t0, nerrors, ctime(&t));
924
  free(rdata);
932
  free(rdata);
925
 
933
 
926
  return 0;
934
  return 0;
927
}
935
}
928
 
936
 
929
int CVICALLBACK quit (int panel, int event, void *callbackData,
937
int CVICALLBACK quit (int panel, int event, void *callbackData,
930
                      int eventData1, int eventData2) {
938
                      int eventData1, int eventData2) {
931
  switch (event) {
939
  switch (event) {
932
    case EVENT_CLOSE:
940
    case EVENT_CLOSE:
933
      // Stop timer callbacks
941
      // Stop timer callbacks
Line 945... Line 953...
945
      quit(0,0,NULL,0,0);
953
      quit(0,0,NULL,0,0);
946
      exit(0);
954
      exit(0);
947
  }
955
  }
948
  return 0;
956
  return 0;
949
}
957
}
950
 
958
 
951
int SetParametersFromFile( const char *fname) {
959
int SetParametersFromFile( const char *fname) {
952
  uint32_t gdata;
960
  uint32_t gdata;
953
  uint32_t cdata;
961
  uint32_t cdata;
954
 
962
 
955
  sa02AsicGlobalRegister  *greg = (sa02AsicGlobalRegister *) &gdata ;
963
  sa02AsicGlobalRegister  *greg = (sa02AsicGlobalRegister *) &gdata ;
Line 976... Line 984...
976
    sa02Printf("Error! Cannot open file %s\n",fname);
984
    sa02Printf("Error! Cannot open file %s\n",fname);
977
    return -1;
985
    return -1;
978
  }
986
  }
979
  for (i=0; i<8*144*4; i++) {
987
  for (i=0; i<8*144*4; i++) {
980
    cregdata[i]=0;
988
    cregdata[i]=0;
981
  }
989
  }
982
  for (i=0; i<7*4*4; i++) {
990
  for (i=0; i<7*4*4; i++) {
983
    gregdata[i]=0;
991
    gregdata[i]=0;
984
  }
992
  }
985
  gdata=0;
993
  gdata=0;
986
  cdata=0;
994
  cdata=0;
Line 1001... Line 1009...
1001
    if (strcmp(cmd,"MUXASIC")==0) {
1009
    if (strcmp(cmd,"MUXASIC")==0) {
1002
      asic = sa02MuxMap(asic);
1010
      asic = sa02MuxMap(asic);
1003
    }
1011
    }
1004
    switch (nb) {
1012
    switch (nb) {
1005
      case 1: {
1013
      case 1: {
1006
        if ( sa02code ) {
1014
        if ( sa02code ) {
1007
          SetCtrlVal(p3h,P3_FPGAPAR,line);
1015
          SetCtrlVal(p3h,P3_FPGAPAR,line);
1008
 
1016
 
1009
          break;
1017
          break;
1010
        }
1018
        }
1011
        break;
1019
        break;
1012
      }
1020
      }
1013
      case 2: {
1021
      case 2: {
1014
        if ( sa02code ) {
1022
        if ( sa02code ) {
1015
          SetCtrlVal(p3h,P3_FPGAPAR,line);
1023
          SetCtrlVal(p3h,P3_FPGAPAR,line);
1016
 
1024
 
1017
          break;
1025
          break;
1018
        }
1026
        }
1019
        if (strcmp(cmd,"param_board")==0) {
1027
        if (strcmp(cmd,"param_board")==0) {
1020
          board= asic;
1028
          board= asic;
1021
        }
1029
        }
1022
        if (strcmp(cmd,"load_global")==0) {
1030
        if (strcmp(cmd,"load_global")==0) {
1023
          row= asic+1;
1031
          row= asic+1;
Line 1036... Line 1044...
1036
          gregdata[(board*4+asic)*7+2] = greg->shapingtime;
1044
          gregdata[(board*4+asic)*7+2] = greg->shapingtime;
1037
          gregdata[(board*4+asic)*7+3] = greg->comparator;
1045
          gregdata[(board*4+asic)*7+3] = greg->comparator;
1038
          gregdata[(board*4+asic)*7+4] = greg->vrdrive;
1046
          gregdata[(board*4+asic)*7+4] = greg->vrdrive;
1039
          gregdata[(board*4+asic)*7+5] = greg->monitor;
1047
          gregdata[(board*4+asic)*7+5] = greg->monitor;
1040
          gregdata[(board*4+asic)*7+6] = greg->id;
1048
          gregdata[(board*4+asic)*7+6] = greg->id;
1041
 
1049
 
1042
          break;
1050
          break;
1043
        }
1051
        }
1044
        break;
1052
        break;
1045
      }
1053
      }
1046
      case 3: {
1054
      case 3: {
1047
        if ( sa02code) {
1055
        if ( sa02code) {
1048
          SetCtrlVal(p3h,P3_FPGAPAR,line);
1056
          SetCtrlVal(p3h,P3_FPGAPAR,line);
Line 1068... Line 1076...
1068
          greg->comparator = gval;
1076
          greg->comparator = gval;
1069
          break;
1077
          break;
1070
        }
1078
        }
1071
        if (strcmp(cmd,"vrdrive")==0)     {
1079
        if (strcmp(cmd,"vrdrive")==0)     {
1072
          greg->vrdrive = gval;
1080
          greg->vrdrive = gval;
1073
          break;
1081
          break;
1074
        }
1082
        }
1075
        if (strcmp(cmd,"monitor")==0)     {
1083
        if (strcmp(cmd,"monitor")==0)     {
1076
          greg->monitor = gval;
1084
          greg->monitor = gval;
1077
          break;
1085
          break;
1078
        }
1086
        }
1079
        if (strcmp(cmd,"load_ch")==0)   {
1087
        if (strcmp(cmd,"load_ch")==0)   {
Line 1100... Line 1108...
1100
          cdata=0;
1108
          cdata=0;
1101
          break;
1109
          break;
1102
        }
1110
        }
1103
        if (strcmp(cmd,"select")==0)    {
1111
        if (strcmp(cmd,"select")==0)    {
1104
          sa02Printf ("%s not implemeted yet\n", cmd);
1112
          sa02Printf ("%s not implemeted yet\n", cmd);
1105
          break;
1113
          break;
1106
        }
1114
        }
1107
        break;
1115
        break;
1108
      }
1116
      }
1109
      case 4: {
1117
      case 4: {
1110
        if (strcmp(cmd,"param_ch")==0)    {
1118
        if (strcmp(cmd,"param_ch")==0)    {
1111
          cdata = 0;
1119
          cdata = 0;
1112
          break;
1120
          break;
1113
        }
1121
        }
1114
        if (strcmp(cmd,"decaytime")==0)  {
1122
        if (strcmp(cmd,"decaytime")==0)  {
1115
          creg->decaytime = cval;
1123
          creg->decaytime = cval;
1116
          break;
1124
          break;
1117
        }
1125
        }
1118
        if (strcmp(cmd,"offset")==0)     {
1126
        if (strcmp(cmd,"offset")==0)     {
1119
          creg->offset = cval;
1127
          creg->offset = cval;
1120
          break;
1128
          break;
1121
        }
1129
        }
1122
        if (strcmp(cmd,"fineadj_unipol")==0) {
1130
        if (strcmp(cmd,"fineadj_unipol")==0) {
1123
          creg->fineadj_unipol = cval;
1131
          creg->fineadj_unipol = cval;
1124
          break;
1132
          break;
1125
        }
1133
        }
1126
        if (strcmp(cmd,"fineadj_diff")==0) {
1134
        if (strcmp(cmd,"fineadj_diff")==0) {
1127
          creg->fineadj_diff   = cval;
1135
          creg->fineadj_diff   = cval;
1128
          break;
1136
          break;
1129
        }
1137
        }
1130
        if (strcmp(cmd,"tpenb")==0)      {
1138
        if (strcmp(cmd,"tpenb")==0)      {
1131
          creg->tpenb = cval;
1139
          creg->tpenb = cval;
1132
          break;
1140
          break;
1133
        }
1141
        }
Line 1162... Line 1170...
1162
    case MENU_OPERATIO_LASER:
1170
    case MENU_OPERATIO_LASER:
1163
      DisplayPanel(p5h);
1171
      DisplayPanel(p5h);
1164
      break;
1172
      break;
1165
    case MENU_MINIRICH:
1173
    case MENU_MINIRICH:
1166
      DisplayPanel(p6h);
1174
      DisplayPanel(p6h);
1167
      break;  
1175
      break;
1168
    case MENU_OPERATIO_EXIT :
1176
    case MENU_OPERATIO_EXIT :
1169
      quit(0,0,NULL,0,0);
1177
      quit(0,0,NULL,0,0);
1170
      exit(0);
1178
      exit(0);
1171
      //loop_on=0;
1179
      //loop_on=0;
1172
      break;
1180
      break;
Line 1210... Line 1218...
1210
  told=t;
1218
  told=t;
1211
  for ( j=0; j< neve; j++) {
1219
  for ( j=0; j< neve; j++) {
1212
    do {
1220
    do {
1213
      if (sendswtrg==1) Sa02SoftwareTrigger();
1221
      if (sendswtrg==1) Sa02SoftwareTrigger();
1214
      nb  = sa02Read(mask, data );
1222
      nb  = sa02Read(mask, data );
-
 
1223
    }
1215
    } while  ( nb==0 && !ctrl_c);
1224
    while  ( nb==0 && !ctrl_c);
1216
    if (nb==0)  sa02Printf("nb==0 LINE=%d\n",__LINE__);
1225
    if (nb==0)  sa02Printf("nb==0 LINE=%d\n",__LINE__);
1217
 
1226
 
1218
    if (ctrl_c==1) break;
1227
    if (ctrl_c==1) break;
1219
 
1228
 
1220
    for (ch=0; ch<144*4; ch++) {
1229
    for (ch=0; ch<144*4; ch++) {
Line 1253... Line 1262...
1253
      GetCtrlVal(p1h,P1_PLOTEACHEVENT, &ploteachevent);
1262
      GetCtrlVal(p1h,P1_PLOTEACHEVENT, &ploteachevent);
1254
      SetCtrlVal(p1h,P1_CUREVE, j);
1263
      SetCtrlVal(p1h,P1_CUREVE, j);
1255
      ProcessSystemEvents ();
1264
      ProcessSystemEvents ();
1256
      ProcessSystemEvents ();
1265
      ProcessSystemEvents ();
1257
    }
1266
    }
1258
 
1267
 
1259
    told=t;
1268
    told=t;
1260
 
1269
 
1261
  }
1270
  }
1262
 
1271
 
1263
  plot2d(h2, nbit);
1272
  plot2d(h2, nbit);
1264
  SetCtrlVal(p1h,P1_CUREVE, j);
1273
  SetCtrlVal(p1h,P1_CUREVE, j);
1265
 
1274
 
1266
  return 0;
1275
  return 0;
1267
}
1276
}
1268
 
1277
 
1269
int CVICALLBACK LoadParameters (int panel, int control, int event,
1278
int CVICALLBACK LoadParameters (int panel, int control, int event,
1270
                                void *callbackData, int eventData1, int eventData2) {
1279
                                void *callbackData, int eventData1, int eventData2) {
1271
  char fname[0xFF];
1280
  char fname[0xFF];
1272
  uint16_t mask;
1281
  uint16_t mask;
1273
  switch (event) {
1282
  switch (event) {
1274
    case EVENT_COMMIT:
1283
    case EVENT_COMMIT:
1275
      mask=GetConnectedFebMask();
1284
      mask=GetConnectedFebMask();
1276
      sa02Printf("LoadParameters 0x%0x\n", mask);
1285
      sa02Printf("LoadParameters 0x%0x\n", mask);
1277
      GetCtrlVal(p3h, P3_INPUTFILE, fname);
1286
      GetCtrlVal(p3h, P3_INPUTFILE, fname);
1278
      GetCtrlVal(p1h,P1_BOARDTYPE,&sa02BoardType);
1287
      GetCtrlVal(p1h,P1_BOARDTYPE,&sa02BoardType);
Line 1561... Line 1570...
1561
            SetCtrlVal(p1h,P1_SETSINGLEVALUE,k);
1570
            SetCtrlVal(p1h,P1_SETSINGLEVALUE,k);
1562
            SetCtrlVal(p1h,P1_CUREVE,k);
1571
            SetCtrlVal(p1h,P1_CUREVE,k);
1563
            retval=sa02Cmd(board, FEB_VTH1 , k  , chip, channel ,1, response);
1572
            retval=sa02Cmd(board, FEB_VTH1 , k  , chip, channel ,1, response);
1564
            val=sa02Cmd(board, FEB_ADC_READ, data, chip, channel ,1,response);
1573
            val=sa02Cmd(board, FEB_ADC_READ, data, chip, channel ,1,response);
1565
            if (sa02BoardType>2)
1574
            if (sa02BoardType>2)
1566
              doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
1575
              doubleval = sa02adc2Vm(val);
1567
            else
1576
            else
-
 
1577
              doubleval = sa02adc2V(val);
-
 
1578
//              doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
-
 
1579
//           else
1568
              doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
1580
//              doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
1569
 
-
 
1570
 
-
 
1571
            H1DFillBin(h1+board, k, doubleval);
1581
            H1DFillBin(h1+board, k, doubleval);
1572
            if (t!=told || k==kmax-1 ||k==0 ) {
1582
            if (t!=told || k==kmax-1 ||k==0 ) {
1573
              H1DDraw(h1+board,p1h, P1_GRAPH, &phandle[board]);
1583
              H1DDraw(h1+board,p1h, P1_GRAPH, &phandle[board]);
1574
              sa02Printf("[%d] set VTH1=%d  ADC(VTH1)= %6.3f V\n",board, k,  doubleval);
1584
              sa02Printf("[%d] set VTH1=%d  ADC(VTH1)= %6.3f V\n",board, k,  doubleval);
1575
              SetCtrlVal(p1h,P1_CUREVE, k);
1585
              SetCtrlVal(p1h,P1_CUREVE, k);
Line 1659... Line 1669...
1659
      }
1669
      }
1660
    }
1670
    }
1661
    switch (cmd & (~ FEB_RO)) {
1671
    switch (cmd & (~ FEB_RO)) {
1662
      case FEB_ADC_READ:
1672
      case FEB_ADC_READ:
1663
      case FEB_ADC_RESET:
1673
      case FEB_ADC_RESET:
-
 
1674
        doubleval = sa02adc2V(val);
1664
        doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
1675
//        doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
1665
        sa02Printf("ADC %f, 0x%08x\n", doubleval, val ) ;
1676
        sa02Printf("ADC %f, 0x%08x\n", doubleval, val ) ;
1666
        break;
1677
        break;
1667
      case FEB_TMON1:
1678
      case FEB_TMON1:
1668
      case FEB_TMON0:
1679
      case FEB_TMON0:
1669
        doubleval = ( (val >>2 ) & 0xFFF ) * 0.0625;
1680
        doubleval = ( (val >>2 ) & 0xFFF ) * 0.0625;
Line 1680... Line 1691...
1680
        else
1691
        else
1681
          val=0x30;
1692
          val=0x30;
1682
        val=sa02Cmd(board, FEB_MUX, val, 0, 0 ,1,response);
1693
        val=sa02Cmd(board, FEB_MUX, val, 0, 0 ,1,response);
1683
        val=sa02Cmd(board, FEB_ADC_READ, 0, 0, 0, 1,response);
1694
        val=sa02Cmd(board, FEB_ADC_READ, 0, 0, 0, 1,response);
1684
        if (sa02BoardType>2)
1695
        if (sa02BoardType>2)
-
 
1696
          doubleval = sa02adc2Vm(val);
1685
          doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
1697
//          doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
1686
        else
1698
        else
-
 
1699
          doubleval = sa02adc2V(val);
1687
          doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
1700
//          doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
1688
        sa02Printf("%5d %6.3f\n",data, doubleval);
1701
        sa02Printf("%5d %6.3f\n",data, doubleval);
1689
        break;
1702
        break;
1690
      case SA0x_ASIC0_GREG:
1703
      case SA0x_ASIC0_GREG:
1691
        if (cmd & FEB_RO) {
1704
        if (cmd & FEB_RO) {
1692
          sa02PrintGREG(&val,"Returned GREG data->");
1705
          sa02PrintGREG(&val,"Returned GREG data->");
1693
        }
1706
        }
1694
        break;
1707
        break;
1695
      case SA0x_ASIC0_CREG:
1708
      case SA0x_ASIC0_CREG:
1696
        if (cmd & FEB_RO) {
1709
        if (cmd & FEB_RO) {
Line 1806... Line 1819...
1806
            id= P1_GRAPHY;
1819
            id= P1_GRAPHY;
1807
            sprintf(name,"Y");
1820
            sprintf(name,"Y");
1808
            break;
1821
            break;
1809
        }
1822
        }
1810
        h2=0;
1823
        h2=0;
-
 
1824
      }
1811
      } else {
1825
      else {
1812
        switch (control) {
1826
        switch (control) {
1813
          case P2_PRINTXY:
1827
          case P2_PRINTXY:
1814
            id= P2_GRAPH_1;
1828
            id= P2_GRAPH_1;
1815
            sprintf(name,"XY");
1829
            sprintf(name,"XY");
1816
            break;
1830
            break;
1817
        }
1831
        }
1818
        h2=1;
1832
        h2=1;
1819
      }
1833
      }
1820
      GetSystemDate (&month,&day ,&year );
1834
      GetSystemDate (&month,&day ,&year );
1821
      GetSystemTime(&hours, &minutes, &seconds);
1835
      GetSystemTime(&hours, &minutes, &seconds);
1822
      if (id>=0) {
1836
      if (id>=0) {
1823
        if( ( (panel == p1h)&&(control ==  P1_PRINT2D) ) || ((panel == p2h)&&(control ==  P2_GRAPH_1))) {
1837
        if( ( (panel == p1h)&&(control ==  P1_PRINT2D) ) || ((panel == p2h)&&(control ==  P2_GRAPH_1))) {
1824
          sprintf(dfile ,"data/%d_%d_%d_%d_%d_%s.th2d",year,month,day,hours,minutes, name );
1838
          sprintf(dfile ,"data/%d_%d_%d_%d_%d_%s.th2d",year,month,day,hours,minutes, name );
1825
          H2DWrite(h2,dfile,"wb");
1839
          H2DWrite(h2,dfile,"wb");
1826
          sa02Printf("sizeof H2D %d \n",sizeof(H2D));
1840
          sa02Printf("sizeof H2D %d \n",sizeof(H2D));
1827
          sa02Printf("H2D image saved as %s\n", dfile);
1841
          sa02Printf("H2D image saved as %s\n", dfile);
1828
          sprintf(name ,"C:\\root\\bin\\root.exe ..\\macros\\H2Dload.cxx(\\\"%s\\\")", dfile);
1842
          sprintf(name ,"C:\\root\\bin\\root.exe ..\\macros\\H2Dload.cxx(\\\"%s\\\")", dfile);
1829
          LaunchExecutable(name);
1843
          LaunchExecutable(name);
-
 
1844
        }
1830
        } else {
1845
        else {
1831
          sprintf(dfile ,"data/%d_%d_%d_%d_%d_%s.bmp",year,month,day,hours,minutes, name );
1846
          sprintf(dfile ,"data/%d_%d_%d_%d_%d_%s.bmp",year,month,day,hours,minutes, name );
1832
          SaveCtrlDisplayToFile (panel,id, 0, -1, -1, dfile);
1847
          SaveCtrlDisplayToFile (panel,id, 0, -1, -1, dfile);
1833
          sa02Printf("bmp image saved as %s\n", dfile);
1848
          sa02Printf("bmp image saved as %s\n", dfile);
1834
        }
1849
        }
1835
      }
1850
      }
Line 1955... Line 1970...
1955
 
1970
 
1956
 
1971
 
1957
        GetCtrlVal(panel,ctrlID, &ch);
1972
        GetCtrlVal(panel,ctrlID, &ch);
1958
        if (ch) {
1973
        if (ch) {
1959
          H3DDrawSliceXY(100+board,ch-1,panel,graph, plot);
1974
          H3DDrawSliceXY(100+board,ch-1,panel,graph, plot);
-
 
1975
        }
1960
        } else {
1976
        else {
1961
          H2DDraw(100+board,panel,graph, plot);
1977
          H2DDraw(100+board,panel,graph, plot);
1962
        }
1978
        }
1963
      }
1979
      }
1964
      break;
1980
      break;
1965
  }
1981
  }
Line 1988... Line 2004...
1988
      monrec.status[ii] = buf[0];   //status
2004
      monrec.status[ii] = buf[0];   //status
1989
      monrec.vmon[ii] = buf[1]*1000;//zapisano v mV
2005
      monrec.vmon[ii] = buf[1]*1000;//zapisano v mV
1990
      monrec.imon[ii] = buf[2]*1000;//zapisano v nA
2006
      monrec.imon[ii] = buf[2]*1000;//zapisano v nA
1991
      monrec.vset[ii] = buf[3]*1000;//zapisano v mV
2007
      monrec.vset[ii] = buf[3]*1000;//zapisano v mV
1992
      monrec.iset[ii] = buf[4]*1000;//zapisano v nA
2008
      monrec.iset[ii] = buf[4]*1000;//zapisano v nA
-
 
2009
    }
1993
    } else {
2010
    else {
1994
      buf[0]=(unsigned short) (channels[ii]<<8) | ReadStatus;
2011
      buf[0]=(unsigned short) (channels[ii]<<8) | ReadStatus;
1995
      if (gCAEN_V288) {
2012
      if (gCAEN_V288) {
1996
        V288_Send(0,SYS403mid,1,buf);
2013
        V288_Send(0,SYS403mid,1,buf);
1997
        retval=V288_Receive(0,255,buf);
2014
        retval=V288_Receive(0,255,buf);
1998
      }
2015
      }
Line 2006... Line 2023...
2006
          V288_Send(0,SYS403mid,1,buf);
2023
          V288_Send(0,SYS403mid,1,buf);
2007
          retval=V288_Receive(0,255,buf);
2024
          retval=V288_Receive(0,255,buf);
2008
        }
2025
        }
2009
        vset[ii] = monrec.vset[ii] = buf[7]*10;//zapisano v mV
2026
        vset[ii] = monrec.vset[ii] = buf[7]*10;//zapisano v mV
2010
        iset[ii] = monrec.iset[ii] = buf[10]*10;//zapisano v nA
2027
        iset[ii] = monrec.iset[ii] = buf[10]*10;//zapisano v nA
2011
      }
2028
      }
2012
      monrec.vset[ii] = vset[ii];//zapisano v mV
2029
      monrec.vset[ii] = vset[ii];//zapisano v mV
2013
      monrec.iset[ii] = iset[ii];//zapisano v nA
2030
      monrec.iset[ii] = iset[ii];//zapisano v nA
2014
    }
2031
    }
2015
    //sa02Printf("%04x \t %d \t %d \t %d \t %d *\n",monrec.status[ii],monrec.vmon[ii],monrec.vset[ii],monrec.imon[ii],monrec.iset[ii]);
2032
    //sa02Printf("%04x \t %d \t %d \t %d \t %d *\n",monrec.status[ii],monrec.vmon[ii],monrec.vset[ii],monrec.imon[ii],monrec.iset[ii]);
2016
  }
2033
  }
Line 2069... Line 2086...
2069
 
2086
 
2070
  SetCtrlAttribute (p2h, P2_DAQ, ATTR_DIMMED, 1);
2087
  SetCtrlAttribute (p2h, P2_DAQ, ATTR_DIMMED, 1);
2071
  ctrl_c=0;
2088
  ctrl_c=0;
2072
 
2089
 
2073
  GetCtrlVal(p1h,P1_BOARDTYPE,&sa02BoardType);
2090
  GetCtrlVal(p1h,P1_BOARDTYPE,&sa02BoardType);
2074
 
2091
 
2075
  GetCtrlVal (p1h, P1_SERIAL_1, serial[0]);
2092
  GetCtrlVal (p1h, P1_SERIAL_1, serial[0]);
2076
  GetCtrlVal (p1h, P1_SERIAL_2, serial[1]);
2093
  GetCtrlVal (p1h, P1_SERIAL_2, serial[1]);
2077
  GetCtrlVal (p1h, P1_SERIAL_3, serial[2]);
2094
  GetCtrlVal (p1h, P1_SERIAL_3, serial[2]);
2078
  GetCtrlVal (p1h, P1_SERIAL_4, serial[3]);
2095
  GetCtrlVal (p1h, P1_SERIAL_4, serial[3]);
2079
 
2096
 
Line 2100... Line 2117...
2100
  GetCtrlVal (p2h, P2_XC,  &x0);
2117
  GetCtrlVal (p2h, P2_XC,  &x0);
2101
  GetCtrlVal (p2h, P2_YC,  &y0);
2118
  GetCtrlVal (p2h, P2_YC,  &y0);
2102
 
2119
 
2103
  GetCtrlVal (p2h, P2_DIRECTION,  &runrec.direction);
2120
  GetCtrlVal (p2h, P2_DIRECTION,  &runrec.direction);
2104
 
2121
 
2105
 
2122
 
2106
  SetCtrlAttribute(p1h,P1_TRGHVMON,ATTR_ENABLED,1);
2123
  SetCtrlAttribute(p1h,P1_TRGHVMON,ATTR_ENABLED,1);
2107
  hvmonFirst = 0;
2124
  hvmonFirst = 0;
2108
 
2125
 
2109
 
2126
 
2110
  GetCtrlVal(p1h,P1_SENDSWTRIG,&sendswtrg);
2127
  GetCtrlVal(p1h,P1_SENDSWTRIG,&sendswtrg);
Line 2129... Line 2146...
2129
    GetCtrlVal (p2h, P2_NEWF, &fmax);
2146
    GetCtrlVal (p2h, P2_NEWF, &fmax);
2130
    fmax*=1000000;//fmax in Mega Bytes
2147
    fmax*=1000000;//fmax in Mega Bytes
2131
  }
2148
  }
2132
  time (&t0);
2149
  time (&t0);
2133
  sa02Printf("---->daq_scan\n");
2150
  sa02Printf("---->daq_scan\n");
2134
 
2151
 
2135
  if (dsave) {
2152
  if (dsave) {
2136
    sprintf(dfile,"%s_file%02d.dat",dfile0,fcount);
2153
    sprintf(dfile,"%s_file%02d.dat",dfile0,fcount);
2137
    //gFp = fopen (dfile, "ab");
2154
    //gFp = fopen (dfile, "ab");
2138
    gFp = fopen (dfile, "ab");
2155
    gFp = fopen (dfile, "ab");
2139
    if (gFp==NULL) sa02Printf("----> !!! gFp==NULL !!!\n");
2156
    if (gFp==NULL) sa02Printf("----> !!! gFp==NULL !!!\n");
2140
    if (ferror (gFp)) sa02Printf("----> !!! ferror (gFp) after fopen !!!\n");    
2157
    if (ferror (gFp)) sa02Printf("----> !!! ferror (gFp) after fopen !!!\n");
2141
    //time ((time_t *) &runrec.time);
2158
    //time ((time_t *) &runrec.time);
2142
    time (&cas);
2159
    time (&cas);
2143
    runrec.time = (uint32_t) cas;
2160
    runrec.time = (uint32_t) cas;
2144
    status = (int) fwrite (&runrec, 1, runrec.len, gFp);
2161
    status = (int) fwrite (&runrec, 1, runrec.len, gFp);
2145
    if(status != runrec.len) sa02Printf("----> !!! status != runrec.len (= %d) !!!\n", status);    
2162
    if(status != runrec.len) sa02Printf("----> !!! status != runrec.len (= %d) !!!\n", status);
2146
    if (ferror (gFp)) sa02Printf("----> !!! ferror (gFp) = %d !!!\n", ferror (gFp));  
2163
    if (ferror (gFp)) sa02Printf("----> !!! ferror (gFp) = %d !!!\n", ferror (gFp));
2147
   
2164
 
2148
  }
2165
  }
2149
 
2166
 
2150
 
2167
 
2151
  for (i=0; i<4; i++) {
2168
  for (i=0; i<4; i++) {
2152
    sprintf(title,"HAPD%d Surface Scan single channels", i);
2169
    sprintf(title,"HAPD%d Surface Scan single channels", i);
Line 2156... Line 2173...
2156
    sprintf(hname,"hxy%d_sum", i);
2173
    sprintf(hname,"hxy%d_sum", i);
2157
    H2DInit(hxy+i,hname,runrec.serial, runrec.nx,runrec.x0, runrec.dx,runrec.ny,runrec.y0, runrec.dy);
2174
    H2DInit(hxy+i,hname,runrec.serial, runrec.nx,runrec.x0, runrec.dx,runrec.ny,runrec.y0, runrec.dy);
2158
    if (scanunitsx) {
2175
    if (scanunitsx) {
2159
      H2DSetTitleX(hxy+i,"x (channels)");
2176
      H2DSetTitleX(hxy+i,"x (channels)");
2160
      H3DSetTitleX(hxy+i,"x (channels)");
2177
      H3DSetTitleX(hxy+i,"x (channels)");
-
 
2178
    }
2161
    } else {
2179
    else {
2162
      H2DSetTitleX(hxy+i,"x (stage steps)");
2180
      H2DSetTitleX(hxy+i,"x (stage steps)");
2163
      H3DSetTitleX(hxy+i,"x (stage steps)");
2181
      H3DSetTitleX(hxy+i,"x (stage steps)");
2164
    }
2182
    }
2165
    if (scanunitsy) {
2183
    if (scanunitsy) {
2166
      H2DSetTitleY(hxy+i,"y (channels)");
2184
      H2DSetTitleY(hxy+i,"y (channels)");
2167
      H3DSetTitleY(hxy+i,"y (channels)");
2185
      H3DSetTitleY(hxy+i,"y (channels)");
-
 
2186
    }
2168
    } else {
2187
    else {
2169
      H2DSetTitleY(hxy+i,"y (stage steps)");
2188
      H2DSetTitleY(hxy+i,"y (stage steps)");
2170
      H3DSetTitleY(hxy+i,"y (stage steps)");
2189
      H3DSetTitleY(hxy+i,"y (stage steps)");
2171
    }
2190
    }
2172
 
2191
 
2173
  }
2192
  }
2174
  if (runrec.direction) {
2193
  if (runrec.direction) {
2175
    ny = runrec.ny;
2194
    ny = runrec.ny;
2176
    nx = runrec.nx;
2195
    nx = runrec.nx;
-
 
2196
  }
2177
  } else {
2197
  else {
2178
    ny = runrec.nx;
2198
    ny = runrec.nx;
2179
    nx = runrec.ny;
2199
    nx = runrec.ny;
2180
  }
2200
  }
2181
  rdata = malloc(sizeof(uint32_t)*maxsize);
2201
  rdata = malloc(sizeof(uint32_t)*maxsize);
2182
 
2202
 
Line 2192... Line 2212...
2192
      posrec.iy = iy;
2212
      posrec.iy = iy;
2193
      posrec.yset=runrec.y0+posrec.iy*runrec.dy;
2213
      posrec.yset=runrec.y0+posrec.iy*runrec.dy;
2194
      if (scanunitsy) {
2214
      if (scanunitsy) {
2195
        if (posrec.yset>5) {
2215
        if (posrec.yset>5) {
2196
          addgap=gapy * fx;
2216
          addgap=gapy * fx;
-
 
2217
        }
2197
        } else {
2218
        else {
2198
          addgap=0;
2219
          addgap=0;
2199
        }
2220
        }
2200
        posrec.yset = (int32_t)(y0+dy *fx * posrec.yset + addgap);
2221
        posrec.yset = (int32_t)(y0+dy *fx * posrec.yset + addgap);
2201
      }
2222
      }
2202
      if (gMIKRO_Y) {
2223
      if (gMIKRO_Y) {
Line 2205... Line 2226...
2205
        sa02Printf("->MIKRO_MoveTo (2, y);%d\n",posrec.yset);
2226
        sa02Printf("->MIKRO_MoveTo (2, y);%d\n",posrec.yset);
2206
      }
2227
      }
2207
 
2228
 
2208
      SetCtrlVal (p2h, P2_Y, posrec.yset);
2229
      SetCtrlVal (p2h, P2_Y, posrec.yset);
2209
      SetCtrlVal (p2h, P2_IY, posrec.iy);
2230
      SetCtrlVal (p2h, P2_IY, posrec.iy);
-
 
2231
    }
2210
    } else {
2232
    else {
2211
      posrec.ix = iy;
2233
      posrec.ix = iy;
2212
      posrec.xset=runrec.x0+posrec.ix*runrec.dx;
2234
      posrec.xset=runrec.x0+posrec.ix*runrec.dx;
2213
      if (scanunitsx) {
2235
      if (scanunitsx) {
2214
        if (posrec.xset>5) {
2236
        if (posrec.xset>5) {
2215
          addgap=gapx * fx;
2237
          addgap=gapx * fx;
-
 
2238
        }
2216
        } else {
2239
        else {
2217
          addgap=0;
2240
          addgap=0;
2218
        }
2241
        }
2219
        posrec.xset =  (int32_t)(x0+dx *fx * posrec.xset + addgap);
2242
        posrec.xset =  (int32_t)(x0+dx *fx * posrec.xset + addgap);
2220
      }
2243
      }
2221
      if (gMIKRO_Y) {
2244
      if (gMIKRO_Y) {
Line 2233... Line 2256...
2233
        posrec.ix = ix;
2256
        posrec.ix = ix;
2234
        posrec.xset=runrec.x0+posrec.ix*runrec.dx;
2257
        posrec.xset=runrec.x0+posrec.ix*runrec.dx;
2235
        if (scanunitsx) {
2258
        if (scanunitsx) {
2236
          if (posrec.xset>5) {
2259
          if (posrec.xset>5) {
2237
            addgap=gapx * fx;
2260
            addgap=gapx * fx;
-
 
2261
          }
2238
          } else {
2262
          else {
2239
            addgap=0;
2263
            addgap=0;
2240
          }
2264
          }
2241
          posrec.xset =  (int32_t)(x0+dx *fx * posrec.xset + addgap);
2265
          posrec.xset =  (int32_t)(x0+dx *fx * posrec.xset + addgap);
2242
        }
2266
        }
2243
        if (gMIKRO_X) {
2267
        if (gMIKRO_X) {
2244
          //sa02Printf("MIKRO_MoveTo (1, x);%d\n",posrec.x);
2268
          //sa02Printf("MIKRO_MoveTo (1, x);%d\n",posrec.x);
2245
          MIKRO_MoveTo (MIKRO_X, posrec.xset);
2269
          MIKRO_MoveTo (MIKRO_X, posrec.xset);
2246
          sa02Printf("->MIKRO_MoveTo (1, x);%d\n",posrec.xset);
2270
          sa02Printf("->MIKRO_MoveTo (1, x);%d\n",posrec.xset);
2247
        }
2271
        }
2248
        SetCtrlVal (p2h, P2_X, posrec.xset);
2272
        SetCtrlVal (p2h, P2_X, posrec.xset);
2249
        SetCtrlVal (p2h, P2_IX, posrec.ix);
2273
        SetCtrlVal (p2h, P2_IX, posrec.ix);
-
 
2274
      }
2250
      } else {
2275
      else {
2251
        posrec.iy = ix;
2276
        posrec.iy = ix;
2252
        posrec.yset=runrec.y0+posrec.iy*runrec.dy;
2277
        posrec.yset=runrec.y0+posrec.iy*runrec.dy;
2253
        if (scanunitsy) {
2278
        if (scanunitsy) {
2254
          if (posrec.yset>5) {
2279
          if (posrec.yset>5) {
2255
            addgap=gapy * fx;
2280
            addgap=gapy * fx;
-
 
2281
          }
2256
          } else {
2282
          else {
2257
            addgap=0;
2283
            addgap=0;
2258
          }
2284
          }
2259
          posrec.yset =  (int32_t)(y0+dy *fx * posrec.yset + addgap);
2285
          posrec.yset =  (int32_t)(y0+dy *fx * posrec.yset + addgap);
2260
        }
2286
        }
2261
        if (gMIKRO_X) {
2287
        if (gMIKRO_X) {
Line 2273... Line 2299...
2273
        if (fmax && (ftell(gFp) > fmax)) {
2299
        if (fmax && (ftell(gFp) > fmax)) {
2274
          fcount+=1;
2300
          fcount+=1;
2275
          sprintf(dfile,"%s_file%02d.dat",dfile0,fcount);
2301
          sprintf(dfile,"%s_file%02d.dat",dfile0,fcount);
2276
          fclose(gFp);
2302
          fclose(gFp);
2277
          gFp = fopen (dfile, "ab");
2303
          gFp = fopen (dfile, "ab");
2278
        }
2304
        }
2279
        time (&cas);
2305
        time (&cas);
2280
        posrec.time = (uint32_t) cas;
2306
        posrec.time = (uint32_t) cas;
2281
        status = (int) fwrite (&posrec, 1, posrec.len, gFp);
2307
        status = (int) fwrite (&posrec, 1, posrec.len, gFp);
2282
      }
2308
      }
2283
 
2309
 
Line 2286... Line 2312...
2286
 
2312
 
2287
      for (board=0; board<4; board++) {
2313
      for (board=0; board<4; board++) {
2288
        if (mask & (1<<board)) {
2314
        if (mask & (1<<board)) {
2289
          sa02Cmd( board, FEB_VTH1, runrec.ped, 0,0,1,response);
2315
          sa02Cmd( board, FEB_VTH1, runrec.ped, 0,0,1,response);
2290
          Sa02TestPulseEnable(board,tpenb); // Enable/disable test pulse
2316
          Sa02TestPulseEnable(board,tpenb); // Enable/disable test pulse
2291
        }
2317
        }
2292
      }
2318
      }
2293
 
2319
 
2294
      Sa02SetNeve(runrec.nev);
2320
      Sa02SetNeve(runrec.nev);
2295
 
2321
 
2296
      evtrec.nev=1;
2322
      evtrec.nev=1;
2297
 
2323
 
2298
 
2324
 
2299
      sa02Reset();
2325
      sa02Reset();
2300
 
2326
 
2301
      if (ctrl_c) break;
2327
      if (ctrl_c) break;
2302
 
2328
 
2303
      if ( (count+2+dsize)  >= maxsize) {
2329
      if ( (count+2+dsize)  >= maxsize) {
2304
        maxsize*=2;
2330
        maxsize*=2;
2305
        sa02Printf("Increasing data buffer to %d elements\n", maxsize);
2331
        sa02Printf("Increasing data buffer to %d elements\n", maxsize);
2306
        rdata=realloc(rdata ,sizeof(uint32_t)*maxsize);
2332
        rdata=realloc(rdata ,sizeof(uint32_t)*maxsize);
2307
      }
2333
      }
2308
 
2334
 
2309
      data = &rdata[count+2];
2335
      data = &rdata[count+2];
2310
      do {
2336
      do {
2311
        //int k;
2337
        //int k;
2312
        //uint32_t inputtriggers;
2338
        //uint32_t inputtriggers;
Line 2315... Line 2341...
2315
        /*
2341
        /*
2316
        for (k=0; k<4; k++)  c[k] = Sa02GetCounter ( k ,&e[k]);
2342
        for (k=0; k<4; k++)  c[k] = Sa02GetCounter ( k ,&e[k]);
2317
        for (k=0; k<4; k++)  sa02Printf(" CNTR%d=%d (ERR=%d)\t",k,c[k],e[k]);
2343
        for (k=0; k<4; k++)  sa02Printf(" CNTR%d=%d (ERR=%d)\t",k,c[k],e[k]);
2318
        sa02Printf("\nsa02Read bytes =  %d mask=%d neve=%d (%d # %d)\n", nb, mask, runrec.nev, Sa02GetNeve( &inputtriggers ) , inputtriggers);
2344
        sa02Printf("\nsa02Read bytes =  %d mask=%d neve=%d (%d # %d)\n", nb, mask, runrec.nev, Sa02GetNeve( &inputtriggers ) , inputtriggers);
2319
        */
2345
        */
-
 
2346
      }
2320
      } while  ( nb==0 && !ctrl_c);
2347
      while  ( nb==0 && !ctrl_c);
2321
 
2348
 
2322
 
2349
 
2323
 
2350
 
2324
      if (sa02TimerOut || nb==0) sa02Printf("sa02TimerOut || nb==0\n");
2351
      if (sa02TimerOut || nb==0) sa02Printf("sa02TimerOut || nb==0\n");
2325
 
2352
 
2326
      for (ich=0; ich<144*4; ich++) {
2353
      for (ich=0; ich<144*4; ich++) {
2327
        int brd = ich/144;
2354
        int brd = ich/144;
2328
        int xch   = 143 - ich%144;
2355
        int xch   = 143 - ich%144;
Line 2334... Line 2361...
2334
        }
2361
        }
2335
      }
2362
      }
2336
      sa02Printf("max couts = %d %d %d %d\n", xyval[0],xyval[1],xyval[2],xyval[3]);
2363
      sa02Printf("max couts = %d %d %d %d\n", xyval[0],xyval[1],xyval[2],xyval[3]);
2337
      if (nb>=0) {
2364
      if (nb>=0) {
2338
        count+=module_header(0x3,&rdata[count],nb/sizeof(uint32_t));
2365
        count+=module_header(0x3,&rdata[count],nb/sizeof(uint32_t));
2339
      }
2366
      }
2340
 
2367
 
2341
 
2368
 
2342
      /*
2369
      /*
2343
      for (ich=0; ich<144; ich++) {
2370
      for (ich=0; ich<144; ich++) {
2344
 
2371
 
2345
      //          uint32_t mask=0xFF;
2372
      //          uint32_t mask=0xFF;
Line 2349... Line 2376...
2349
            id=(17-ich/8)+board*18;
2376
            id=(17-ich/8)+board*18;
2350
        shft=(ich%8)*4;
2377
        shft=(ich%8)*4;
2351
        if ( data[id]  & (mask <<shft)  )  {
2378
        if ( data[id]  & (mask <<shft)  )  {
2352
          H3DFillBin(hxy, posrec.ix,posrec.iy,ich,1);
2379
          H3DFillBin(hxy, posrec.ix,posrec.iy,ich,1);
2353
          H2DFillBin(hxy, posrec.ix,posrec.iy,1);
2380
          H2DFillBin(hxy, posrec.ix,posrec.iy,1);
2354
        }
2381
        }
2355
      }
2382
      }
2356
      */
2383
      */
2357
      if (dsave) {
2384
      if (dsave) {
2358
        if (Random(0,1)<fraction) {
2385
        if (Random(0,1)<fraction) {
2359
          writeevents=1;
2386
          writeevents=1;
-
 
2387
        }
2360
        } else {
2388
        else {
2361
          writeevents=0;
2389
          writeevents=0;
2362
        }
2390
        }
2363
        if (writeevents) {
2391
        if (writeevents) {
2364
          evtrec.id = EVTREC_ID;
2392
          evtrec.id = EVTREC_ID;
2365
          evtrec.len=count*sizeof(uint32_t)+ sizeof(evtrec);
2393
          evtrec.len=count*sizeof(uint32_t)+ sizeof(evtrec);
2366
 
2394
 
Line 2390... Line 2418...
2390
        EstimatedFinish(p2h, P2_PROGRESS, P2_ETA, t0, done);
2418
        EstimatedFinish(p2h, P2_PROGRESS, P2_ETA, t0, done);
2391
        GetCtrlVal(p2h,P2_CH, &ch);
2419
        GetCtrlVal(p2h,P2_CH, &ch);
2392
        for (board=0; board<4; board++) {
2420
        for (board=0; board<4; board++) {
2393
          if (ch) {
2421
          if (ch) {
2394
            H3DDrawSliceXY(hxy+board,ch,p2h, p2graph[board], &p2plothandle[board]);
2422
            H3DDrawSliceXY(hxy+board,ch,p2h, p2graph[board], &p2plothandle[board]);
-
 
2423
          }
2395
          } else {
2424
          else {
2396
            H2DDraw(hxy+board,p2h, p2graph[board], &p2plothandle[board]);
2425
            H2DDraw(hxy+board,p2h, p2graph[board], &p2plothandle[board]);
2397
          }
2426
          }
2398
        }
2427
        }
2399
        ProcessSystemEvents ();
2428
        ProcessSystemEvents ();
2400
        SetCtrlVal(p2h,P2_CEVE, i);
2429
        SetCtrlVal(p2h,P2_CEVE, i);
2401
        sa02Printf("%d events in %2.2f min (%d s) %s",ncount, (double)(t-tstart)/60.,t-tstart, ctime(&t));
2430
        sa02Printf("%d events in %2.2f min (%d s) %s",ncount, (double)(t-tstart)/60.,t-tstart, ctime(&t));
2402
 
2431
 
2403
      }
2432
      }
2404
      told=t;
2433
      told=t;
2405
 
2434
 
2406
 
2435
 
2407
 
2436
 
Line 2461... Line 2490...
2461
      monrec.status[i] = buf[0];   //status
2490
      monrec.status[i] = buf[0];   //status
2462
      monrec.vmon[i] = buf[1]*1000;//zapisano v mV
2491
      monrec.vmon[i] = buf[1]*1000;//zapisano v mV
2463
      monrec.imon[i] = buf[2]*1000;//zapisano v nA
2492
      monrec.imon[i] = buf[2]*1000;//zapisano v nA
2464
      monrec.vset[i] = buf[3]*1000;//zapisano v mV
2493
      monrec.vset[i] = buf[3]*1000;//zapisano v mV
2465
      monrec.iset[i] = buf[4]*1000;//zapisano v nA
2494
      monrec.iset[i] = buf[4]*1000;//zapisano v nA
-
 
2495
    }
2466
    } else {
2496
    else {
2467
      buf[0]=(unsigned short) (channels[i]<<8) | ReadStatus;
2497
      buf[0]=(unsigned short) (channels[i]<<8) | ReadStatus;
2468
      if (gCAEN_V288) {
2498
      if (gCAEN_V288) {
2469
        V288_Send(0,SYS403mid,1,buf);
2499
        V288_Send(0,SYS403mid,1,buf);
2470
        odg=V288_Receive(0,255,buf);
2500
        odg=V288_Receive(0,255,buf);
2471
      }
2501
      }
2472
      monrec.vmon[i] = buf[1]*10;//zapisano v mV
2502
      monrec.vmon[i] = buf[1]*10;//zapisano v mV
2473
      monrec.imon[i] = buf[2]*10;//zapisano v nA
2503
      monrec.imon[i] = buf[2]*10;//zapisano v nA
2474
      monrec.status[i] = buf[3]; //status
2504
      monrec.status[i] = buf[3]; //status
2475
      if(!hvmonFirst) {
2505
      if(!hvmonFirst) {
2476
        buf[0]=(unsigned short) (channels[i]<<8) | ReadParameters;
2506
        buf[0]=(unsigned short) (channels[i]<<8) | ReadParameters;
Line 2486... Line 2516...
2486
    }
2516
    }
2487
    sa02Printf("%04x \t %.02f V \t %d V \t\t %.02f muA \t %d muA *\n",monrec.status[i],(float)monrec.vmon[i]/1000,monrec.vset[i]/1000,(float)monrec.imon[i]/1000,monrec.iset[i]/1000);
2517
    sa02Printf("%04x \t %.02f V \t %d V \t\t %.02f muA \t %d muA *\n",monrec.status[i],(float)monrec.vmon[i]/1000,monrec.vset[i]/1000,(float)monrec.imon[i]/1000,monrec.iset[i]/1000);
2488
  }
2518
  }
2489
  time (&t1);
2519
  time (&t1);
2490
  sa02Printf("Cas izvedbe:%g s.\n",difftime(t1,t0));
2520
  sa02Printf("Cas izvedbe:%g s.\n",difftime(t1,t0));
2491
 
2521
 
2492
  return 0;
2522
  return 0;
2493
}
2523
}
2494
 
2524
 
2495
int CVICALLBACK set_dac(int OnOff) {
2525
int CVICALLBACK set_dac(int OnOff) {
2496
  int val;
2526
  int val;
2497
  char name[MAX_PATHNAME_LEN];
2527
  char name[MAX_PATHNAME_LEN];
2498
  if (OnOff) {
2528
  if (OnOff) {
2499
    GetCtrlVal (p5h, P5_DAC_ON, &val);
2529
    GetCtrlVal (p5h, P5_DAC_ON, &val);
2500
    sprintf(name ,"%s -p %d",palaser, val);
2530
    sprintf(name ,"%s -p %d",palaser, val);
2501
    sa02Printf("%s\n", name);
2531
    sa02Printf("%s\n", name);
2502
    system(name);
2532
    system(name);
2503
    GetCtrlVal (p5h, P5_FREQUENCY_ON, &val);
2533
    GetCtrlVal (p5h, P5_FREQUENCY_ON, &val);
2504
    sprintf(name ,"%s -f %d",palaser, val);
2534
    sprintf(name ,"%s -f %d",palaser, val);
2505
    sa02Printf("%s\n", name);
2535
    sa02Printf("%s\n", name);
2506
    system(name);
2536
    system(name);
-
 
2537
  }
2507
  } else {
2538
  else {
2508
    GetCtrlVal (p5h, P5_DAC_OFF, &val);
2539
    GetCtrlVal (p5h, P5_DAC_OFF, &val);
2509
    sprintf(name ,"%s -p %d",palaser, val);
2540
    sprintf(name ,"%s -p %d",palaser, val);
2510
    sa02Printf("%s\n", name);
2541
    sa02Printf("%s\n", name);
2511
    system(name);
2542
    system(name);
2512
    GetCtrlVal (p5h, P5_FREQUENCY_OFF, &val);
2543
    GetCtrlVal (p5h, P5_FREQUENCY_OFF, &val);
Line 2537... Line 2568...
2537
    if((buf[0]&0x20)&&(buf[0]&0x20)) sa02Printf("Channel is ramping up \t Vmon: %d V \t Vset: %d \t status: 0x%x\n",buf[1],buf[3],buf[0]);
2568
    if((buf[0]&0x20)&&(buf[0]&0x20)) sa02Printf("Channel is ramping up \t Vmon: %d V \t Vset: %d \t status: 0x%x\n",buf[1],buf[3],buf[0]);
2538
    else if(buf[0]&0x40) sa02Printf("Channel is ramping down \t Vmon: %d V \t Vset: %d \t status: 0x%x\n",buf[1],buf[3],buf[0]);
2569
    else if(buf[0]&0x40) sa02Printf("Channel is ramping down \t Vmon: %d V \t Vset: %d \t status: 0x%x\n",buf[1],buf[3],buf[0]);
2539
    else if(buf[0]&0x1E) {
2570
    else if(buf[0]&0x1E) {
2540
      sa02Printf("status: 0x%x\n",buf[0]);
2571
      sa02Printf("status: 0x%x\n",buf[0]);
2541
      return -1;
2572
      return -1;
-
 
2573
    }
2542
    } else  sa02Printf("status: 0x%x\n",buf[0]);
2574
    else  sa02Printf("status: 0x%x\n",buf[0]);
2543
    Delay(2);
2575
    Delay(2);
2544
    buf[0]=(unsigned short) (channel<<8) | ReadOperationalParam;
2576
    buf[0]=(unsigned short) (channel<<8) | ReadOperationalParam;
2545
    V288_Send(0,N470mid,1,buf);
2577
    V288_Send(0,N470mid,1,buf);
2546
    ret=V288_Receive(0,255,buf);
2578
    ret=V288_Receive(0,255,buf);
2547
  }
2579
  }
Line 2709... Line 2741...
2709
  LoadParameters(p3h, P3_LOADPAR, EVENT_COMMIT, NULL, 0, 0);    // load parameters from defaul.param to FEB
2741
  LoadParameters(p3h, P3_LOADPAR, EVENT_COMMIT, NULL, 0, 0);    // load parameters from defaul.param to FEB
2710
  ProcessSystemEvents ();
2742
  ProcessSystemEvents ();
2711
  LoadParameters(p3h, P3_LOADPAR, EVENT_COMMIT, NULL, 0, 0);    // load parameters from defaul.param to FEB
2743
  LoadParameters(p3h, P3_LOADPAR, EVENT_COMMIT, NULL, 0, 0);    // load parameters from defaul.param to FEB
2712
  ProcessSystemEvents ();
2744
  ProcessSystemEvents ();
2713
  LoadParameters(p3h, P3_LOADPAR, EVENT_COMMIT, NULL, 0, 0);    // load parameters from defaul.param to FEB
2745
  LoadParameters(p3h, P3_LOADPAR, EVENT_COMMIT, NULL, 0, 0);    // load parameters from defaul.param to FEB
2714
  ProcessSystemEvents ();
2746
  ProcessSystemEvents ();
2715
 
2747
 
2716
  /****** MicroMini calibration ******/
2748
  /****** MicroMini calibration ******/
2717
  sa02Printf("Calibration *\n\n");
2749
  sa02Printf("Calibration *\n\n");
2718
  SetHome(p2h, P2_HO,EVENT_COMMIT,NULL, 0, 0);
2750
  SetHome(p2h, P2_HO,EVENT_COMMIT,NULL, 0, 0);
2719
  SetCtrlVal(p2h,P2_XC,gCENTER_X);
2751
  SetCtrlVal(p2h,P2_XC,gCENTER_X);
2720
  SetCtrlVal(p2h,P2_YC,gCENTER_Y);
2752
  SetCtrlVal(p2h,P2_YC,gCENTER_Y);
2721
 
2753
 
2722
  /****** Reads run number ******/
2754
  /****** Reads run number ******/
2723
  fp = fopen ("CompleteScan_RunNumber.txt","r");
2755
  fp = fopen ("CompleteScan_RunNumber.txt","r");
2724
  if (fp) {
2756
  if (fp) {
2725
    if (fgets(line,ndim,fp)!= NULL) current_run = atoi(line)+1;
2757
    if (fgets(line,ndim,fp)!= NULL) current_run = atoi(line)+1;
2726
    fclose(fp);
2758
    fclose(fp);
2727
    fp = NULL;
2759
    fp = NULL;
2728
  }
2760
  }
2729
  ProcessSystemEvents ();
2761
  ProcessSystemEvents ();
2730
 
2762
 
2731
  /****** Slow Control ******/
2763
  /****** Slow Control ******/
2732
  sprintf(line,"%04d_SlowControl.xml",current_run);
2764
  sprintf(line,"%04d_SlowControl.xml",current_run);
Line 2910... Line 2942...
2910
 
2942
 
2911
  daq_scan(NULL);
2943
  daq_scan(NULL);
2912
 
2944
 
2913
  sprintf(cmdCommand,"cmd.exe /c mkdir ..\\modules\\%04d & ..\\sa02read -i %s_file01.dat -o ..\\modules\\%04d\\%s.root",
2945
  sprintf(cmdCommand,"cmd.exe /c mkdir ..\\modules\\%04d & ..\\sa02read -i %s_file01.dat -o ..\\modules\\%04d\\%s.root",
2914
          current_run, line, current_run, buf);
2946
          current_run, line, current_run, buf);
2915
  LaunchExecutable(cmdCommand);
2947
  LaunchExecutable(cmdCommand);
-
 
2948
 
2916
 
2949
 
2917
 
2950
 
2918
 
-
 
2919
  /****** 2D v X ******/
2951
  /****** 2D v X ******/
2920
  // Panel 2 settings
2952
  // Panel 2 settings
2921
  SetCtrlVal (p2h, P2_SCANUNITSX, 0);   // Continuous scan over X  (1 Ch, 0 Step)
2953
  SetCtrlVal (p2h, P2_SCANUNITSX, 0);   // Continuous scan over X  (1 Ch, 0 Step)
2922
  SetCtrlVal (p2h, P2_NX, 380/2);         // Noumber of steps = 380
2954
  SetCtrlVal (p2h, P2_NX, 380/2);         // Noumber of steps = 380
2923
  SetCtrlVal (p2h, P2_XSTEP, 2*500);      // Step size = 500
2955
  SetCtrlVal (p2h, P2_XSTEP, 2*500);      // Step size = 500
Line 2925... Line 2957...
2925
  SetCtrlVal (p2h, P2_SCANUNITSY, 1);   // Only over the channel centers   (1 Ch, 0 Step)
2957
  SetCtrlVal (p2h, P2_SCANUNITSY, 1);   // Only over the channel centers   (1 Ch, 0 Step)
2926
  SetCtrlVal (p2h, P2_NY, 12);          // Noumber of steps = 12
2958
  SetCtrlVal (p2h, P2_NY, 12);          // Noumber of steps = 12
2927
  SetCtrlVal (p2h, P2_YSTEP, 1);        // Step size = 1
2959
  SetCtrlVal (p2h, P2_YSTEP, 1);        // Step size = 1
2928
  SetCtrlVal (p2h, P2_YMIN, 0);         // Start position = 0
2960
  SetCtrlVal (p2h, P2_YMIN, 0);         // Start position = 0
2929
  SetCtrlVal (p2h, P2_DIRECTION, 1);    // Set Y then scan X = 1
2961
  SetCtrlVal (p2h, P2_DIRECTION, 1);    // Set Y then scan X = 1
2930
 
2962
 
2931
  SetCtrlVal (p2h, P2_NEVE, 1000);       // Number of events for position scan
2963
  SetCtrlVal (p2h, P2_NEVE, 1000);       // Number of events for position scan
2932
  SetCtrlVal (p2h, P2_PEDESTAL, ithr);   // Treshold
2964
  SetCtrlVal (p2h, P2_PEDESTAL, ithr);   // Treshold
2933
 
2965
 
2934
  SetCtrlVal (p2h, P2_DAQEXE, 0);       // Execute at each position: nothing
2966
  SetCtrlVal (p2h, P2_DAQEXE, 0);       // Execute at each position: nothing
2935
 
2967
 
2936
  sprintf(buf,"%04d_2_2DX",current_run);
2968
  sprintf(buf,"%04d_2_2DX",current_run);
2937
  sprintf(line,"..\\modules\\%s", buf);
2969
  sprintf(line,"..\\modules\\%s", buf);
2938
  SetCtrlVal (p2h, P2_DFILE, line);
2970
  SetCtrlVal (p2h, P2_DFILE, line);
2939
 
2971
 
2940
 
2972
 
2941
  daq_scan(NULL);
2973
  daq_scan(NULL);
2942
 
2974
 
Line 2953... Line 2985...
2953
  SetCtrlVal (p2h, P2_SCANUNITSY, 0);   // Continuous scan over Y  (1 Ch, 0 Step)
2985
  SetCtrlVal (p2h, P2_SCANUNITSY, 0);   // Continuous scan over Y  (1 Ch, 0 Step)
2954
  SetCtrlVal (p2h, P2_NY, 380/2);          // Noumber of steps = 380
2986
  SetCtrlVal (p2h, P2_NY, 380/2);          // Noumber of steps = 380
2955
  SetCtrlVal (p2h, P2_YSTEP, 2*500);        // Step size = 500
2987
  SetCtrlVal (p2h, P2_YSTEP, 2*500);        // Step size = 500
2956
  SetCtrlVal (p2h, P2_YMIN, 75000);         // Start position = 7500
2988
  SetCtrlVal (p2h, P2_YMIN, 75000);         // Start position = 7500
2957
  SetCtrlVal (p2h, P2_DIRECTION, 0);    // Set X then scan Y = 0
2989
  SetCtrlVal (p2h, P2_DIRECTION, 0);    // Set X then scan Y = 0
2958
 
2990
 
2959
  SetCtrlVal (p2h, P2_NEVE, 1000);        // Number of events for position scan
2991
  SetCtrlVal (p2h, P2_NEVE, 1000);        // Number of events for position scan
2960
  SetCtrlVal (p2h, P2_PEDESTAL, ithr);   // Treshold
2992
  SetCtrlVal (p2h, P2_PEDESTAL, ithr);   // Treshold
2961
 
2993
 
2962
  SetCtrlVal (p2h, P2_DAQEXE, 0);       // Execute at each position: nothing
2994
  SetCtrlVal (p2h, P2_DAQEXE, 0);       // Execute at each position: nothing
2963
 
2995
 
Line 2967... Line 2999...
2967
 
2999
 
2968
 
3000
 
2969
  daq_scan(NULL);
3001
  daq_scan(NULL);
2970
 
3002
 
2971
  sprintf(cmdCommand,"cmd.exe /c mkdir ..\\modules\\%04d & ..\\sa02read -i %s_file01.dat -o ..\\modules\\%04d\\%s.root ", current_run, line, current_run, buf);
3003
  sprintf(cmdCommand,"cmd.exe /c mkdir ..\\modules\\%04d & ..\\sa02read -i %s_file01.dat -o ..\\modules\\%04d\\%s.root ", current_run, line, current_run, buf);
2972
  system(cmdCommand); // wait here to finish to proceed to next step    
3004
  system(cmdCommand); // wait here to finish to proceed to next step
2973
 
3005
 
2974
  sprintf(cmdCommand,"cmd.exe /c ..\\thisroot.bat & cd analysis & root script.c(%d)",current_run);
3006
  sprintf(cmdCommand,"cmd.exe /c ..\\thisroot.bat & cd analysis & root script.c(%d)",current_run);
2975
  LaunchExecutable(cmdCommand);
3007
  LaunchExecutable(cmdCommand);
2976
 
3008
 
2977
  SetCtrlVal (p2h, P2_ZSET, 300000);
3009
  SetCtrlVal (p2h, P2_ZSET, 300000);
2978
  SetCtrlVal (p2h, P2_XC, (uint32_t)(gCENTER_KX*0+gCENTER_X));
3010
  SetCtrlVal (p2h, P2_XC, (uint32_t)(gCENTER_KX*0+gCENTER_X));
Line 3040... Line 3072...
3040
      strcpy(gUirCtrlMap[gNUirCtrlMap].name, ctrl );
3072
      strcpy(gUirCtrlMap[gNUirCtrlMap].name, ctrl );
3041
      if (gNUirCtrlMap<MAX_UIRCTRLMAP_SIZE) {
3073
      if (gNUirCtrlMap<MAX_UIRCTRLMAP_SIZE) {
3042
        gUirCtrlMap[gNUirCtrlMap].id     = ctrlid;
3074
        gUirCtrlMap[gNUirCtrlMap].id     = ctrlid;
3043
        gUirCtrlMap[gNUirCtrlMap].handle = GetPanelHandle(ctrl);
3075
        gUirCtrlMap[gNUirCtrlMap].handle = GetPanelHandle(ctrl);
3044
        gNUirCtrlMap++;
3076
        gNUirCtrlMap++;
-
 
3077
      }
3045
      } else {
3078
      else {
3046
        sa02Printf("ERROR: Increase gNUirCtrlMap\n");
3079
        sa02Printf("ERROR: Increase gNUirCtrlMap\n");
3047
      }
3080
      }
3048
    }
3081
    }
3049
  }
3082
  }
3050
  fclose(fp);
3083
  fclose(fp);
Line 3086... Line 3119...
3086
      cache_sz_inc *= cache_sz_inc_factor;
3119
      cache_sz_inc *= cache_sz_inc_factor;
3087
      if (cache_sz_inc > cache_sz_inc_max) {
3120
      if (cache_sz_inc > cache_sz_inc_max) {
3088
        cache_sz_inc = cache_sz_inc_max;
3121
        cache_sz_inc = cache_sz_inc_max;
3089
      }
3122
      }
3090
    }
3123
    }
3091
 
3124
 
3092
    pos_cache[count-1] = pstr2 - str;
3125
    pos_cache[count-1] = pstr2 - str;
3093
    pstr = pstr2 + oldlen;
3126
    pstr = pstr2 + oldlen;
3094
  }
3127
  }
3095
 
3128
 
3096
  orglen = pstr - str + strlen(pstr);
3129
  orglen = pstr - str + strlen(pstr);
3097
 
3130
 
3098
  /* Allocate memory for the post-replacement string. */
3131
  /* Allocate memory for the post-replacement string. */
3099
  if (count > 0) {
3132
  if (count > 0) {
3100
    newlen = strlen(new);
3133
    newlen = strlen(new);
3101
    retlen = orglen + (newlen - oldlen) * count;
3134
    retlen = orglen + (newlen - oldlen) * count;
-
 
3135
  }
3102
  } else  retlen = orglen;
3136
  else  retlen = orglen;
3103
  ret = malloc(retlen + 1);
3137
  ret = malloc(retlen + 1);
3104
  if (ret == NULL) {
3138
  if (ret == NULL) {
3105
    goto end_repl_str;
3139
    goto end_repl_str;
3106
  }
3140
  }
3107
 
3141
 
3108
  if (count == 0) {
3142
  if (count == 0) {
3109
    /* If no matches, then just duplicate the string. */
3143
    /* If no matches, then just duplicate the string. */
3110
    strcpy(ret, str);
3144
    strcpy(ret, str);
-
 
3145
  }
3111
  } else {
3146
  else {
3112
    /* Otherwise, duplicate the string whilst performing
3147
    /* Otherwise, duplicate the string whilst performing
3113
     * the replacements using the position cache. */
3148
     * the replacements using the position cache. */
3114
    pret = ret;
3149
    pret = ret;
3115
    memcpy(pret, str, pos_cache[0]);
3150
    memcpy(pret, str, pos_cache[0]);
3116
    pret += pos_cache[0];
3151
    pret += pos_cache[0];
Line 3135... Line 3170...
3135
 
3170
 
3136
int CVICALLBACK run_script(void *functionData) {
3171
int CVICALLBACK run_script(void *functionData) {
3137
  FILE *fp = NULL;
3172
  FILE *fp = NULL;
3138
  FILE *fpout =NULL;
3173
  FILE *fpout =NULL;
3139
 
3174
 
3140
 
3175
 
3141
  char *line;
3176
  char *line;
3142
  char buf[MAX_PATHNAME_LEN];
3177
  char buf[MAX_PATHNAME_LEN];
3143
  int status;
3178
  int status;
3144
  char type[MAX_PATHNAME_LEN];
3179
  char type[MAX_PATHNAME_LEN];
3145
  char param[MAX_PATHNAME_LEN];
3180
  char param[MAX_PATHNAME_LEN];
Line 3161... Line 3196...
3161
  if (!fp) {
3196
  if (!fp) {
3162
    sa02Printf("Error! Cannot open script file %s\n",scriptname);
3197
    sa02Printf("Error! Cannot open script file %s\n",scriptname);
3163
    return -1;
3198
    return -1;
3164
  }
3199
  }
3165
  while (fgets(buf,MAX_PATHNAME_LEN,fp)!=NULL ) {
3200
  while (fgets(buf,MAX_PATHNAME_LEN,fp)!=NULL ) {
3166
   
3201
 
3167
    if (buf[0]!='#' && strlen(buf)>2) {
3202
    if (buf[0]!='#' && strlen(buf)>2) {
3168
      if (strstr(buf, "%RUN%")!=NULL) {
3203
      if (strstr(buf, "%RUN%")!=NULL) {
3169
          char srun[16];
3204
        char srun[16];
3170
          sprintf(srun,"%04d",runno);
3205
        sprintf(srun,"%04d",runno);
3171
          line = str_replace(buf,"%RUN%", srun);
3206
        line = str_replace(buf,"%RUN%", srun);
3172
      } else {
-
 
3173
          line = buf;
-
 
3174
      }
3207
      }
-
 
3208
      else {
-
 
3209
        line = buf;
-
 
3210
      }
3175
      sa02Printf("#[%d] %s",strlen(buf),buf);  
3211
      sa02Printf("#[%d] %s",strlen(buf),buf);
3176
     
3212
 
3177
      sscanf(line,"%s",type);
3213
      sscanf(line,"%s",type);
3178
     
3214
 
3179
      if (strstr(type,"SetCtrlVal")!=NULL) {
3215
      if (strstr(type,"SetCtrlVal")!=NULL) {
3180
        int pID;  
3216
        int pID;
3181
        int rID;
3217
        int rID;
3182
        int datatype;
3218
        int datatype;
3183
        sscanf(line,"%*s%s%s",param,paramValue);
3219
        sscanf(line,"%*s%s%s",param,paramValue);
3184
   
3220
 
3185
        pID= GetPanelHandle(param);  
3221
        pID= GetPanelHandle(param);
3186
        rID= GetControlID(param);
3222
        rID= GetControlID(param);
3187
        if (rID>0 && pID>0) {
3223
        if (rID>0 && pID>0) {
3188
          GetCtrlAttribute (pID, rID, ATTR_DATA_TYPE, &datatype);
3224
          GetCtrlAttribute (pID, rID, ATTR_DATA_TYPE, &datatype);
3189
       
3225
 
3190
          switch (datatype){
3226
          switch (datatype) {
-
 
3227
            case VAL_INTEGER:
3191
            case VAL_INTEGER: SetCtrlVal (pID, rID, atoi(paramValue)); break;
3228
              SetCtrlVal (pID, rID, atoi(paramValue));
-
 
3229
              break;
-
 
3230
            case VAL_UNSIGNED_INTEGER:
3192
            case VAL_UNSIGNED_INTEGER: SetCtrlVal (pID, rID, strtoul(paramValue,NULL,0)); break;
3231
              SetCtrlVal (pID, rID, strtoul(paramValue,NULL,0));
-
 
3232
              break;
-
 
3233
            case VAL_SHORT_INTEGER:
3193
            case VAL_SHORT_INTEGER: SetCtrlVal (pID, rID, atoi(paramValue)); break;
3234
              SetCtrlVal (pID, rID, atoi(paramValue));
-
 
3235
              break;
-
 
3236
            case VAL_UNSIGNED_SHORT_INTEGER:
3194
            case VAL_UNSIGNED_SHORT_INTEGER: SetCtrlVal (pID, rID, strtoul(paramValue,NULL,0)); break;
3237
              SetCtrlVal (pID, rID, strtoul(paramValue,NULL,0));
-
 
3238
              break;
-
 
3239
            case VAL_DOUBLE :
3195
            case VAL_DOUBLE : SetCtrlVal (pID, rID, atof(paramValue)); break;
3240
              SetCtrlVal (pID, rID, atof(paramValue));
-
 
3241
              break;
-
 
3242
            case VAL_STRING :
3196
            case VAL_STRING : SetCtrlVal (pID, rID, paramValue      ); break;
3243
              SetCtrlVal (pID, rID, paramValue      );
-
 
3244
              break;
-
 
3245
            default:
3197
            default: sa02Printf("[%s] ATTR_DATA_TYPE of the %s not supported datatype %d p4h=%d\n\n", type, param, datatype, p4h);
3246
              sa02Printf("[%s] ATTR_DATA_TYPE of the %s not supported datatype %d p4h=%d\n\n", type, param, datatype, p4h);
3198
          }
3247
          }
3199
          //sa02Printf("[%s] SetCtrlVal %s %s panel=%d control=%d\n",type,param, paramValue,pID,rID);  
3248
          //sa02Printf("[%s] SetCtrlVal %s %s panel=%d control=%d\n",type,param, paramValue,pID,rID);
-
 
3249
        }
3200
        } else {
3250
        else {
3201
           sa02Printf("[%s] Invalid Ctrl %s %s panel=%d control=%d\n",type,param, paramValue,pID,rID);
3251
          sa02Printf("[%s] Invalid Ctrl %s %s panel=%d control=%d\n",type,param, paramValue,pID,rID);
3202
        }  
3252
        }
-
 
3253
 
3203
       
3254
      }
3204
      } else if (strstr(type,"2D")!=NULL) {
3255
      else if (strstr(type,"2D")!=NULL) {
3205
        sscanf(line,"%*s%d%d%d%d%d%d%d%d%d%d%d%s",&scx,&nx,&xstep,&xmin,&scy,&ny,&ystep,&ymin,&direction,&nevents,&tresh,outputFileSuffix);
3256
        sscanf(line,"%*s%d%d%d%d%d%d%d%d%d%d%d%s",&scx,&nx,&xstep,&xmin,&scy,&ny,&ystep,&ymin,&direction,&nevents,&tresh,outputFileSuffix);
3206
        sprintf(test,"%d %d %d %d %d %d %d %d %d %d %d %s *\n",scx,nx,xstep,xmin,scy,ny,ystep,ymin,direction,nevents,tresh,outputFileSuffix);
3257
        sprintf(test,"%d %d %d %d %d %d %d %d %d %d %d %s *\n",scx,nx,xstep,xmin,scy,ny,ystep,ymin,direction,nevents,tresh,outputFileSuffix);
3207
        sa02Printf("%s *\n\n",test);
3258
        sa02Printf("%s *\n\n",test);
3208
        SetCtrlVal (p2h, P2_SCANUNITSX, scx);
3259
        SetCtrlVal (p2h, P2_SCANUNITSX, scx);
3209
        SetCtrlVal (p2h, P2_NX, nx);
3260
        SetCtrlVal (p2h, P2_NX, nx);
Line 3223... Line 3274...
3223
        SetCtrlVal (p2h, P2_DFILE, outputFile);
3274
        SetCtrlVal (p2h, P2_DFILE, outputFile);
3224
 
3275
 
3225
 
3276
 
3226
        daq_scan(NULL);
3277
        daq_scan(NULL);
3227
 
3278
 
-
 
3279
      }
3228
      } else if (strstr(type,"Delay")!=NULL) {
3280
      else if (strstr(type,"Delay")!=NULL) {
3229
        int idelay=0;
3281
        int idelay=0;
3230
        sscanf(line,"%*s%s",paramValue);
3282
        sscanf(line,"%*s%s",paramValue);
3231
        for (idelay=atoi(paramValue) ; idelay>0; idelay--) {
3283
        for (idelay=atoi(paramValue) ; idelay>0; idelay--) {
3232
          Delay(1);
3284
          Delay(1);
3233
          SetCtrlVal(p1h, P1_DELAY, idelay);
3285
          SetCtrlVal(p1h, P1_DELAY, idelay);
3234
          ProcessSystemEvents();
3286
          ProcessSystemEvents();
3235
          if (ctrl_c) break;
3287
          if (ctrl_c) break;
3236
        }
3288
        }
-
 
3289
      }
3237
      }  else if (strstr(type,"ThresholdLinearity")!=NULL) {
3290
      else if (strstr(type,"ThresholdLinearity")!=NULL) {
3238
        char *fname;
3291
        char *fname;
3239
        uint16_t mask = GetConnectedFebMask();
3292
        uint16_t mask = GetConnectedFebMask();
3240
 
3293
 
3241
        sscanf(line,"%*s%s",paramValue);
3294
        sscanf(line,"%*s%s",paramValue);
3242
        fname = paramValue;
3295
        fname = paramValue;
3243
       
3296
 
3244
 
3297
 
3245
        ThresholdLinearityCB (p1h, P1_THRVSADC, EVENT_COMMIT, NULL, 0, 0 );
3298
        ThresholdLinearityCB (p1h, P1_THRVSADC, EVENT_COMMIT, NULL, 0, 0 );
3246
        fpout = fopen(fname,"ab");
3299
        fpout = fopen(fname,"ab");
3247
        if(fpout) {
3300
        if(fpout) {
3248
          for (int board=0; board<4; board++) if ( mask &(1<<board))  H1DWrite2File(board,fpout);
3301
          for (int board=0; board<4; board++) if ( mask &(1<<board))  H1DWrite2File(board,fpout);
3249
          fclose(fpout);
3302
          fclose(fpout);
3250
        }
3303
        }
3251
 
3304
 
-
 
3305
      }
3252
      }  else if (strstr(type,"LaunchExecutable")!=NULL) {
3306
      else if (strstr(type,"LaunchExecutable")!=NULL) {
3253
        int index = FindPattern (line, 0, -1, "LaunchExecutable", 0, 0) + 17;
3307
        int index = FindPattern (line, 0, -1, "LaunchExecutable", 0, 0) + 17;
3254
       
3308
 
3255
        char *cmd = &line[index];
3309
        char *cmd = &line[index];
3256
        sa02Printf("cmd %d=%s\n",index, cmd);
3310
        sa02Printf("cmd %d=%s\n",index, cmd);
3257
        if (strlen(cmd)>0) LaunchExecutable( cmd );
3311
        if (strlen(cmd)>0) LaunchExecutable( cmd );
-
 
3312
      }
3258
      }  else if (strstr(type,"CAEN_V729")!=NULL) {  
3313
      else if (strstr(type,"CAEN_V729")!=NULL) {
3259
        char *fname;
3314
        char *fname;
3260
        //FILE *fpmon=NULL;
3315
        //FILE *fpmon=NULL;
3261
       
3316
 
3262
        sscanf(line,"%*s%s",paramValue);
3317
        sscanf(line,"%*s%s",paramValue);
3263
        fname=paramValue;
3318
        fname=paramValue;
3264
       
3319
 
3265
        fpout = fopen(fname,"ab");
3320
        fpout = fopen(fname,"ab");
3266
        if (fpout) {
3321
        if (fpout) {
3267
         
3322
 
3268
          V729_SetFilePointer(fpout);
3323
          V729_SetFilePointer(fpout);
3269
          V729_daq(NULL);
3324
          V729_daq(NULL);
3270
          fclose(fpout);
3325
          fclose(fpout);
3271
        }
3326
        }
-
 
3327
      }
3272
      } else if (strstr(type,"HvMonitor")!=NULL) {
3328
      else if (strstr(type,"HvMonitor")!=NULL) {
3273
        int nrepetitions;
3329
        int nrepetitions;
3274
        int delaytime;
3330
        int delaytime;
3275
        int k=0;
3331
        int k=0;
3276
        FILE *fpmon=NULL;
3332
        FILE *fpmon=NULL;
3277
        sscanf(line,"%*s%s%d%d",paramValue, &delaytime, &nrepetitions );
3333
        sscanf(line,"%*s%s%d%d",paramValue, &delaytime, &nrepetitions );
3278
        fpmon = fopen(paramValue,"ab");
3334
        fpmon = fopen(paramValue,"ab");
3279
       
3335
 
3280
        if ( fpmon ) {
3336
        if ( fpmon ) {
3281
          hvmonFirst = 0;
3337
          hvmonFirst = 0;
3282
          for (k=0; k<nrepetitions; k++) {
3338
          for (k=0; k<nrepetitions; k++) {
3283
            double thv0,thv1;
3339
            double thv0,thv1;
3284
            thv0 = Timer();
3340
            thv0 = Timer();
3285
            GetHvMonitor();
3341
            GetHvMonitor();
3286
            for (int board=0;board<4;board++){
3342
            for (int board=0; board<4; board++) {
3287
              double sdata[12];
3343
              double sdata[12];
3288
              for (int k=0;k<6;k++){
3344
              for (int k=0; k<6; k++) {
3289
                 sdata[k] = monrec.imon[k+4*board];
3345
                sdata[k] = monrec.imon[k+4*board];
3290
                 sdata[k+6] = 0;
3346
                sdata[k+6] = 0;
3291
              }
3347
              }
3292
             
3348
 
3293
              SetAxisScalingMode (p1h, chart_control[board], VAL_LEFT_YAXIS, VAL_AUTOSCALE, 0, 1);
3349
              SetAxisScalingMode (p1h, chart_control[board], VAL_LEFT_YAXIS, VAL_AUTOSCALE, 0, 1);
3294
              SetAxisScalingMode (p1h, chart_control[board], VAL_RIGHT_YAXIS, VAL_AUTOSCALE, 0, 1);
3350
              SetAxisScalingMode (p1h, chart_control[board], VAL_RIGHT_YAXIS, VAL_AUTOSCALE, 0, 1);
3295
              PlotStripChart (p1h, chart_control[board], sdata, 12, 0, 0, VAL_DOUBLE);
3351
              PlotStripChart (p1h, chart_control[board], sdata, 12, 0, 0, VAL_DOUBLE);
3296
            }  
3352
            }
3297
            monrec.id = MONREC_ID;
3353
            monrec.id = MONREC_ID;
3298
            monrec.len = sizeof(monrec);
3354
            monrec.len = sizeof(monrec);
3299
            thv1=Timer();
3355
            thv1=Timer();
3300
            status = (int) fwrite( &monrec,  1,  sizeof(monrec),fpmon);
3356
            status = (int) fwrite( &monrec,  1,  sizeof(monrec),fpmon);
3301
            sa02Printf("[%04d] HvMonitor dt= %f s status=%d\n", runno, thv1-thv0, status );
3357
            sa02Printf("[%04d] HvMonitor dt= %f s status=%d\n", runno, thv1-thv0, status );
3302
            for (int idelay=delaytime ; idelay>0; idelay--) {
3358
            for (int idelay=delaytime ; idelay>0; idelay--) {
3303
              Delay(1);
3359
              Delay(1);
3304
              SetCtrlVal(p1h, P1_DELAY, idelay);
3360
              SetCtrlVal(p1h, P1_DELAY, idelay);
3305
              ProcessSystemEvents();
3361
              ProcessSystemEvents();
3306
              if (ctrl_c) break;
3362
              if (ctrl_c) break;
3307
            }
3363
            }
3308
            if (ctrl_c) break;
3364
            if (ctrl_c) break;
3309
          }
3365
          }
3310
          fclose(fpmon);
3366
          fclose(fpmon);
-
 
3367
        }
3311
        } else {
3368
        else {
3312
          sa02Printf("%s cannot open file %s\n",param, paramValue );
3369
          sa02Printf("%s cannot open file %s\n",param, paramValue );
3313
        }
3370
        }
3314
 
3371
 
-
 
3372
      }
3315
      } else if (strstr(type,"GetRunNumberFromFile")!=NULL) {
3373
      else if (strstr(type,"GetRunNumberFromFile")!=NULL) {
3316
        sscanf(line,"%*s%s",paramValue);
3374
        sscanf(line,"%*s%s",paramValue);
3317
        runno = GetRunNumberFromFile(paramValue);
3375
        runno = GetRunNumberFromFile(paramValue);
3318
        SetCtrlVal(p1h, P1_RUNNO, runno);
3376
        SetCtrlVal(p1h, P1_RUNNO, runno);
3319
        sa02Printf("%s %s run=>%d\n",type, paramValue, runno );
3377
        sa02Printf("%s %s run=>%d\n",type, paramValue, runno );
-
 
3378
      }
3320
      } else if (strstr(type,"IncreaseNumberInFile")!=NULL) {
3379
      else if (strstr(type,"IncreaseNumberInFile")!=NULL) {
3321
        sscanf(line,"%*s%s",paramValue);
3380
        sscanf(line,"%*s%s",paramValue);
3322
        runno = IncreaseRunNumberInFile(paramValue);
3381
        runno = IncreaseRunNumberInFile(paramValue);
3323
        sa02Printf("%s %s run=>%d\n",type, paramValue, runno );
3382
        sa02Printf("%s %s run=>%d\n",type, paramValue, runno );
3324
        SetCtrlVal(p1h, P1_RUNNO, runno);
3383
        SetCtrlVal(p1h, P1_RUNNO, runno);
-
 
3384
      }
3325
      } else if (strstr(type,"LoadParameters")!=NULL) {
3385
      else if (strstr(type,"LoadParameters")!=NULL) {
3326
        LoadParameters(p3h, P3_LOADPAR,EVENT_COMMIT,NULL,0,0);
3386
        LoadParameters(p3h, P3_LOADPAR,EVENT_COMMIT,NULL,0,0);
3327
        sa02Printf("Loading parameters *\n\n");
3387
        sa02Printf("Loading parameters *\n\n");
-
 
3388
      }
3328
      } else if (strstr(type,"QueueUserEvent")!=NULL || strstr(type,"ProcessUserEvent")!=NULL) {
3389
      else if (strstr(type,"QueueUserEvent")!=NULL || strstr(type,"ProcessUserEvent")!=NULL) {
3329
        char scontrol[0xFF];
3390
        char scontrol[0xFF];
3330
        int panelHandle=0;
3391
        int panelHandle=0;
3331
        int controlID;
3392
        int controlID;
3332
        sscanf(line,"%*s%s",scontrol);
3393
        sscanf(line,"%*s%s",scontrol);
3333
        panelHandle = GetPanelHandle(scontrol);
3394
        panelHandle = GetPanelHandle(scontrol);
3334
        controlID   = GetControlID(scontrol);
3395
        controlID   = GetControlID(scontrol);
3335
        sa02Printf("UserEvent %s panelHandle %d controlID %d\n",scontrol, panelHandle, controlID );
3396
        sa02Printf("UserEvent %s panelHandle %d controlID %d\n",scontrol, panelHandle, controlID );
3336
        if (panelHandle>=0 && controlID >=0 ) {
3397
        if (panelHandle>=0 && controlID >=0 ) {
3337
          if (strstr(type,"ProcessUserEvent")!=NULL) {
3398
          if (strstr(type,"ProcessUserEvent")!=NULL) {
3338
            ProcessUserEvent(panelHandle, controlID,0);
3399
            ProcessUserEvent(panelHandle, controlID,0);
-
 
3400
          }
3339
          } else {
3401
          else {
3340
            data[1] = controlID;
3402
            data[1] = controlID;
3341
            data[0] = panelHandle;
3403
            data[0] = panelHandle;
3342
       
3404
 
3343
            status = CmtWriteTSQData (pTSQ, data, 1, TSQ_INFINITE_TIMEOUT, NULL);
3405
            status = CmtWriteTSQData (pTSQ, data, 1, TSQ_INFINITE_TIMEOUT, NULL);
3344
          }  
3406
          }
3345
        }
3407
        }
3346
 
3408
 
-
 
3409
      }
3347
      }  else if (strstr(type,"SetPositionAndMux")!=NULL) {
3410
      else if (strstr(type,"SetPositionAndMux")!=NULL) {
3348
        int ix,iy;
3411
        int ix,iy;
3349
        sscanf(line,"%*s%d%d",&ix,&iy);
3412
        sscanf(line,"%*s%d%d",&ix,&iy);
3350
        sa02Printf("SetPositionAndMux %d %d \n", ix,iy);
3413
        sa02Printf("SetPositionAndMux %d %d \n", ix,iy);
3351
 
3414
 
3352
        SetCtrlVal (p2h, P2_CHX,  ix);
3415
        SetCtrlVal (p2h, P2_CHX,  ix);
3353
        SetCtrlVal (p2h, P2_CHY,  iy);
3416
        SetCtrlVal (p2h, P2_CHY,  iy);
3354
        SetPositionAndMux(  p2h,0, EVENT_COMMIT , NULL,0,0);
3417
        SetPositionAndMux(  p2h,0, EVENT_COMMIT , NULL,0,0);
3355
 
3418
 
-
 
3419
      }
3356
      }  else if (strstr(type,"Treshold")!=NULL) {
3420
      else if (strstr(type,"Treshold")!=NULL) {
3357
        sscanf(line,"%*s%s",outputFileSuffix);
3421
        sscanf(line,"%*s%s",outputFileSuffix);
3358
 
3422
 
3359
        GetCtrlVal (p1h, P1_SERIAL_1, HAPDserialNumber);
3423
        GetCtrlVal (p1h, P1_SERIAL_1, HAPDserialNumber);
3360
        sprintf(outputFile,"%s_%s.dat", HAPDserialNumber, outputFileSuffix);
3424
        sprintf(outputFile,"%s_%s.dat", HAPDserialNumber, outputFileSuffix);
3361
        SetCtrlVal (p1h, P1_OUTPUTFILE, outputFile);
3425
        SetCtrlVal (p1h, P1_OUTPUTFILE, outputFile);
3362
 
3426
 
3363
        sprintf(test,"Treshold scan to file %s",outputFile);
3427
        sprintf(test,"Treshold scan to file %s",outputFile);
3364
        sa02Printf("%s *\n\n", test);
3428
        sa02Printf("%s *\n\n", test);
3365
 
3429
 
3366
        daq(NULL);
3430
        daq(NULL);
-
 
3431
      }
3367
      } else if (strstr(type,"Fitanje")!=NULL) {
3432
      else if (strstr(type,"Fitanje")!=NULL) {
3368
        FitH2DCoarse(p3h, P3_CALIBRATION_2,EVENT_COMMIT,NULL,0,0);
3433
        FitH2DCoarse(p3h, P3_CALIBRATION_2,EVENT_COMMIT,NULL,0,0);
3369
        sa02Printf("Coarse fit parameters *\n\n");
3434
        sa02Printf("Coarse fit parameters *\n\n");
-
 
3435
      }
3370
      } else if (strstr(type,"UploadChannelParameters")!=NULL) {
3436
      else if (strstr(type,"UploadChannelParameters")!=NULL) {
3371
        UploadChannelParameters(p3h, P3_CPARLOAD,EVENT_COMMIT,NULL,0,0);
3437
        UploadChannelParameters(p3h, P3_CPARLOAD,EVENT_COMMIT,NULL,0,0);
3372
        sa02Printf("Loading channel parameters *\n\n");
3438
        sa02Printf("Loading channel parameters *\n\n");
-
 
3439
      }
3373
      } else if (strstr(type,"KalibracijaMizice")!=NULL) {
3440
      else if (strstr(type,"KalibracijaMizice")!=NULL) {
3374
        SetHome(p2h, P2_HO,EVENT_COMMIT,NULL,0,0);
3441
        SetHome(p2h, P2_HO,EVENT_COMMIT,NULL,0,0);
3375
        SetCtrlVal(p2h,P2_XC,gCENTER_X);
3442
        SetCtrlVal(p2h,P2_XC,gCENTER_X);
3376
        SetCtrlVal(p2h,P2_YC,gCENTER_Y);
3443
        SetCtrlVal(p2h,P2_YC,gCENTER_Y);
3377
        sa02Printf("Calibration *\n\n");
3444
        sa02Printf("Calibration *\n\n");
-
 
3445
      }
3378
      } else if (strstr(type,"LaserHVOn")!=NULL) {
3446
      else if (strstr(type,"LaserHVOn")!=NULL) {
3379
        set_dac(1);
3447
        set_dac(1);
3380
        sa02Printf("Low intensity laser *\n\n");
3448
        sa02Printf("Low intensity laser *\n\n");
-
 
3449
      }
3381
      } else if (strstr(type,"LaserHVOff")!=NULL) {
3450
      else if (strstr(type,"LaserHVOff")!=NULL) {
3382
        set_dac(0);
3451
        set_dac(0);
3383
        sa02Printf("High intensity laser *\n\n");
3452
        sa02Printf("High intensity laser *\n\n");
-
 
3453
      }
3384
      } else if (strstr(type,"Gain")!=NULL) {
3454
      else if (strstr(type,"Gain")!=NULL) {
3385
        sscanf(line,"%*s%d",paramValue);
3455
        sscanf(line,"%*s%d",paramValue);
3386
        sprintf(test,"    %d", atoi(paramValue));
3456
        sprintf(test,"    %d", atoi(paramValue));
3387
        sa02Printf("%s *\n\n", test);
3457
        sa02Printf("%s *\n\n", test);
3388
        changeGlobalParam(12, atoi(paramValue)); // Global parameter Gain has ID 12
3458
        changeGlobalParam(12, atoi(paramValue)); // Global parameter Gain has ID 12
-
 
3459
      }
3389
      } else if (strstr(type,"ShapingTime")!=NULL) {
3460
      else if (strstr(type,"ShapingTime")!=NULL) {
3390
        sscanf(line,"%*s%s",paramValue);
3461
        sscanf(line,"%*s%s",paramValue);
3391
        sprintf(test,"    %d", atoi(paramValue));
3462
        sprintf(test,"    %d", atoi(paramValue));
3392
        sa02Printf("%s *\n\n", test);
3463
        sa02Printf("%s *\n\n", test);
3393
        changeGlobalParam(13, atoi(paramValue)); // Global parameter ShapingTime has ID 13
3464
        changeGlobalParam(13, atoi(paramValue)); // Global parameter ShapingTime has ID 13
3394
      }
3465
      }
Line 3623... Line 3694...
3623
          GetTableSelection (p3h, P3_GREG, &trange);
3694
          GetTableSelection (p3h, P3_GREG, &trange);
3624
          if ((trange.top!=0)&&(trange.left!=0)) {
3695
          if ((trange.top!=0)&&(trange.left!=0)) {
3625
            imin= trange.top - 1;
3696
            imin= trange.top - 1;
3626
            imax= imin + trange.height;
3697
            imax= imin + trange.height;
3627
 
3698
 
-
 
3699
          }
3628
          } else {
3700
          else {
3629
            if (!GetActiveTableCell(p3h, P3_GREG, &cell)) {
3701
            if (!GetActiveTableCell(p3h, P3_GREG, &cell)) {
3630
              imin = cell.y-1;
3702
              imin = cell.y-1;
3631
              imax = imin;
3703
              imax = imin;
-
 
3704
            }
3632
            } else return 0;
3705
            else return 0;
3633
          }
3706
          }
-
 
3707
        }
3634
        } else {
3708
        else {
3635
          imin=0;
3709
          imin=0;
3636
          imax=4*4;
3710
          imax=4*4;
3637
        }
3711
        }
3638
 
3712
 
3639
        for (i=imin; i<imax; i++) {
3713
        for (i=imin; i<imax; i++) {
Line 3697... Line 3771...
3697
          state = GetTableSelection (p3h, P3_CREG, &trange);
3771
          state = GetTableSelection (p3h, P3_CREG, &trange);
3698
          if ((trange.top!=0)&&(trange.left!=0)) {
3772
          if ((trange.top!=0)&&(trange.left!=0)) {
3699
            imin= trange.top-1;
3773
            imin= trange.top-1;
3700
            imax= imin + trange.height;
3774
            imax= imin + trange.height;
3701
 
3775
 
-
 
3776
          }
3702
          } else {
3777
          else {
3703
            if (!GetActiveTableCell(p3h, P3_CREG, &cell)) {
3778
            if (!GetActiveTableCell(p3h, P3_CREG, &cell)) {
3704
              imin = cell.y-1;
3779
              imin = cell.y-1;
3705
              imax = imin+1;
3780
              imax = imin+1;
-
 
3781
            }
3706
            } else return 0;
3782
            else return 0;
3707
          }
3783
          }
-
 
3784
        }
3708
        } else if ((panel==p1h)&&(control==P1_CHPARLOAD)) {
3785
        else if ((panel==p1h)&&(control==P1_CHPARLOAD)) {
3709
          GetCtrlVal(p1h,P1_NSLIX,&imin);
3786
          GetCtrlVal(p1h,P1_NSLIX,&imin);
3710
          imax=imin+1;
3787
          imax=imin+1;
-
 
3788
        }
3711
        } else {
3789
        else {
3712
          imin=0;
3790
          imin=0;
3713
          imax=144*4;
3791
          imax=144*4;
3714
        }
3792
        }
3715
 
3793
 
3716
        for (i=imin; i<imax; i++) {
3794
        for (i=imin; i<imax; i++) {
Line 3743... Line 3821...
3743
          if (ctrl_c) {
3821
          if (ctrl_c) {
3744
            break;
3822
            break;
3745
          }
3823
          }
3746
        }
3824
        }
3747
        sa02Printf("Channel Parameters Uploaded to the ASICs\n");
3825
        sa02Printf("Channel Parameters Uploaded to the ASICs\n");
3748
 
3826
 
3749
      }
3827
      }
3750
      SetCtrlAttribute (panel, control, ATTR_DIMMED, 0);
3828
      SetCtrlAttribute (panel, control, ATTR_DIMMED, 0);
3751
      break;
3829
      break;
3752
  }
3830
  }
3753
  return 0;
3831
  return 0;
3754
}
3832
}
3755
 
3833
 
3756
int CVICALLBACK UploadFPGAParameters (int panel, int control, int event,
3834
int CVICALLBACK UploadFPGAParameters (int panel, int control, int event,
3757
                                      void *callbackData, int eventData1, int eventData2) {
3835
                                      void *callbackData, int eventData1, int eventData2) {
3758
 
3836
 
3759
  int n=0;
3837
  int n=0;
3760
  int i=0;
3838
  int i=0;
Line 3765... Line 3843...
3765
  char cmd[NDIM];
3843
  char cmd[NDIM];
3766
  char sasic[NDIM];
3844
  char sasic[NDIM];
3767
  uint32_t sa02code;
3845
  uint32_t sa02code;
3768
  uint32_t board;
3846
  uint32_t board;
3769
  uint32_t response[2]= {0,0};
3847
  uint32_t response[2]= {0,0};
3770
 
3848
 
3771
  switch (event) {
3849
  switch (event) {
3772
    case EVENT_COMMIT: {
3850
    case EVENT_COMMIT: {
3773
      uint16_t mask=GetConnectedFebMask();
3851
      uint16_t mask=GetConnectedFebMask();
3774
      SetCtrlAttribute (panel, control, ATTR_DIMMED, 1);
3852
      SetCtrlAttribute (panel, control, ATTR_DIMMED, 1);
3775
 
3853
 
3776
      GetNumTextBoxLines(p3h, P3_FPGAPAR,&n);
3854
      GetNumTextBoxLines(p3h, P3_FPGAPAR,&n);
Line 3782... Line 3860...
3782
        if (strcmp(cmd,"MUXASIC")==0) {
3860
        if (strcmp(cmd,"MUXASIC")==0) {
3783
          asic = sa02MuxMap(asic);
3861
          asic = sa02MuxMap(asic);
3784
        }
3862
        }
3785
        for (board = 0; board < 4; board ++) if ( mask & (1 << board) ) sa02Cmd(board,sa02code, asic, 0, 0, 2,response);
3863
        for (board = 0; board < 4; board ++) if ( mask & (1 << board) ) sa02Cmd(board,sa02code, asic, 0, 0, 2,response);
3786
        sa02Printf("%s\n",buf);
3864
        sa02Printf("%s\n",buf);
3787
      }
3865
      }
3788
      sa02Printf("FPGA Parameters Uploaded to FEBS\n");
3866
      sa02Printf("FPGA Parameters Uploaded to FEBS\n");
3789
      SetCtrlAttribute (panel, control, ATTR_DIMMED, 0);
3867
      SetCtrlAttribute (panel, control, ATTR_DIMMED, 0);
3790
      break;
3868
      break;
3791
    }
3869
    }
3792
  }
3870
  }
3793
  return 0;
3871
  return 0;
3794
}
3872
}
3795
 
3873
 
3796
int CVICALLBACK SetSelectionToVal (int panel, int control, int event,
3874
int CVICALLBACK SetSelectionToVal (int panel, int control, int event,
3797
                                   void *callbackData, int eventData1, int eventData2) {
3875
                                   void *callbackData, int eventData1, int eventData2) {
3798
  int state, input_cid=-1,output_cid=-1;
3876
  int state, input_cid=-1,output_cid=-1;
3799
  Rect trange;
3877
  Rect trange;
3800
  unsigned short value;
3878
  unsigned short value;
Line 3813... Line 3891...
3813
      }
3891
      }
3814
      state = GetTableSelection (p3h, output_cid, &trange);
3892
      state = GetTableSelection (p3h, output_cid, &trange);
3815
      if ((trange.top!=0)&&(trange.left!=0)) {
3893
      if ((trange.top!=0)&&(trange.left!=0)) {
3816
        GetCtrlVal(p3h,input_cid, &value);
3894
        GetCtrlVal(p3h,input_cid, &value);
3817
        state = FillTableCellRange (p3h, output_cid, trange, value);
3895
        state = FillTableCellRange (p3h, output_cid, trange, value);
3818
      }
3896
      }
3819
      break;
3897
      break;
3820
  }
3898
  }
3821
  return 0;
3899
  return 0;
3822
}
3900
}
3823
 
3901
 
Line 3826... Line 3904...
3826
  int cid[4]= {P3_MUX0,P3_MUX1,P3_MUX2,P3_MUX3};
3904
  int cid[4]= {P3_MUX0,P3_MUX1,P3_MUX2,P3_MUX3};
3827
  int id=0,i;
3905
  int id=0,i;
3828
  uint32_t sa02code;
3906
  uint32_t sa02code;
3829
  uint32_t board;
3907
  uint32_t board;
3830
  uint32_t response[2]= {0,0};
3908
  uint32_t response[2]= {0,0};
3831
 
3909
 
3832
  switch (event) {
3910
  switch (event) {
3833
    case EVENT_COMMIT:
3911
    case EVENT_COMMIT:
3834
 
3912
 
3835
      switch (control) {
3913
      switch (control) {
3836
        case P3_MUX0:
3914
        case P3_MUX0:
3837
          id=0;
3915
          id=0;
Line 3858... Line 3936...
3858
        if (id!= i) {
3936
        if (id!= i) {
3859
          SetCtrlVal(panel,cid[i],0);
3937
          SetCtrlVal(panel,cid[i],0);
3860
        }
3938
        }
3861
      }
3939
      }
3862
      sa02Printf("MUX %d\n",id);
3940
      sa02Printf("MUX %d\n",id);
3863
      break;
3941
      break;
3864
  }
3942
  }
3865
  return 0;
3943
  return 0;
3866
}
3944
}
3867
 
3945
 
3868
int CVICALLBACK UploadFromPanels (int panel, int control, int event,
3946
int CVICALLBACK UploadFromPanels (int panel, int control, int event,
3869
                                  void *callbackData, int eventData1, int eventData2) {
3947
                                  void *callbackData, int eventData1, int eventData2) {
3870
  switch (event) {
3948
  switch (event) {
3871
    case EVENT_COMMIT:
3949
    case EVENT_COMMIT:
3872
      UploadFPGAParameters(panel,control,event,callbackData,eventData1,eventData2);
3950
      UploadFPGAParameters(panel,control,event,callbackData,eventData1,eventData2);
3873
      UploadChannelParameters(panel,control,event,callbackData,eventData1,eventData2);
3951
      UploadChannelParameters(panel,control,event,callbackData,eventData1,eventData2);
3874
      UploadGlobalParameters(panel,control,event,callbackData,eventData1,eventData2);
3952
      UploadGlobalParameters(panel,control,event,callbackData,eventData1,eventData2);
3875
      break;
3953
      break;
3876
  }
3954
  }
3877
  return 0;
3955
  return 0;
3878
}
3956
}
3879
 
3957
 
3880
double erf(double x, double par[], int npar) {
3958
double erf(double x, double par[], int npar) {
3881
  double y=0;
3959
  double y=0;
3882
  double x0= (x-par[0])*par[1];
3960
  double x0= (x-par[0])*par[1];
3883
  Erf(x0,&y);
3961
  Erf(x0,&y);
3884
  return (y);
3962
  return (y);
3885
}
3963
}
3886
 
3964
 
3887
int CVICALLBACK FitH2D (int panel, int control, int event,
3965
int CVICALLBACK FitH2D (int panel, int control, int event,
3888
                        void *callbackData, int eventData1, int eventData2) {
3966
                        void *callbackData, int eventData1, int eventData2) {
3889
  char name[MAX_PATHNAME_LEN];
3967
  char name[MAX_PATHNAME_LEN];
3890
 
3968
 
Line 3892... Line 3970...
3892
    case EVENT_COMMIT: {
3970
    case EVENT_COMMIT: {
3893
      //sprintf(name ,"C:\\root\\bin\\root.exe");
3971
      //sprintf(name ,"C:\\root\\bin\\root.exe");
3894
      int status;
3972
      int status;
3895
      char dfile[MAX_PATHNAME_LEN];
3973
      char dfile[MAX_PATHNAME_LEN];
3896
      char efile[MAX_PATHNAME_LEN];
3974
      char efile[MAX_PATHNAME_LEN];
3897
 
3975
 
3898
      status = FileSelectPopup ("data", "*.th2d", ".th2d",
3976
      status = FileSelectPopup ("data", "*.th2d", ".th2d",
3899
                                "Izberi datoteko s histogramom",
3977
                                "Izberi datoteko s histogramom",
3900
                                VAL_LOAD_BUTTON, 0, 0, 1, 0, efile);
3978
                                VAL_LOAD_BUTTON, 0, 0, 1, 0, efile);
3901
      EscapeString(efile,dfile);
3979
      EscapeString(efile,dfile);
3902
      sprintf(name ,"C:/root/bin/root.exe ../macros/sa02fit.cxx(\\\"%s\\\")", dfile);
3980
      sprintf(name ,"C:/root/bin/root.exe ../macros/sa02fit.cxx(\\\"%s\\\")", dfile);
3903
 
3981
 
3904
 
3982
 
3905
 
3983
 
3906
      sa02Printf("%s\n",name);
3984
      sa02Printf("%s\n",name);
3907
 
3985
 
3908
      LaunchExecutable(name);
3986
      LaunchExecutable(name);
3909
 
3987
 
3910
 
3988
 
3911
    }
3989
    }
3912
    break;
3990
    break;
3913
  }
3991
  }
3914
  return 0;
3992
  return 0;
3915
}
3993
}
Line 3918... Line 3996...
3918
 
3996
 
3919
  int ix= (int)x;
3997
  int ix= (int)x;
3920
  if (x>0) {
3998
  if (x>0) {
3921
    if (x - ix > 0.5 ) {
3999
    if (x - ix > 0.5 ) {
3922
      return ix+1;
4000
      return ix+1;
-
 
4001
    }
3923
    } else {
4002
    else {
3924
      return ix;
4003
      return ix;
3925
    }
4004
    }
-
 
4005
  }
3926
  } else {
4006
  else {
3927
    if (x - ix < -0.5 ) {
4007
    if (x - ix < -0.5 ) {
3928
      return ix-1;
4008
      return ix-1;
-
 
4009
    }
3929
    } else {
4010
    else {
3930
      return ix;
4011
      return ix;
3931
    }
4012
    }
3932
  }
4013
  }
3933
 
4014
 
3934
 
4015
 
Line 3997... Line 4078...
3997
 
4078
 
3998
  for (i=0; i<fNpoints; i++) {
4079
  for (i=0; i<fNpoints; i++) {
3999
    sumwx += fX[i]* fY[i];
4080
    sumwx += fX[i]* fY[i];
4000
    sumw += fY[i];
4081
    sumw += fY[i];
4001
    sumwx2 += fX[i]* fX[i]* fY[i];
4082
    sumwx2 += fX[i]* fX[i]* fY[i];
4002
 
4083
 
4003
  }
4084
  }
4004
  if (sumw <= 0) {
4085
  if (sumw <= 0) {
4005
    return 0;
4086
    return 0;
4006
  }
4087
  }
4007
  mean = sumwx/sumw;
4088
  mean = sumwx/sumw;
4008
  rms2 = fabs(sumwx2/sumw -mean*mean);
4089
  rms2 = fabs(sumwx2/sumw -mean*mean);
Line 4088... Line 4169...
4088
        for (iy=0; iy < npt; iy++ ) {
4169
        for (iy=0; iy < npt; iy++ ) {
4089
          datay[iy] = H2DGetBinContent(h2,ix,iy); // /H2DGetMax(h2);
4170
          datay[iy] = H2DGetBinContent(h2,ix,iy); // /H2DGetMax(h2);
4090
        }
4171
        }
4091
        FitGraph(fitmode, npt, datax , datay, fpar);
4172
        FitGraph(fitmode, npt, datax , datay, fpar);
4092
        mean[ix]=fpar[0];
4173
        mean[ix]=fpar[0];
4093
        rms[ix] =fpar[1];
4174
        rms[ix]=fpar[1];
4094
        offset         = offsets[ix*2];
4175
        offset         = offsets[ix*2];
4095
        fineadj_unipol = offsets[ix*2+1];
4176
        fineadj_unipol = offsets[ix*2+1];
4096
 
4177
 
4097
        x =  sa02getshift(offset, fineadj_unipol);
4178
        x =  sa02getshift(offset, fineadj_unipol);
4098
        x += (mean0-(mean[ix]+rms0*rms[ix]));
4179
        x += (mean0-(mean[ix]+rms0*rms[ix]));
Line 4171... Line 4252...
4171
            PCLK    -> 0 -> CLK_IN    (internal clock)
4252
            PCLK    -> 0 -> CLK_IN    (internal clock)
4172
      */
4253
      */
4173
 
4254
 
4174
      if (value==2) {
4255
      if (value==2) {
4175
        value=0x7600;
4256
        value=0x7600;
-
 
4257
      }
4176
      } else {
4258
      else {
4177
        value=0;
4259
        value=0;
4178
      }
4260
      }
4179
      VME_A32D32_W(address+4,value); // enable outputs
4261
      VME_A32D32_W(address+4,value); // enable outputs
4180
    }
4262
    }
4181
    sa02Printf("SizeOf(Double)=%d\n",sizeof(double));
4263
    sa02Printf("SizeOf(Double)=%d\n",sizeof(double));
Line 4304... Line 4386...
4304
  if (scanpar>10) {
4386
  if (scanpar>10) {
4305
    cid=P3_GREG;
4387
    cid=P3_GREG;
4306
    spar=scanpar-10;
4388
    spar=scanpar-10;
4307
    nch=4*4;
4389
    nch=4*4;
4308
 
4390
 
-
 
4391
  }
4309
  } else {
4392
  else {
4310
    cid=P3_CREG;
4393
    cid=P3_CREG;
4311
    spar=scanpar;
4394
    spar=scanpar;
4312
    nch=144*4;
4395
    nch=144*4;
4313
 
4396
 
4314
  }
4397
  }
Line 4506... Line 4589...
4506
  return 0;
4589
  return 0;
4507
}
4590
}
4508
 
4591
 
4509
 
4592
 
4510
 
4593
 
4511
int ProcessUserEvent(int pID, int rID,int mode){    
4594
int ProcessUserEvent(int pID, int rID,int mode) {
4512
    ThreadFunctionPtr mythread = NULL;
4595
  ThreadFunctionPtr mythread = NULL;
4513
    if (pID ==p1h && rID == P1_DAQ            ) mythread=daq;
4596
  if (pID ==p1h && rID == P1_DAQ            ) mythread=daq;
4514
    if (pID ==p1h && rID == P1_READOUT        ) mythread=daq_readonly;
4597
  if (pID ==p1h && rID == P1_READOUT        ) mythread=daq_readonly;
4515
    if (pID ==p1h && rID == P1_FPGAWRITE      ) mythread=MultiFpgaWrite;
4598
  if (pID ==p1h && rID == P1_FPGAWRITE      ) mythread=MultiFpgaWrite;
4516
    if (pID ==p1h && rID == P1_MULTIFPGAWRITE ) mythread=MultiFpgaWrite;
4599
  if (pID ==p1h && rID == P1_MULTIFPGAWRITE ) mythread=MultiFpgaWrite;
4517
    if (pID ==p1h && rID == P1_TESTING        ) mythread=Testing;
4600
  if (pID ==p1h && rID == P1_TESTING        ) mythread=Testing;
4518
    if (pID ==p2h && rID == P2_DAQ            ) mythread=daq_scan;
4601
  if (pID ==p2h && rID == P2_DAQ            ) mythread=daq_scan;
4519
    if (pID ==p6h && rID == MINIRICH_START    ) mythread=daq;
4602
  if (pID ==p6h && rID == MINIRICH_START    ) mythread=daq;
4520
    if (pID ==p2h && rID == P2_RUNSCRIPT      ) {
4603
  if (pID ==p2h && rID == P2_RUNSCRIPT      ) {
4521
      char scriptname[MAX_PATHNAME_LEN] ;
4604
    char scriptname[MAX_PATHNAME_LEN] ;
4522
 
4605
 
4523
      int status = FileSelectPopup ("./scripts/", "*.txt", "*.txt",
4606
    int status = FileSelectPopup ("./scripts/", "*.txt", "*.txt",
4524
                                    "Select Script file", VAL_LOAD_BUTTON, 0, 0,
4607
                                  "Select Script file", VAL_LOAD_BUTTON, 0, 0,
4525
                                    1, 0, scriptname);
4608
                                  1, 0, scriptname);
4526
      if (status) {
4609
    if (status) {
4527
        SetCtrlVal(p1h, P1_SCRIPTNAME, scriptname );
4610
      SetCtrlVal(p1h, P1_SCRIPTNAME, scriptname );
4528
        mythread=run_script;
4611
      mythread=run_script;
4529
      }
-
 
4530
    }
4612
    }
-
 
4613
  }
4531
    if (pID ==p1h && rID == P1_RUNSCRIPT      ) mythread=run_script;
4614
  if (pID ==p1h && rID == P1_RUNSCRIPT      ) mythread=run_script;
4532
    if (pID ==p3h && rID == P3_DAQ            ) mythread=daq_scanpar;
4615
  if (pID ==p3h && rID == P3_DAQ            ) mythread=daq_scanpar;
4533
    if (pID ==p4h && rID == P4_DAQ            ) mythread=V729_daq;
4616
  if (pID ==p4h && rID == P4_DAQ            ) mythread=V729_daq;
4534
    if (mythread!=NULL) {
4617
  if (mythread!=NULL) {
4535
      sa02Printf("New Thread panel=%d button=%d\n", pID, rID);
4618
    sa02Printf("New Thread panel=%d button=%d\n", pID, rID);
4536
      ctrl_c=0;
4619
    ctrl_c=0;
4537
      daq_on = 1;
4620
    daq_on = 1;
4538
      SetDimming(1);
4621
    SetDimming(1);
4539
      if (mode){
4622
    if (mode) {
4540
        CmtScheduleThreadPoolFunctionAdv (poolHandle, mythread, &rID,
4623
      CmtScheduleThreadPoolFunctionAdv (poolHandle, mythread, &rID,
4541
                                        DEFAULT_THREAD_PRIORITY,
4624
                                        DEFAULT_THREAD_PRIORITY,
4542
                                        EndOfThread,
4625
                                        EndOfThread,
4543
                                        EVENT_TP_THREAD_FUNCTION_END,
4626
                                        EVENT_TP_THREAD_FUNCTION_END,
4544
                                        NULL, RUN_IN_SCHEDULED_THREAD,
4627
                                        NULL, RUN_IN_SCHEDULED_THREAD,
4545
                                        &tfID);
4628
                                        &tfID);
4546
      } else {
-
 
4547
        mythread(NULL);
-
 
4548
      }  
-
 
4549
    }
-
 
4550
 
-
 
4551
    if ( pID==p1h && rID == P1_SLOWC ) {
-
 
4552
      uint32_t board;
-
 
4553
      GetCtrlVal(p1h,P1_BOARDNUMBER, &board);
-
 
4554
      SlowControl(board, NULL);
-
 
4555
    }
-
 
4556
    // if ( pID==p1h && rID == P1_STEPONE )       StepOne();
-
 
4557
    if ( pID==p1h && rID == P1_FEBTESTANA ) FebTestAna();
-
 
4558
    if ( pID==p1h && rID == P1_TEST )       FebTest();
-
 
4559
    if ( pID==p1h && rID == P1_MODULETEST ) ModuleTest();
-
 
4560
 
-
 
4561
    if ( pID==p1h && rID == P1_GET_FPGA_SERIAL ) {
-
 
4562
      int ison=0;
-
 
4563
      GetCtrlVal(p1h,P1_BOARDTYPE,&sa02BoardType);
-
 
4564
      for (int board=0; board<4; board++) {
-
 
4565
        char saddress[0xff]="";
-
 
4566
        GetCtrlVal(p1h, hapd_onoff[board], &ison);
-
 
4567
        sa02GetSerial(board, saddress);
-
 
4568
        sa02Printf("SERIAL FPGA = %s \n", saddress);
-
 
4569
        SetCtrlVal(p1h,fpga_serials[board],saddress);
-
 
4570
      }
-
 
4571
    };
-
 
4572
 
-
 
4573
    if ( ( pID==p1h && rID == P1_STOP )
-
 
4574
         || ( pID==p2h && rID == P2_STOP )
-
 
4575
         || ( pID==p3h && rID == P3_STOP )  
-
 
4576
         || ( pID==p6h && rID == MINIRICH_STOP )  
-
 
4577
         || ( pID==p4h && rID == P4_STOP ) ) {
-
 
4578
      sa02Printf("Stopping the  Thread %d\n", tfID);
-
 
4579
      ctrl_c=1;
-
 
4580
    }
4629
    }
4581
    if (pID ==p5h) {
4630
    else {
4582
      if (rID == P5_SET_DAC_HV_ON) set_dac(1);
-
 
4583
      if (rID == P5_SET_DAC_HV_OFF) set_dac(0);
-
 
4584
      if (rID == P5_SET_HV_ON) set_hv(1);
4631
      mythread(NULL);
4585
      if (rID == P5_SET_HV_OFF) set_hv(0);
-
 
4586
    }
4632
    }
-
 
4633
  }
-
 
4634
 
-
 
4635
  if ( pID==p1h && rID == P1_SLOWC ) {
-
 
4636
    uint32_t board;
-
 
4637
    GetCtrlVal(p1h,P1_BOARDNUMBER, &board);
-
 
4638
    SlowControl(board, NULL);
-
 
4639
  }
-
 
4640
  // if ( pID==p1h && rID == P1_STEPONE )       StepOne();
-
 
4641
  if ( pID==p1h && rID == P1_FEBTESTANA ) FebTestAna();
-
 
4642
  if ( pID==p1h && rID == P1_TEST )       FebTest();
-
 
4643
  if ( pID==p1h && rID == P1_MODULETEST ) ModuleTest();
-
 
4644
 
-
 
4645
  if ( pID==p1h && rID == P1_GET_FPGA_SERIAL ) {
-
 
4646
    int ison=0;
-
 
4647
    GetCtrlVal(p1h,P1_BOARDTYPE,&sa02BoardType);
-
 
4648
    for (int board=0; board<4; board++) {
-
 
4649
      char saddress[0xff]="";
-
 
4650
      GetCtrlVal(p1h, hapd_onoff[board], &ison);
-
 
4651
      sa02GetSerial(board, saddress);
-
 
4652
      sa02Printf("SERIAL FPGA = %s \n", saddress);
-
 
4653
      SetCtrlVal(p1h,fpga_serials[board],saddress);
-
 
4654
    }
-
 
4655
  };
-
 
4656
 
-
 
4657
  if ( ( pID==p1h && rID == P1_STOP )
-
 
4658
       || ( pID==p2h && rID == P2_STOP )
-
 
4659
       || ( pID==p3h && rID == P3_STOP )
-
 
4660
       || ( pID==p6h && rID == MINIRICH_STOP )
-
 
4661
       || ( pID==p4h && rID == P4_STOP ) ) {
-
 
4662
    sa02Printf("Stopping the  Thread %d\n", tfID);
-
 
4663
    ctrl_c=1;
-
 
4664
  }
-
 
4665
  if (pID ==p5h) {
-
 
4666
    if (rID == P5_SET_DAC_HV_ON) set_dac(1);
-
 
4667
    if (rID == P5_SET_DAC_HV_OFF) set_dac(0);
-
 
4668
    if (rID == P5_SET_HV_ON) set_hv(1);
-
 
4669
    if (rID == P5_SET_HV_OFF) set_hv(0);
-
 
4670
  }
4587
    return 0;
4671
  return 0;
4588
}
4672
}
4589
 
4673
 
4590
 
4674
 
4591
 
4675
 
4592
void CVICALLBACK QueueUserEventCallback (CmtTSQHandle queueHandle, unsigned int event, int value, void *callbackData) {
4676
void CVICALLBACK QueueUserEventCallback (CmtTSQHandle queueHandle, unsigned int event, int value, void *callbackData) {
4593
  //int *data= (int *)  callbackData;
4677
  //int *data= (int *)  callbackData;
4594
  int mdata[2];
4678
  int mdata[2];
Line 4603... Line 4687...
4603
                       LPSTR lpszCmdLine, int nCmdShow) {
4687
                       LPSTR lpszCmdLine, int nCmdShow) {
4604
 
4688
 
4605
  char title[0xFF];
4689
  char title[0xFF];
4606
  char saddress[0xff]="";
4690
  char saddress[0xff]="";
4607
  //uint32_t board;
4691
  //uint32_t board;
4608
  int i;
4692
  int i;
4609
  int status=0;
4693
  int status=0;
4610
 
4694
 
4611
  if (InitCVIRTE (hInstance, 0, 0) == 0) {
4695
  if (InitCVIRTE (hInstance, 0, 0) == 0) {
4612
    return -1;  /* out of memory */
4696
    return -1;  /* out of memory */
4613
  }
4697
  }
Line 4616... Line 4700...
4616
  CmtNewThreadPool (MAX_THREADS,  &poolHandle);
4700
  CmtNewThreadPool (MAX_THREADS,  &poolHandle);
4617
 
4701
 
4618
  if ( (status = CmtNewTSQ (1, 2*sizeof(int), OPT_TSQ_AUTO_FLUSH_ALL, &pTSQ)) <0)
4702
  if ( (status = CmtNewTSQ (1, 2*sizeof(int), OPT_TSQ_AUTO_FLUSH_ALL, &pTSQ)) <0)
4619
    printf("CmtNewTSQ cannot be installed\n");
4703
    printf("CmtNewTSQ cannot be installed\n");
4620
  if ( (status = CmtInstallTSQCallback (pTSQ, EVENT_TSQ_ITEMS_IN_QUEUE, EVENT_TSQ_QUEUE_SIZE,
4704
  if ( (status = CmtInstallTSQCallback (pTSQ, EVENT_TSQ_ITEMS_IN_QUEUE, EVENT_TSQ_QUEUE_SIZE,
4621
                                       QueueUserEventCallback, pTSQData, CmtGetCurrentThreadID(), NULL))  <0)
4705
                                        QueueUserEventCallback, pTSQData, CmtGetCurrentThreadID(), NULL))  <0)
4622
    printf("CmtInstallTSQCallback cannot be installed\n");  ;
4706
    printf("CmtInstallTSQCallback cannot be installed\n");  ;
4623
 
4707
 
4624
  SetStdioPort (CVI_STDIO_WINDOW );
4708
  SetStdioPort (CVI_STDIO_WINDOW );
4625
 
4709
 
4626
  readIni("febdaq.ini");
4710
  readIni("febdaq.ini");
Line 4641... Line 4725...
4641
  if ((p1h = LoadPanel (0, "sa02_CVI.uir", P1)) < 0) return -1;
4725
  if ((p1h = LoadPanel (0, "sa02_CVI.uir", P1)) < 0) return -1;
4642
  if ((p2h = LoadPanel (0, "sa02_CVI.uir", P2)) < 0) return -1;
4726
  if ((p2h = LoadPanel (0, "sa02_CVI.uir", P2)) < 0) return -1;
4643
  if ((p3h = LoadPanel (0, "sa02_CVI.uir", P3)) < 0) return -1;
4727
  if ((p3h = LoadPanel (0, "sa02_CVI.uir", P3)) < 0) return -1;
4644
  if ((p4h = V729_LoadPanel (0, "CAEN_V729\\CAEN_V729_CVI.uir", P4)) < 0) return -1;
4728
  if ((p4h = V729_LoadPanel (0, "CAEN_V729\\CAEN_V729_CVI.uir", P4)) < 0) return -1;
4645
  if ((p5h = LoadPanel (0, "sa02_CVI.uir", P5)) < 0) return -1;
4729
  if ((p5h = LoadPanel (0, "sa02_CVI.uir", P5)) < 0) return -1;
4646
  if ((p6h = LoadPanel (0, "ICFA\\minirich.uir", MINIRICH)) < 0) return -1;
4730
  if ((p6h = LoadPanel (0, "ICFA\\minirich.uir", MINIRICH)) < 0) return -1;
4647
  if ((pm1 = LoadMenuBar (p1h, "sa02_CVI.uir", MENU)) < 0)  return -1;
4731
  if ((pm1 = LoadMenuBar (p1h, "sa02_CVI.uir", MENU)) < 0)  return -1;
4648
 
4732
 
4649
  SetPanelMenuBar(p1h, pm1);
4733
  SetPanelMenuBar(p1h, pm1);
4650
  DisplayPanel (p1h);
4734
  DisplayPanel (p1h);
4651
 
4735
 
4652
  LoadUirHeader("sa02_CVI.h");
4736
  LoadUirHeader("sa02_CVI.h");
4653
  LoadUirHeader("CAEN_V729\\CAEN_V729_CVI.h");
4737
  LoadUirHeader("CAEN_V729\\CAEN_V729_CVI.h");
4654
 
4738
 
4655
  SetCtrlVal(p2h,P2_XC,gCENTER_X);
4739
  SetCtrlVal(p2h,P2_XC,gCENTER_X);
4656
  SetCtrlVal(p2h,P2_YC,gCENTER_Y);
4740
  SetCtrlVal(p2h,P2_YC,gCENTER_Y);
4657
 
4741
 
4658
  SetCtrlVal(p3h, P3_INPUTFILE,gFEBParam);
4742
  SetCtrlVal(p3h, P3_INPUTFILE,gFEBParam);
4659
  SetParametersFromFile(gFEBParam);
4743
  SetParametersFromFile(gFEBParam);
4660
 
4744
 
4661
  SetCtrlAttribute (p1h, P1_GRAPH2D, ATTR_CALLBACK_DATA, (void *)integer_val);
4745
  SetCtrlAttribute (p1h, P1_GRAPH2D, ATTR_CALLBACK_DATA, (void *)integer_val);
4662
  SetCtrlAttribute (p1h, P1_SLIY, ATTR_CALLBACK_DATA, (void *)integer_val);
4746
  SetCtrlAttribute (p1h, P1_SLIY, ATTR_CALLBACK_DATA, (void *)integer_val);
4663
  SetCtrlAttribute (p1h, P1_SLIX, ATTR_CALLBACK_DATA, (void *)integer_val);
4747
  SetCtrlAttribute (p1h, P1_SLIX, ATTR_CALLBACK_DATA, (void *)integer_val);
4664
  SetCtrlAttribute (p1h, P1_NSLIY, ATTR_CALLBACK_DATA, (void *)integer_val);
4748
  SetCtrlAttribute (p1h, P1_NSLIY, ATTR_CALLBACK_DATA, (void *)integer_val);
4665
  SetCtrlAttribute (p1h, P1_NSLIX, ATTR_CALLBACK_DATA, (void *)integer_val);
4749
  SetCtrlAttribute (p1h, P1_NSLIX, ATTR_CALLBACK_DATA, (void *)integer_val);
4666
 
4750
 
4667
  for (i=0; i<12; i++) {
4751
  for (i=0; i<12; i++) {
4668
    SetTraceAttributeEx (p1h, chart_control[0], i+1, ATTR_TRACE_LG_TEXT, (char *) slowcname[i]);
4752
    SetTraceAttributeEx (p1h, chart_control[0], i+1, ATTR_TRACE_LG_TEXT, (char *) slowcname[i]);
4669
  }
4753
  }
4670
 
4754
 
4671
  GetPanelAttribute (p1h, ATTR_TITLE, title );
4755
  GetPanelAttribute (p1h, ATTR_TITLE, title );
4672
  if (gVME_CONTROLLER == WIENER_VMEMM) sprintf( title, "%s + WIENER_VMEMM", title );
4756
  if (gVME_CONTROLLER == WIENER_VMEMM) sprintf( title, "%s + WIENER_VMEMM", title );
4673
  if (gVME_CONTROLLER == WIENER_VMUSB) sprintf( title, "%s + WIENER_VMUSB", title );
4757
  if (gVME_CONTROLLER == WIENER_VMUSB) sprintf( title, "%s + WIENER_VMUSB", title );
4674
  if (gVME_CONTROLLER == CAEN_V1718) sprintf( title, "%s + CAEN_V1718", title );
4758
  if (gVME_CONTROLLER == CAEN_V1718) sprintf( title, "%s + CAEN_V1718", title );
-
 
4759
  if (gVME_CONTROLLER == SIS3153_USB) sprintf( title, "%s + SIS3153_USB", title );
4675
  if (gCAEN_V1495) sprintf( title, "%s + CAEN_V1495", title );
4760
  if (gCAEN_V1495) sprintf( title, "%s + CAEN_V1495", title );
4676
  if (gCAEN_V288 ) sprintf( title, "%s + CAEN_V288", title );
4761
  if (gCAEN_V288 ) sprintf( title, "%s + CAEN_V288", title );
4677
 
4762
 
4678
  if (gBELLEPTS) {
4763
  if (gBELLEPTS) {
4679
    sprintf( title, "%s + BELLEPTS", title );
4764
    sprintf( title, "%s + BELLEPTS", title );
Line 4690... Line 4775...
4690
    SetCtrlVal(p1h,hapd_onoff[i],gFEBMask&(1<<i));
4775
    SetCtrlVal(p1h,hapd_onoff[i],gFEBMask&(1<<i));
4691
  SetCtrlVal(p1h,P1_SENDSWTRIG,gTriggerType);
4776
  SetCtrlVal(p1h,P1_SENDSWTRIG,gTriggerType);
4692
  SetCtrlVal(p1h,P1_TPENB,CHECK_BIT(uInterf,0));
4777
  SetCtrlVal(p1h,P1_TPENB,CHECK_BIT(uInterf,0));
4693
 
4778
 
4694
  sa02SetAddress(strtoul (saddress,NULL,0));
4779
  sa02SetAddress(strtoul (saddress,NULL,0));
4695
 
4780
 
4696
  LedCB(p1h,P1_PTSLED,EVENT_COMMIT, NULL,0,0);
4781
  LedCB(p1h,P1_PTSLED,EVENT_COMMIT, NULL,0,0);
4697
 
4782
 
4698
 
4783
 
4699
  StdIo2FileCB (p1h, P1_STDIOLOG, EVENT_COMMIT, NULL,0,0);
4784
  StdIo2FileCB (p1h, P1_STDIOLOG, EVENT_COMMIT, NULL,0,0);
4700
  InitColors();
4785
  InitColors();
4701
  sa02Printf("Panels=%d %d %d %d\n", p1h, p2h,p3h,p4h);
4786
  sa02Printf("Panels=%d %d %d %d\n", p1h, p2h,p3h,p4h);
4702
  GetCtrlVal(p1h,P1_VERBOSE,&sa02Verbose);
4787
  GetCtrlVal(p1h,P1_VERBOSE,&sa02Verbose);
4703
 
4788
 
4704
  LoadElectronicMap("eid2hapdxy.map");
4789
  LoadElectronicMap("eid2hapdxy.map");
4705
  icfa_Init();
4790
  icfa_Init();
4706
 
4791
 
4707
 
4792
 
4708
  loop_on=1;
4793
  loop_on=1;
4709
  do {
4794
  do {
4710
    GetUserEvent (1, &pID, &rID);  
4795
    GetUserEvent (1, &pID, &rID);
4711
    ProcessUserEvent(pID,rID,1);
4796
    ProcessUserEvent(pID,rID,1);
-
 
4797
  }
4712
  } while (loop_on);
4798
  while (loop_on);
4713
 
4799
 
4714
  CmtDiscardThreadPool (poolHandle);
4800
  CmtDiscardThreadPool (poolHandle);
4715
  DiscardPanel (p4h);
4801
  DiscardPanel (p4h);
4716
  DiscardPanel (p3h);
4802
  DiscardPanel (p3h);
4717
  DiscardPanel (p2h);
4803
  DiscardPanel (p2h);
4718
  DiscardPanel (p1h);
4804
  DiscardPanel (p1h);
4719
 
4805
 
4720
  if (gMIKRO_PORT) MIKRO_Close ();
4806
  if (gMIKRO_PORT) MIKRO_Close ();
4721
 
4807
 
4722
 
4808
 
4723
  VME_STOP();
4809
  VME_STOP();
4724
  return 0;
4810
  return 0;
4725
}
4811
}
4726
 
4812
 
4727
int CVICALLBACK ResetStdOut (int panel, int control, int event,
4813
int CVICALLBACK ResetStdOut (int panel, int control, int event,
4728
                             void *callbackData, int eventData1, int eventData2) {
4814
                             void *callbackData, int eventData1, int eventData2) {
4729
  switch (event) {
4815
  switch (event) {
Line 4734... Line 4820...
4734
  return 0;
4820
  return 0;
4735
}
4821
}
4736
 
4822
 
4737
int CVICALLBACK TrgHvMon (int panel, int control, int event,
4823
int CVICALLBACK TrgHvMon (int panel, int control, int event,
4738
                          void *callbackData, int eventData1, int eventData2) {
4824
                          void *callbackData, int eventData1, int eventData2) {
4739
  switch (event) {
4825
  switch (event) {
4740
    case EVENT_TIMER_TICK:
4826
    case EVENT_TIMER_TICK:
4741
      hvmon=1;
4827
      hvmon=1;
4742
      break;
4828
      break;
4743
  }
4829
  }
4744
  return 0;
4830
  return 0;
Line 4813... Line 4899...
4813
  dummyword = 0;
4899
  dummyword = 0;
4814
  do {
4900
  do {
4815
    if( (c = getc( fp )) == EOF ) {
4901
    if( (c = getc( fp )) == EOF ) {
4816
      if(verbose) {
4902
      if(verbose) {
4817
        sa02Printf( "EOF detected. Exit.\n");
4903
        sa02Printf( "EOF detected. Exit.\n");
4818
 
4904
 
4819
 
4905
 
4820
      }
4906
      }
4821
      return -1;
4907
      return -1;
4822
    }
4908
    }
4823
    (c == 0xff) ? dummyword++ : (dummyword=0);
4909
    (c == 0xff) ? dummyword++ : (dummyword=0);
-
 
4910
  }
4824
  } while( dummyword < 4 );
4911
  while( dummyword < 4 );
4825
 
4912
 
4826
  if( mode == SLAVESERIAL_MODE ) {
4913
  if( mode == SLAVESERIAL_MODE ) {
4827
    if(verbose)  sa02Printf("slave serial mode");
4914
    if(verbose)  sa02Printf("slave serial mode");
4828
    Pts_write( addr +ADR_MODE, mode );
4915
    Pts_write( addr +ADR_MODE, mode );
4829
    Pts_erase( addr, verbose );
4916
    Pts_erase( addr, verbose );
4830
    for( j=0; j<32; j++ ) Pts_write( addr + ADR_CFG, 0x1 );
4917
    for( j=0; j<32; j++ ) Pts_write( addr + ADR_CFG, 0x1 );
4831
    while( (c=getc(fp))!=EOF ) {
4918
    while( (c=getc(fp))!=EOF ) {
4832
      for( j=0; j<8; j++ ) Pts_write( addr + ADR_CFG, (c>>(7-j))&0x1 );
4919
      for( j=0; j<8; j++ ) Pts_write( addr + ADR_CFG, (c>>(7-j))&0x1 );
4833
      nchar++;
4920
      nchar++;
4834
      if( verbose && nchar%byte_per_dot==0 ) {
4921
      if( verbose && nchar%byte_per_dot==0 ) {
4835
        sa02Printf( "#");
4922
        sa02Printf( "#");
4836
      }
4923
      }
4837
    }
4924
    }
-
 
4925
  }
4838
  } else if( mode == SELECTMAP_MODE ) {
4926
  else if( mode == SELECTMAP_MODE ) {
4839
    if( verbose ) sa02Printf("select map mode\n");
4927
    if( verbose ) sa02Printf("select map mode\n");
4840
    Pts_write( addr + ADR_MODE, SELECTMAP_MODE );
4928
    Pts_write( addr + ADR_MODE, SELECTMAP_MODE );
4841
    Pts_erase( addr, verbose );
4929
    Pts_erase( addr, verbose );
4842
    VME_MWRST();
4930
    VME_MWRST();
4843
    for( j=0; j<4; j++ ) Pts_Mwrite( addr + ADR_CFG, 0xff );
4931
    for( j=0; j<4; j++ ) Pts_Mwrite( addr + ADR_CFG, 0xff );
Line 4855... Line 4943...
4855
        sa02Printf( "#");
4943
        sa02Printf( "#");
4856
 
4944
 
4857
      }
4945
      }
4858
    }
4946
    }
4859
    VME_MWEXEC();
4947
    VME_MWEXEC();
-
 
4948
  }
4860
  } else {
4949
  else {
4861
    if(verbose) {
4950
    if(verbose) {
4862
      sa02Printf( "\nIllegal mode\n");
4951
      sa02Printf( "\nIllegal mode\n");
4863
 
4952
 
4864
    }
4953
    }
4865
    return -1;
4954
    return -1;
Line 4878... Line 4967...
4878
    sa02Printf("CSR1(0x%02x)=0x%04x\n",ADR_CSR1,csr1_value&0xffff);
4967
    sa02Printf("CSR1(0x%02x)=0x%04x\n",ADR_CSR1,csr1_value&0xffff);
4879
  }
4968
  }
4880
  if(csr1_value&CSR1_DONE) {
4969
  if(csr1_value&CSR1_DONE) {
4881
    if(verbose) sa02Printf("configure complete.\n");
4970
    if(verbose) sa02Printf("configure complete.\n");
4882
    return 1;
4971
    return 1;
-
 
4972
  }
4883
  } else {
4973
  else {
4884
    if(verbose)  sa02Printf("configure not complete.");
4974
    if(verbose)  sa02Printf("configure not complete.");
4885
    return -1;
4975
    return -1;
4886
  }
4976
  }
4887
}
4977
}
4888
 
4978
 
4889
 
4979
 
4890
int CVICALLBACK PtsDownloadCB (int panel, int control, int event,
4980
int CVICALLBACK PtsDownloadCB (int panel, int control, int event,
4891
                               void *callbackData, int eventData1, int eventData2) {
4981
                               void *callbackData, int eventData1, int eventData2) {
4892
  char filename[254];
4982
  char filename[254];
4893
  int mode=0;
4983
  int mode=0;
4894
  char saddress[0xFF];
4984
  char saddress[0xFF];
4895
  uint32_t addr;
4985
  uint32_t addr;
4896
 
4986
 
4897
 
4987
 
4898
  switch (event) {
4988
  switch (event) {
4899
    case EVENT_COMMIT:
4989
    case EVENT_COMMIT:
4900
      GetCtrlVal(p3h,P3_ADDRESS, saddress);
4990
      GetCtrlVal(p3h,P3_ADDRESS, saddress);
4901
      addr=  strtoul (saddress,NULL,0);
4991
      addr=  strtoul (saddress,NULL,0);
4902
      GetCtrlVal(p3h,P3_PTSFIRMWARE,filename);
4992
      GetCtrlVal(p3h,P3_PTSFIRMWARE,filename);
4903
      GetCtrlVal(p3h,P3_PTSMODE,&mode);
4993
      GetCtrlVal(p3h,P3_PTSMODE,&mode);
4904
      if(VME_CONNECTED() >=0 ) {
4994
      if(VME_CONNECTED() >=0 ) {
4905
        Pts_configure_bit( addr , filename, mode,  1 );
4995
        Pts_configure_bit( addr , filename, mode,  1 );
-
 
4996
      }
4906
      } else {
4997
      else {
4907
        MessagePopup ("Warning", "Connect VME!!");
4998
        MessagePopup ("Warning", "Connect VME!!");
4908
      }
4999
      }
4909
      break;
5000
      break;
4910
  }
5001
  }
4911
  return 0;
5002
  return 0;