00001 #include "pit_driver_foChannel.h"
00002 #include "pit_driver_opticalLink.h"
00003 #include "pit_def.h"
00004 #include "pit_comm.h"
00005
00006 using namespace std;
00007
00008
00009 pit_driver_foChannel::pit_driver_foChannel(unsigned int channelNumber, pit_comm* comm_engine, pit_driver_opticalLink* OpticalLink)
00010 {
00011
00012 parent_opticalLink = OpticalLink;
00013
00014
00015 foChannelNumber = channelNumber;
00016
00017 commFEE = comm_engine;
00018
00019
00020
00021 logDriverFoChannel = &(log4cpp::Category::getInstance("pitLog.driver"));
00022
00023
00024 }
00025
00026 pit_driver_foChannel::~pit_driver_foChannel() {
00027
00028 }
00029
00030 void pit_driver_foChannel::refresh(bool makeParentRead ) {
00031
00032
00033 if (makeParentRead)parent_opticalLink->readLinkSetting();
00034
00035
00036 int foMask= parent_opticalLink->getFoMask();
00037 this->masked = extractFromUInt32(foChannelNumber,1,foMask)?true:false;
00038 int udfPattern = parent_opticalLink->getUdfFoPattern();
00039 this->masked = extractFromUInt32(foChannelNumber,1,udfPattern)?true:false;
00040 };
00041
00042 inline unsigned int pit_driver_foChannel::getLinkNumber() const {return this->parent_opticalLink->getLinkNumber();}
00043
00044 inline unsigned int pit_driver_foChannel::getBoardNumber() const {return this->parent_opticalLink->getBoardNumber();}
00045
00046 inline t_sideCoord pit_driver_foChannel::getSide() const {return this->parent_opticalLink->getSide();}
00047
00048 inline unsigned int pit_driver_foChannel::getSector() const {return this->parent_opticalLink->getSector();}
00049
00050 inline unsigned int pit_driver_foChannel::getHalfStave() const {return this->parent_opticalLink->getHalfStave();}
00051
00052 void pit_driver_foChannel::setMask(bool mask) {
00053 int bitPos = foChannelNumber + FO_MASK_OFFSET;
00054
00055 UInt32 linkSetting=parent_opticalLink->readLinkSetting();
00056
00057 UInt32 newLinkSetting = insertIntoUInt32(bitPos,1,mask,linkSetting);
00058
00059 parent_opticalLink->writeLinkSetting(newLinkSetting);
00060 this->masked=mask;
00061
00062 };
00063
00064
00065
00066 void pit_driver_foChannel::forceHigh(bool yesNo) {
00067
00068 int bitPos = foChannelNumber + UDF_FO_OFFSET;
00069
00070 UInt32 linkSetting=parent_opticalLink->readLinkSetting();
00071
00072 UInt32 newLinkSetting = insertIntoUInt32(bitPos,1,yesNo,linkSetting);
00073
00074 parent_opticalLink->writeLinkSetting(newLinkSetting);
00075 this->forced = yesNo;
00076 };
00077
00078
00079
00080 inline bool pit_driver_foChannel::isRateValid(void) const{
00081
00082 UInt28 addressMax, addressMin;
00083 UInt32 maxCount, minCount;
00084
00085 if (parent_opticalLink->isInnerLayer()){
00086 addressMax=MAX_FASTOR_INNER_OFFSET + foChannelNumber;
00087 addressMin=MIN_FASTOR_INNER_OFFSET + foChannelNumber;
00088 }
00089 else{
00090 addressMax=MAX_FASTOR_OUTER_OFFSET + foChannelNumber;
00091 addressMin=MIN_FASTOR_OUTER_OFFSET + foChannelNumber;
00092 }
00093
00094 commFEE->PITReadWord(addressMax, &maxCount);
00095 commFEE->PITReadWord(addressMin, &minCount);
00096
00097 UInt32 counter = this->readCounter();
00098
00099 if ((counter < minCount) || (counter > maxCount)) return false;
00100 else return true;
00101
00102 };
00103
00104
00105 UInt32 pit_driver_foChannel::readCounter(void) const{
00106 UInt28 foCountStartAddress = parent_opticalLink->getBoardBaseAdress() +FASTOR_COUNTER_OFFSET;
00107 UInt19 address =foCountStartAddress + NUMBER_FO_CHANNELS*parent_opticalLink->getLinkNumber() + foChannelNumber;
00108 UInt32 counter;
00109
00110 commFEE->PITReadWord(address, &counter);
00111
00112 return counter;
00113 };
00114