00001 #include "TrimRangeConfigUpdater.h" 00002 #include "ConfigUpdaterManager.h" 00003 #include "../SctApiAccessException.h" 00004 #include "../SctApiCall.h" 00005 00006 #include "Sct_SctApi/Sct_SctApi.hh" 00007 #include "Sct/SctParameters.h" 00008 #include "Sct/SctNames.h" 00009 #include "SctData/TrimRangeTestResult.h" 00010 #include "SctData/DefectPrototype.h" 00011 #include "CommonWithDsp/ABCD/ABCDscans.h" 00012 00013 using namespace SctData; 00014 using namespace Sct; 00015 00016 namespace SctCalibrationController { 00017 00018 bool TrimRangeConfigUpdater::inMap = ConfigUpdaterManager::instance().setUpdater("SctData::TrimRangeTestResult", shared_ptr<TrimRangeConfigUpdater> (new TrimRangeConfigUpdater() ) ); 00019 00020 void TrimRangeConfigUpdater::update(const TestResult& testresult, Sct_SctApi_T_SctApi& api) const { 00021 const TrimRangeTestResult& t = dynamic_cast<const TrimRangeTestResult&> (testresult) ; 00022 unsigned long mid = getMID(t, api); 00023 short trims[nChannelModule]; 00024 00025 for (unsigned ichip=0; ichip<Sct::nChipModule; ++ichip) { 00026 APICALL(&api, modifyABCDChipVar(&st, mid, ichip, ST_TRIM_RANGE, t.chipTrim[ichip]->range), "TrimRangeConfigUpdater failed to set trim range") 00027 00028 for (unsigned ichannel=0; ichannel < nChannelChip; ++ ichannel){ 00029 trims[ichip*nChannelChip+ichannel] = t.chipTrim[ichip]->channelTrim.getAt(ichannel).value.trim ; 00030 } 00031 } 00032 00033 SctNames::Mrs() << "CC_UPDATE" << MRS_TEXT("CalibrationController updating trims") << MRS_PARAM<long>("ModuleID", mid) << MRS_INFORMATION << ENDM; 00034 Sct_SctApi_T_CharBlock data = _Sct_SctApi_T_CharBlock_sequence::Create(nChannelModule, trims); 00035 APICALL(&api, modifyABCDTrims(&st, mid, data), "TrimRangeConfigUpdater failed to set trims") 00036 00037 maskChannels(t, UNUSEABLE, api); 00038 } 00039 00040 }