#include #include #include "time.h" #include "libxxusb.h" #include #include #include #include "hvmon.h" #define V288_BUF 0x0 #define V288_STATUS 0x2 #define V288_TX 0x4 #define V288_RST 0x8 #define V288_ADDR 0x100500 #define V288_ADDRESS_MODIFIER 0x39 #define VM_USB_SERIAL_STRING "VM0023" #define TIMEOUT 100 #define V0SET 0 #define V1SET 1 #define I0SET 2 #define I1SET 3 #define VMAX 4 #define RUP 5 #define RDWN 6 #define TRIP 7 #define ISPRESENT(x) (ch_read[(x)].status&(1<<2)) #define MAKE_CODE(ch,cod) (((ch)<<8) | (cod)) #define SY403_HV 0x08 #define SY403_PWD 0x10 #define SY403_PDWN 0x20 #define SY403_ONOFF 0x40 #define SY403_PWON 0x80 int mswap(char *x){ char tmp; for (unsigned int i=0; i0) result = new char[nr]; for (int i=0;iIsValid()){ if (onech->IsData()) hvch.push_back(*onech); if (onech->IsTemplate()) hvinfo.push_back(*onech); } //std::cout << strOneLine << std::endl; } inFile.close(); } int HvMap::Print(){ hvinfo[0].PrintFormat(); for (unsigned int i=0; iHvSetParameter(moduleID,MAKE_CODE( channelID ,0x018), 0xFF00 ); unsigned short data=((SY403_PDWN)<<8) | SY403_PDWN; gCaenet->HvSetParameter(moduleID,MAKE_CODE( channelID ,0x018), data ); gCaenet->HvSetChannelName(moduleID,channelID, hvch[i].name ); for (int k=0;k< hvch[i].GetNPar();k++){ // V1set gCaenet->HvSetParameter(moduleID,MAKE_CODE( channelID ,0x11), 0); // V0set gCaenet->HvSetParameter(moduleID,MAKE_CODE( channelID ,0x13), 0); unsigned int value = hvch[i].GetParameter(k); int code = hvinfo[0].GetParameter(k); gCaenet->HvSetParameter(moduleID,MAKE_CODE( channelID ,code), value); } gCaenet->HvSetChannelOn(moduleID,channelID,0 ); gCaenet->HvEnableChannel(moduleID,channelID,1 ); } return 0; } int HvChannel::WriteFlag(int i,int value){ int code = par.GetCode(i); int data = SY403_HV << (i-8); gCaenet->HvSetParameter(db.moduleID,MAKE_CODE( db.channelID ,code), (data << 8)|data ); return 0; } int HvChannel::WriteValue(int i,int value){ if (par.GetType(i)) return WriteFlag(i,value); int code = par.GetCode(i); gCaenet->HvSetParameter(db.moduleID,MAKE_CODE( db.channelID ,code), value*par.GetUnit(i)); return 0; } int HvChannel::SetHvOn(int state){ gCaenet->HvSetChannelOn(db.moduleID,db.channelID,state ); return 0; } int HvMap::PrintGroupChannels(int n, unsigned short *data){ if (n==0) { printf("-------------------------------------------------------\n"); printf("ChID\tGrName\tChannel List\n"); printf("-------------------------------------------------------\n"); return 0; } char *cdata=(char *)data; printf("%s\t",cdata ); for (int i=6;iWriteRead(moduleID,MAKE_CODE(channelID, code),ndata,data,0); fprintf(fp,"Ch. %2d |",channelID); switch (code) { case 2: hvch[i].par.Fill(nr,data); hvch[i].par.Print(fp,nr); break; case 1: hvch[i].status.Fill(nr,data); hvch[i].status.Print(fp,nr); break; case 0x40: if (nr>0) PrintGroupChannels(nr,data); break; default: for (int j=0;jhvch.size();i++){ hvstatus *s=&(map->hvch[i].status); fprintf(fp,"SY403\t%d\t%d\t",i,s->timestamp); for (int j=0;jGetNVal();j++){ fprintf(fp,"%d\t",s->GetValue(j)); } fprintf(fp,"\n"); t0=s->timestamp; } for (unsigned int i=0;i<8;i++){ caenn470 *s=&(fMon[i]); fprintf(fp,"N470\t%d\t%d\t",i,t0); fprintf(fp,"%d\t%d\t%d\t%d\n",s->vmon,s->imon,s->vmax,s->status); } fclose(fp); return 0; } int hvmon::Monitor(FILE *fp){ fHvMap->hvch[0].status.Print(fp,0); fHvMap->HvReadChannel(fp,0x1); fHvMap->hvch[0].par.Print(fp,0); fHvMap->HvReadChannel(fp,0x2); gCaenet->WriteRead(3,0x1,100,(unsigned short *)(&fMon[0].vmon), 0); gCaenet->WriteRead(4,0x1,100,(unsigned short *)(&fMon[4].vmon), 0); return 0; } int hvmon::Connect(){ gDev= xxusb_serial_open(VM_USB_SERIAL_STRING); if(!gDev) { printf("\n\n No VM_USB present. Check if usbfs has rw permissions\n\nTEST FAILED"); return -1; } return 0; } int hvmon::Disconnect(){ xxusb_device_close(gDev); return 0; } int hvmon::ReloadDB(int hvinit){ fHvMap= new HvMap("hvmon.map"); fHvMap->Print(); if (hvinit) fHvMap->HvInit(); return 0; } int hvmon::Init( int hvinit){ gCaenet = new Caenet(gDev, V288_ADDRESS_MODIFIER ,V288_ADDR); gCaenet->Reset(); gCaenet->HvSetStatusAlarm(2,0); ReloadDB(hvinit); return 0; } int hvmon::Test(){ Init(1); fHvMap->PrintGroupChannels(0,(unsigned short *)NULL); fHvMap->HvReadChannel(stdout,0x40); Monitor(stdout); DumpData("data.txt"); unsigned short data[1000]; gCaenet->WriteRead(2,0x6,0,10,data, 1); //fHvMap->HvReadChannel(0x03); return 0; } int hvmon::Test(int argc, char **argv){ unsigned short data[1000]; int print=1; int cmd=0; int mdata=-2; int id=2; if (argc>1) id =strtol(argv[1],NULL,0); if (argc>2) cmd =strtol(argv[2],NULL,0); if (argc>3) mdata=strtol(argv[3],NULL,0); int ndata=0; if (mdata>=0) ndata = gCaenet->WriteRead(id,cmd,mdata,1000,data, print); else ndata = gCaenet->WriteRead(id,cmd,1000,data, print); printf("%s\n",gCaenet->HvIdent(2)); return 0; } #ifdef MMAIN int main (int argc, char **argv){ hvmon *a=new hvmon(); a->Connect(); if (argc>1) a->Test(argc,argv); else a->Test(); a->Disconnect(); return 0; } #endif