00001 #include "StrobeDelayConfigUpdater.h" 00002 #include "ConfigUpdaterManager.h" 00003 #include "../SctApiAccessException.h" 00004 #include "../SctApiCall.h" 00005 00006 #include "Sct_SctApi/SctApi.hh" 00007 #include "Sct/SctParameters.h" 00008 #include "Sct/SctNames.h" 00009 #include "SctData/StrobeDelayTestResult.h" 00010 #include "Sct/AbcdScans.h" 00011 00012 using namespace Sct; 00013 using namespace SctData; 00014 00015 namespace SctCalibrationController { 00016 00017 bool StrobeDelayConfigUpdater::inMap = ConfigUpdaterManager::instance().setUpdater("SctData::StrobeDelayTestResult", shared_ptr<ConfigUpdater> (new StrobeDelayConfigUpdater())); 00018 00019 void StrobeDelayConfigUpdater::update(const TestResult& testresult, Sct_SctApi::SctApiIPC_ptr api) const { 00020 const StrobeDelayTestResult& t = dynamic_cast<const StrobeDelayTestResult&> (testresult); 00021 unsigned long mid = getMID(t, api); 00022 SctNames::Mrs() << "CC_UPDATE" << MRS_TEXT("CalibrationController updating StrobeDelay") << MRS_PARAM<long>("ModuleID", mid) << MRS_DIAGNOSTIC << ENDM; 00023 00024 if (t.getNOptima()!=Sct::nChipModule) { 00025 Sct::SctNames::Mrs() << "CC_NO_UPDATE" << MRS_TEXT("Wrong data format in StrobeDelayConfigUpdater") << MRS_ERROR << ENDM; 00026 return; 00027 } 00028 for (unsigned ichip=0; ichip<Sct::nChipModule; ++ichip) { 00029 APICALL(api, modifyABCDChipVar(mid, ichip, ST_STROBE_DELAY, (double)t.getOptimum(ichip)), "StrobeDelayConfigUpdater failed to set delay") 00030 } 00031 } 00032 00033 }