Main Page | Namespace List | Class List | File List | Namespace Members | Class Members | File Members

CounterDAQ.cc

Go to the documentation of this file.
00001 // DAQ program using PCI-6106 counter. //
00002 // yyamada wrote 2006Mar7 //
00003 // See "/usr/src/interface/gpg6106/i386/linux/help/help.pdf".
00004 #include "includes/Header.hh"
00005 //#include "include/ShmCommon.h"
00006 #include "../SharedMemory/SMcommon.h"
00007 #include "../SharedMemory/SMcommon.c"
00008 #include "includes/Const.hh"
00009 #include "functions/DataFileCtrl.cc"
00010 #include "functions/Init.cc"
00011 #include "functions/SetMode.cc"
00012 #include "functions/SetBaseClock.cc"
00013 #include "functions/MakeEnable.cc"
00014 #include "functions/SetMask.cc"
00015 #include "functions/SetEvent.cc"
00016 //#include "functions/ShmInit.cc" 
00017 //#include "functions/EraseShm.cc" 
00018 ofstream DATA;
00019 #include "functions/EventFunction.cc" 
00020 using namespace std;
00021 
00022 class CounterDAQ{
00023 private:
00024   SharedMemory sm;
00025   int shd_param_id;
00026   //  struct SHM_PARAM *param_ptr;
00027   double *data_ptr;
00028   key_t key;
00029   struct tm*ltm;
00030   char endtime[150];
00031   char *filename;
00032 public:
00033   CounterDAQ(){std::cout<<"CounterDAQ constructor"<<std::endl;};
00034   int run();
00035   void SetStartTime();
00036   void SetEndTime();
00037   void SetFileName(char *_filename){filename = _filename;}
00038   //  int Init(int *nDev,int *nCH,int *fRet);
00039 };
00040 
00041 
00042 void CounterDAQ::SetStartTime(){
00043   time_t t;
00044   time(&t);
00045   ltm = localtime(&t);
00046   sprintf(param_ptr->StartTime,"%04d-%02d-%02d %02d:%02d:%02d",
00047           ltm->tm_year+1900, ltm->tm_mon+1, ltm->tm_mday,
00048           ltm->tm_hour, ltm->tm_min, ltm->tm_sec);
00049   std::cout<<"start time  "<<param_ptr->StartTime<<std::endl;
00050 }
00051 
00052 void CounterDAQ::SetEndTime(){
00053   time_t t;
00054   time(&t);
00055   ltm = localtime(&t);
00056   sprintf(endtime,"%04d-%02d-%02d %02d:%02d:%02d",
00057           ltm->tm_year+1900, ltm->tm_mon+1, ltm->tm_mday,
00058           ltm->tm_hour, ltm->tm_min, ltm->tm_sec);
00059   std::cout<<"end time  "<<endtime<<std::endl;
00060 }
00061 
00062 int  CounterDAQ::run(){
00063   // 1. Share memory.
00064   key = ftok(KEYFILE_PATH,PROJ_CHAR);
00065   if( key == -1 ) {
00066     perror("ftok()");
00067     return 1;
00068   }
00069   sm.shm_initialize(key,sizeof(struct SHM_PARAM), &shd_param_id, (int *)&param_ptr);
00070   sm.shm_access(key,sizeof(struct SHM_PARAM),&shd_param_id,(int *)&param_ptr);
00071   param_ptr->shd_param_id = shd_param_id;
00072   param_ptr->nEvent=0;
00073   param_ptr->nOverFlow=0;
00074   for(int ii=0;ii<250;ii++)param_ptr->Hist[ii]=0;
00075   SetStartTime();
00076   FormalizeFile(&DATA,filename,param_ptr->StartTime);
00077 
00078   // 2. Pulse counter ops.
00079   int init;
00080   init = Init(&nDev,&nCH,&fRet);
00081   if(init==-1){
00082     std::cout<<"Device open failed....."<<std::endl;
00083     exit(-1);
00084   }
00085   SetMode(&nDev,&nCH,&fRet,&Mode,&Conf,&Line,&Clk);
00086   SetBaseClock(&nDev,&nCH,&fRet,&BaseClk);
00087   MakeCounterEnable(&nDev,&nCH,&fRet,&fEnable);
00088   SetMask(&nDev,&nCH,&fRet,&Emask,&Tmask);
00089   SetEvent(&nDev,&fRet,&EventFunction,&nEve,&Data4EF);
00090   usleep(10);
00091   PcntOutputDO(nDev, 0x1);
00092   PcntOutputDO(nDev, 0x0);
00093 
00094   // 3. Control from Ctrl.cc
00095   while(1){
00096     if( param_ptr->status == FIN ){
00097       break;
00098     }
00099     else if(param_ptr->status == PAUSE){
00100       MakeCounterEnable(&nDev,&nCH,&fRet,&fEnable0);
00101       SetMask(&nDev,&nCH,&fRet,&Emask0,&Tmask0);
00102     }
00103     else if(param_ptr->status == RESTART){
00104       PcntOutputDO(nDev, 0x1);
00105       PcntOutputDO(nDev, 0x0);
00106       MakeCounterEnable(&nDev,&nCH,&fRet,&fEnable);
00107       SetMask(&nDev,&nCH,&fRet,&Emask,&Tmask);
00108       param_ptr->status = 0 ;
00109     }
00110     sleep(1);
00111   }
00112 
00113   sm.erase_shm(param_ptr);
00114   SetEndTime();
00115   FinalizeFile(&DATA,endtime);
00116   PcntClose(nDev);
00117   return 0;
00118 }
00119 
00120 int main(int argc,char **argv){
00121   if(argc>=3){
00122     std::cout<<"too many argments!!!"<<std::endl;
00123     return 0;
00124   }
00125   if(argc==1){
00126     std::cout<<"please enter a filename!!!"<<std::endl;
00127     return 0;
00128   }
00129   std::cout<<argc<<std::endl;
00130   struct SHM_PARAM *param_ptr;
00131   CounterDAQ cd;
00132   cd.SetFileName(argv[1]);  
00133   cd.run();
00134   return 0;
00135 }

Generated on Sun Dec 14 23:32:46 2008 by doxygen 1.3.5