Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

SctApiModify.cxx

00001 
00008 #include <iostream>
00009 #include <cmath>
00010 
00011 #include "processor.h"
00012 
00013 #include "ABCD/ABCDscans.h"
00014 #include "primParams.h"     // This has MVAR variables which are shared with PIXEL
00015 #include "ABCD/ABCDchip.h"
00016 
00017 #include "SctApi.h"
00018 #include "crate.h"
00019 #include "utility.h"
00020 
00021 #include "extraScans.h"
00022 #include "ConfigurationUtility.h"
00023 
00024 using namespace std;
00025 
00026 namespace SctApi {
00027 
00028 void SctApi::modifyABCDMask(UINT32 mid, UINT32* mask) {
00029   {
00030     boost::mutex::scoped_lock lock(log().mutex());
00031     log() << "modifyABCDMask on " << mid << "\n";
00032   }
00033 
00034   ABCDModule *module = lookupConfig(mid);
00035 
00036   if(module) {
00037     for(int c=0; c<12; c++) {
00038       for(int m=0; m<4; m++) {
00039         module->chip[c].basic.mask[m] = mask[c*4+m];
00040       }
00041     }
00042   } 
00043 }
00044 
00045 void SctApi::modifyABCDRC(UINT32 mid, UINT32 chip, UINT16 index, FLOAT32 p0, FLOAT32 p1, FLOAT32 p2){
00046   {
00047     boost::mutex::scoped_lock lock(log().mutex());
00048     log() << "modifyABCDRC on " << mid << " " << chip << "\n";
00049   }
00050   ABCDModule *module = lookupConfig(mid);
00051 
00052   if(module) {
00053     module->chip[chip].caldata.rc_function = index;
00054     module->chip[chip].caldata.rc_params[0]=p0;
00055     module->chip[chip].caldata.rc_params[1]=p1;
00056     module->chip[chip].caldata.rc_params[2]=p2;
00057   }
00058 }
00059 
00060 void SctApi::modifyABCDTrims(UINT32 mid, UINT8* trims) {
00061   {
00062     boost::mutex::scoped_lock lock(log().mutex());
00063     log() << "modifyABCDTrims on " << mid << "\n";
00064   }
00065 
00066   ABCDModule *module = lookupConfig(mid);
00067 
00068   if(module) {
00069     for(int c=0; c<12; c++) {
00070       for(int t=0; t<128; t++) {
00071         module->chip[c].trim[t] = trims[c*128+t];
00072       }
00073     }
00074   }
00075 }
00076 
00077 #define fToInt(val) ((int)((val)+0.5))
00078 
00079 void SctApi::modifyABCDVar(UINT32 typ, FLOAT32 val) {
00080   {
00081     boost::mutex::scoped_lock lock(log().mutex());
00082     log() << "modifyABCDVar (all)\n";
00083   }
00084 
00085   cout << "Modify var on all modules: setting " << typ << " to " << val << endl;
00086 
00087 #warning "Suggest using ConfigUtility::variableType to find BOC_GLOBAL_CONFIG_VAR's"
00088 
00089   switch(typ) {
00090     // Global BOC registers
00091   case SCT_SCAN_BOC_BPM_PHASE:
00092   case SCT_SCAN_BOC_BREG_PHASE:
00093   case SCT_SCAN_BOC_V0_PHASE:
00094   case SCT_SCAN_BOC_V1_PHASE:
00095   case SCT_SCAN_BOC_V_PHASES:
00096   case SCT_SCAN_BOC_VRN_FINE:
00097 
00098   case SCT_SCAN_TX_CHANNELS:
00099   case SCT_SCAN_RAW_TX_CHANNELS:
00100     {
00101       cout << "Calling modifyBOCParam on all crates for " << typ << " " << val << endl;
00102 
00103       try {
00104         for(list<RodLabel>::const_iterator rl = rodList.begin();
00105             rl!=rodList.end();
00106             rl++){
00107           getCrate()->modifyBOCParam(typ, fToInt(val), false);
00108         }
00109       } catch(CrateException &c) {
00110         cout << "CrateException: " << c.what() << endl;
00111       }
00112       break;
00113     }
00114 
00115   default:
00116     // Module level parameters
00117     for(map<UINT32, ABCDModule>::const_iterator iter = moduleMap.begin();
00118         iter != moduleMap.end();
00119         iter ++) {
00120       modifyABCDVar(iter->first, typ, val);
00121     }
00122     break;
00123   }
00124 }
00125 
00126 void SctApi::modifyABCDVar(UINT32 mid, UINT32 typ, FLOAT32 val) {
00127   {
00128     boost::mutex::scoped_lock lock(log().mutex());
00129     log() << "modifyABCDVar (module " << mid << ") " << typ << " " << val << "\n";
00130   }
00131 
00132 #warning "Suggest using ConfigUtility::variableType to pick out BOC params"
00133 
00134   switch(typ) {
00135     // First some module parameters (BOC)
00136   case ST_RX_DELAY:
00137   case ST_RX_DELAY0:
00138   case ST_RX_DELAY1:
00139   case ST_RX_THRESHOLD:
00140   case ST_RX_THRESHOLD0:
00141   case ST_RX_THRESHOLD1:
00142   case ST_TX_CURRENT:
00143   case ST_TX_MARKSPACE:
00144   case ST_TX_DELAY:
00145   case ST_TX_COARSE:
00146   case ST_TX_FINE:
00147 
00148     // Global BOC registers
00149   case SCT_SCAN_BOC_BPM_PHASE:
00150   case SCT_SCAN_BOC_BREG_PHASE:
00151   case SCT_SCAN_BOC_V0_PHASE:
00152   case SCT_SCAN_BOC_V1_PHASE:
00153   case SCT_SCAN_BOC_V_PHASES:
00154   case SCT_SCAN_BOC_VRN_FINE:
00155 
00156   case SCT_SCAN_TX_CHANNELS:
00157   case SCT_SCAN_RAW_TX_CHANNELS:
00158     {
00159       unsigned int partition, crate, rod, channel;
00160       Utility::getpcrc(mid, partition, crate, rod, channel);
00161 
00162       cout << "Calling BOCCard method for module " << mid << " " << typ << " " << val << endl;
00163 
00164       try {
00165         // Do channel mapping
00166         getCrate()->modifyBOCParam(rod, channel, typ, fToInt(val), false);
00167       } catch(CrateException &c) {
00168         cout << "CrateException: " << c.what() << endl;
00169       }
00170       break;
00171     }
00172 
00173   default:
00174     ABCDModule *mConf = lookupConfig(mid);
00175     if (mConf){
00176       ConfigUtility::modifyVar(mConf, typ, val);
00177     }else{
00178       cout << "No module configuration to change\n";
00179       return;
00180     }
00181   }
00182 }
00183 
00184 void SctApi::modifyABCDVar(UINT32 mid, UINT32 chip, UINT32 typ, FLOAT32 val) {
00185   {
00186     boost::mutex::scoped_lock lock(log().mutex());
00187     log() << "modifyABCDVar (module " << mid << ": chip " << chip  << ") " << typ << " " << val << "\n";
00188   }
00189 
00190   ABCDModule *mConf = lookupConfig(mid);
00191 
00192   if(!mConf) {
00193     cout << "No module configuration to change\n";
00194     return;
00195   }
00196 
00197   ConfigUtility::modifyVar(mConf, chip, typ, val);
00198 }
00199 
00200 }

Generated on Fri Sep 16 18:01:58 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5