00001
00007 #include "CAENVMElib.h"
00008 #include <iostream>
00009 #include <stdlib.h>
00010 #include <stdint.h>
00011 #include <sstream>
00012
00013 using namespace std;
00014
00015
00016 int main(int argc, const char** argv)
00017 {
00018 char message[100];
00019 CVErrorCodes err;
00020
00021 err = CAENVME_SWRelease(message);
00022 cout<<"CAEN software version: "<<message<<endl;
00023
00024
00025
00026 int nboards=0;
00027 uint32_t min = 0;
00028 uint32_t max = 0xFFFF0000;
00029 if(argc >= 2){
00030 stringstream minstream(argv[1]);
00031 minstream>>hex>>min;
00032 }
00033 if(argc == 3){
00034 stringstream maxstream(argv[2]);
00035 maxstream>>hex>>max;
00036 }
00037 if(argc > 3)
00038 cerr<<"Usage: "<<argv[0]<<" [min_address] [max_address]\n";
00039
00040 if(max > 0xFFFF0000) max = 0xFFFF0000;
00041
00042 for (int link = 0; link < 10; link++) {
00043 cerr << "trying link " << link << endl << endl;
00044 int32_t handle;
00045 err = CAENVME_Init(cvV2718, link, 0, &handle);
00046 if(err != cvSuccess){
00047 cerr<<"Cannot connect to V2718 controller!\n";
00048 continue;
00049 }
00050 CAENVME_SystemReset(handle);
00051 int dummy=0;
00052 dummy=system("sleep 1");
00053 err = CAENVME_BoardFWRelease(handle, message);
00054 if(err != cvSuccess){
00055
00056 cout<<"Error when attempting to communicate with this board\n";
00057 return 1;
00058 }
00059 cout<<"\tFirmware Release: "<<message<<endl;
00060 err = CAENVME_DriverRelease(handle,message);
00061 cout<<"\tDriver Release: "<<message<<endl;
00062
00063 for( uint32_t address = min; address <= max; address += 0x10000){
00064
00065
00066
00067
00068 uint32_t data;
00069 err = CAENVME_ReadCycle(handle, address+0xF030, &data,cvA32_U_DATA,cvD32);
00070 if(err != cvSuccess){
00071 CAENVME_DeviceReset(0);
00072 continue;
00073 }
00074
00075 nboards++;
00076 cout<<"-------------------------------------------\n";
00077 cout<<"Board found at address "<<hex<<showbase
00078 <<address<<dec<<noshowbase<< " link " << link << endl;
00079
00080 cout<<"\tBoard Type: ";
00081 if(data == 0x10)
00082 cout<<"V1724LC"<<endl;
00083 else if(data == 0x11)
00084 cout<<"V1724"<<endl;
00085 else if(data == 0x40)
00086 cout<<"V1724B"<<endl;
00087 else if(data == 0x12)
00088 cout<<"V1724C"<<endl;
00089 else if(data == 0x41)
00090 cout<<"V1724D"<<endl;
00091 else if(data == 0x42)
00092 cout<<"V1724E"<<endl;
00093 else if(data == 0x43)
00094 cout<<"V1724F"<<endl;
00095 else
00096 cout<<"Unknown board type"<<endl;
00097
00098
00099 uint32_t rev0, rev1, rev2, rev3;
00100 err = CAENVME_ReadCycle(handle, address+0xf04c, &rev0, cvA32_U_DATA,cvD32);
00101 err = CAENVME_ReadCycle(handle, address+0xf048, &rev1, cvA32_U_DATA,cvD32);
00102 err = CAENVME_ReadCycle(handle, address+0xf044, &rev2, cvA32_U_DATA,cvD32);
00103 err = CAENVME_ReadCycle(handle, address+0xf040, &rev3, cvA32_U_DATA,cvD32);
00104
00105 cout<<"Hardware revision: "<<rev0<<" "<<rev1<<" "<<rev2<<" "<<rev3<<"\n";
00106 err = CAENVME_ReadCycle(handle, address+0x108C, &data, cvA32_U_DATA,cvD32);
00107 const char* months[13] = {"Jan", "Feb", "Mar", "Apr", "May", "June",
00108 "July", "Aug", "Sep", "Nov", "Dec", "MonthError"};
00109 uint32_t month = ((data>>24)&0xF);
00110 if(month > 12) month = 12;
00111 cout<<"\tChannel AMC Firmware: "<<((data>>8) & 0xFF)<<"."<<(data & 0xFF)
00112 <<" released "<<((data>>16) & 0xFF)<<" "
00113 <<months[month]
00114 <<" 200"<<((data>>28) & 0xF)<<endl;
00115 err = CAENVME_ReadCycle(handle, address+0x8124, &data, cvA32_U_DATA,cvD32);
00116 cout<<"\tROC Firmware: "<<((data>>8) & 0xFF)<<"."<<(data & 0xFF)
00117 <<" released "<<((data>>16) & 0xFF)<<" "
00118 <<months[((data>>24) & 0xF)]
00119 <<" 200"<<((data>>28) & 0xF)<<endl;
00120 err = CAENVME_ReadCycle(handle, address+0xEF04, &data, cvA32_U_DATA,cvD32);
00121 cout<<"\tVME status: "<<data<<"\n";
00122 err = CAENVME_ReadCycle(handle, address+0xF088, &data, cvA32_U_DATA,cvD32);
00123 cout<<"\tVCXO clock: "<<(data ? "1 GHz" : "500 MHz" )<<"\n";
00124 err = CAENVME_ReadCycle(handle, address+0x8104, &data, cvA32_U_DATA,cvD32);
00125 cout<<"\tBoard status: "<<(data&0x1FF)<<"\n\t"<<boolalpha
00126 <<"\tPLL lock: "<<((data>>7)&1)<<"\n\t"
00127 <<"\tPLL Bypass mode: "<<((data>>6)&1)<<"\n\t"
00128 <<"\tClock source: "<<(((data>>5)&1) ? "External" : "Internal")<<"\n\t"
00129 <<"\tReady for run: "<<((data>>8)&1)<<"\n"<<noboolalpha;
00130 }
00131 err = CAENVME_End(handle);
00132 cout<<"****************************************\n";
00133 cout<<nboards<<" total boards found.\n";
00134 }
00135 return 0;
00136 }