#include // for printf() #include // for exit() #include "CAENVMElib.h" //#include void Usage(char *progname) { fprintf(stderr,"Usage -l Link -b BdNum -a VMEBaseAddress\n%s \n",progname); exit(1); } int main(int argc, char **argv) { int rc; CVBoardTypes V1718 = cvV1718; CVBoardTypes V2718 = cvV2718; CVBoardTypes A3818 = cvA3818; short Link = 0; short BdNum = 0; short Bd1718; int VMEHandle = 0; int DGTZHandle = 0; int LinkNum = 0; int BoardNum = 0; char SwRel[8]; char FwRel[8]; uint32_t VMEBaseAddress = 0x0; uint32_t VMEAddress; CVAddressModifier AddrMod = cvA32_U_DATA; CVDataWidth DataWidth= cvD32; // CAEN_DGTZ_BoardInfo_t BoardInfo; unsigned int Data32; unsigned short Data16; int i; if (argc > 1) { for(i=1;i <(argc-1);i++) { if ( (argv[i][0] == '-') || (argv[i][0] == '/') ) { switch(tolower(argv[i][1])) { case 'l': Link = atoi(argv[++i]); break; case 'b': BdNum = atoi(argv[++i]); break; case 'a': VMEBaseAddress = strtol(argv[++i], (char **)NULL, 16); break; default: Usage(argv[0]); break; } } else Usage(argv[0]); } } rc = CAENVME_SWRelease(SwRel); printf("CAENVME_SwRelease returns code %d\n", rc); printf("CAENVME software release %s\n", &SwRel[0]); printf("Testing using CAENVMELib: Link=%d; Board=%d, VMEBaseAddress = 0x%08x\n",Link,BdNum,VMEBaseAddress); printf("Looking for CAEN V2718 bridge\n"); rc = CAENVME_Init(V2718, Link, BdNum, &VMEHandle); if (rc < 0) { printf("CAENVME_Init returns code %d for V2718\n", rc); printf("CAEN V2718 not found so looking for CAEN A3818 bridge\n"); rc = CAENVME_Init(A3818, Link, BdNum, &VMEHandle); if (rc < 0) { printf("CAENVME_Init returns code %d for A3818\n", rc); printf("CAEN A3818 not found so looking for CAEN V1718 bridge\n"); for (Bd1718 = 0; Bd1718 < 4; Bd1718++) { rc = CAENVME_Init(V1718, Link, Bd1718, &VMEHandle); if (rc < 0) { printf("CAENVME_Init returns code %d for V1718 and Bd1718 %d\n", rc, Bd1718); } else {break;} } if (Bd1718 == 4) { printf("CAEN V1718 not found - NO useful hardware found\n"); VMEHandle = -1; return -1; } printf("CAENVME_Init connected to V1718 using Board %d Link %d and handle 0x%x\n", Bd1718, Link, VMEHandle); } else { printf("CAENVME_Init connected to A3818\n"); } } else { printf("CAENVME_Init connected to V2718\n"); } if (rc < 0) goto Next; rc = CAENVME_BoardFWRelease(VMEHandle, FwRel); printf("CAENVME_BoardFWRelease returns code %d\n", rc); printf("CAENVME firmware release %s\n", &FwRel[0]); VMEAddress = VMEBaseAddress + 0x108c; rc = CAENVME_ReadCycle(VMEHandle, VMEAddress, &Data32, AddrMod, DataWidth); if (rc == 0) { printf("CAENVME_ReadCycle accessing address 0x%08x returns 0x%08x\n", VMEAddress, Data32); } else { printf("CAENVME_ReadCycle accessing address 0x%08x returns code %d\n", VMEAddress, rc); } VMEAddress = VMEBaseAddress + 0x8124; rc = CAENVME_ReadCycle(VMEHandle, VMEAddress, &Data32, AddrMod, DataWidth); if (rc == 0) { printf("CAENVME_ReadCycle accessing address 0x%08x returns 0x%08x\n", VMEAddress, Data32); } else { printf("CAENVME_ReadCycle accessing address 0x%08x returns code %d\n", VMEAddress, rc); } rc = CAENVME_End(VMEHandle); printf("CAENVME_End returns code %d\n", rc); Next: /* LinkNum = Link; BoardNum = BdNum; printf("Testing using CAENDigitizerLib: LinkNum=%d; BoardNum=%d, VMEBaseAddress = 0x%08x\n",LinkNum,BoardNum,VMEBaseAddress); rc = CAEN_DGTZ_OpenDigitizer(CAEN_DGTZ_OpticalLink ,LinkNum, BoardNum, VMEBaseAddress, &DGTZHandle); if (rc == 0) { printf("CAEN_DGTZ_OpenDigitizer successful\n", rc); } else { printf("CAEN_DGTZ_OpenDigitizer returns code %d: No digitizer available\n", rc); } if (rc < 0) goto Done; rc = CAEN_DGTZ_GetInfo(DGTZHandle, &BoardInfo); printf("\nConnected to CAEN Digitizer Model %s\n", BoardInfo.ModelName); printf("\tROC FPGA Release is %s\n", BoardInfo.ROC_FirmwareRel); printf("\tAMC FPGA Release is %s\n", BoardInfo.AMC_FirmwareRel); VMEAddress = 0x108c; rc = CAEN_DGTZ_ReadRegister(DGTZHandle, VMEAddress, &Data32); if (rc == 0) { printf("CAEN_DGTZ_ReadRegister accessing address 0x%08x returns 0x%08x\n", VMEAddress, Data32); } else { printf("CAEN_DGTZ_ReadRegister accessing address 0x%08x returns code %d\n", VMEAddress, rc); } VMEAddress = 0x8124; rc = CAEN_DGTZ_ReadRegister(DGTZHandle, VMEAddress, &Data32); if (rc == 0) { printf("CAEN_DGTZ_ReadRegister accessing address 0x%08x returns 0x%08x\n", VMEAddress, Data32); } else { printf("CAEN_DGTZ_ReadRegister accessing address 0x%08x returns code %d\n", VMEAddress, rc); } rc = CAEN_DGTZ_CloseDigitizer(DGTZHandle); printf("CAEN_DGTZ_CloseDigitizer returns code %d\n", rc); */ Done: printf("Probe completed OK\n"); exit(0); }