boardcheck.cc

Go to the documentation of this file.
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   //check the software release
00021   err = CAENVME_SWRelease(message);
00022   cout<<"CAEN software version: "<<message<<endl;
00023   
00024   //check for boards on the allowed address space
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     //this is probably now a caen board...
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     //cout<<hex<<showbase<<"Checking address "<<address<<"...\n"
00065     //<<dec<<noshowbase;
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     //print out the board info
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on 20 Jun 2014 for daqman by  doxygen 1.6.1