ConfigUpdater.cpp

00001 #include "ConfigUpdater.h"
00002 #include "../SctApiAccessException.h"
00003 #include "../SctApiCall.h"
00004 
00005 #include "Sct_SctApi/SctApi.hh"
00006 #include "Sct/OmniMarshalling.h"
00007 #include "SctData/TestResult.h"
00008 #include "SctData/DefectList.h"
00009 #include "SctData/ModuleConfiguration.h"
00010 #include "SctData/ModuleElement.h"
00011 
00012 using namespace SctData;
00013 using namespace Sct;
00014 
00015 namespace SctCalibrationController {
00016 
00017 unsigned long ConfigUpdater::getMID(const SctData::TestResult& t, Sct_SctApi::SctApiIPC_ptr api) const {
00018     unsigned long mid = 0;
00019     APIRETCALL(api, mid, findModuleSerial(t.getModuleName().c_str()), "ConfigUpdater failed to get MID")
00020     return mid;
00021 }
00022 
00023 void ConfigUpdater::maskChannels(const SctData::TestResult& t, DefectSeverity s, Sct_SctApi::SctApiIPC_ptr api) const {
00024     const DefectList::DefectCollection& defects = t.getDefects().getAllDefects();
00025 
00026     ModuleConfiguration config;
00027     for (unsigned int i=0; i<nChipModule; ++i) {
00028     config.getChipConfiguration(i).resetMask();
00029     }
00030 
00031     for (DefectList::DefectCollection::const_iterator i=defects.begin(); i!=defects.end(); ++i) {
00032     if (i->getPrototype().getSeverity() >= s)
00033         maskChannels(config, i->getModuleElement());
00034     }
00035 
00036     unsigned int maskArray[nChipModule*4];
00037     for (unsigned int chip=0; chip<nChipModule; ++chip) {
00038     for (unsigned int i=0; i<4; ++i)
00039         maskArray[chip*4 + i] = config.getABCDModule().chip[chip].basic.mask[i];
00040     }
00041 
00042     Sct_SctApi::DataBlock * newDataBlock = copyArrayToCorba<Sct_SctApi::DataBlock,UINT32>(maskArray, nChipModule*4);
00043     APICALL(api, modifyABCDMask(getMID(t,api),*newDataBlock), "ConfigUpdater could not update masks")
00044     delete newDataBlock;
00045 }
00046 
00047 void ConfigUpdater::maskChannels(ModuleConfiguration& config, ModuleElement element) const {
00048     for (unsigned int i=element.getFirst(); i<=element.getLast(); ++i) {
00049     config.getChipConfiguration(i/nChannelChip).mask(i%nChannelChip);
00050     }
00051 }
00052 
00053 }

Generated on Mon Feb 6 14:01:18 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6