pit_driver_foChannel.cpp

Go to the documentation of this file.
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   // Initialize pointer to parent opticalLink object
00012   parent_opticalLink = OpticalLink;
00013 
00014   // Initialize number of the channel
00015   foChannelNumber = channelNumber;
00016   // Initialize pointer to communication class
00017   commFEE = comm_engine;
00018 
00019   
00020   // Initialize member pointer to logger and log a message
00021   logDriverFoChannel = &(log4cpp::Category::getInstance("pitLog.driver")); 
00022   
00023   //logDriverFoChannel->info("Constructor of pit_driver_foChannel, channel %d, link %d", foChannelNumber, mother_opticalLink->getLinkNumber());
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         //extracts the settings of this channel
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 // reads the counter connected to this fastor channel
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    

Generated on Sat Mar 29 22:55:54 2008 for pixelTrigger by  doxygen 1.5.0