00001
00002
00003
00004 #include "includes/Header.hh"
00005
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
00017
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
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
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
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 *)¶m_ptr);
00070 sm.shm_access(key,sizeof(struct SHM_PARAM),&shd_param_id,(int *)¶m_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
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
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 }