QGUIEleRegsCtrl.hh

00001 /*
00002  * APOLLO: A complete DAQ and Online Data Analysis Framework for Cuore
00003  * 
00004  * A.Giachero created 28/05/07 - <Andrea.Giachero@ge.infn.it> 
00005  * 
00006  $ $Id: $
00007  * $Revision: $
00008  *
00009  * Class QGUIEleRegsCtr: Electronics Bit to Bit control 
00010  *
00011  */
00012 
00013 #ifndef _QGUI_ELE_REGS_CTRL_HH
00014 #define _QGUI_ELE_REGS_CTRL_HH
00015 
00016 
00017 
00018 // Apollo Includes
00019 #include "QGUIBaseFrame.hh"
00020 
00021 // Root Includes
00022 #include "Rtypes.h"
00023 
00024 // C/C++ Includes
00025 #include <iostream> 
00026 #include <vector>
00027 #include <map>
00028 
00029 
00030 // Used Classes
00031 class QFEChannel;
00032 class QBSChannel;
00033 class QEleBaseInterface;
00034 class QGUIChSelector;
00035 
00036 class TGNumberEntry;
00037 class TGTextButton;
00038 class TGTextEntry;
00039 class TGButtonGroup;
00040 class TGCheckButton;
00041 
00042 
00043 class QGUIEleRegsCtrl: public QGUIBaseFrame
00044 {
00045 
00046 public:
00047   
00048   // ctor
00049   QGUIEleRegsCtrl(const TGWindow *p, size_t Width, size_t Height,
00050                   unsigned int Basket, QEleBaseInterface* IFace);
00051   
00052   // ctor with fixed dimensions
00053   QGUIEleRegsCtrl(const TGWindow *p, unsigned int Basket, QEleBaseInterface* IFace);
00054 
00055   // dtor
00056   virtual ~QGUIEleRegsCtrl();
00057 
00058   // Get all Register values
00059   void GetAllRegisters();
00060 
00061   // Get single Register
00062   void GetSingleRegister(size_t qReg);
00063   
00064   // Set all Register values
00065   void SetAllRegisters();
00066 
00067   // Set single Register
00068   void SetSingleRegister(size_t qReg);
00069 
00070   // Update Text Entry Value for the register qReg
00071   void UpdateTextValue(size_t qReg);
00072 
00073   // Update Channel Selector
00074   void LoadChannel();
00075 
00076 
00077   void SwitchChannel();
00078 
00079 
00080 protected:
00081 
00082 
00083 private:
00084 
00085   // Register Codes
00086   enum QEleRegs_
00087   {
00088     QFE_MEM_A = 0,
00089     QFE_MEM_B = 1,
00090     QFE_DAC_L = 3,
00091     QFE_DAC_H = 2,
00092     QFE_MEM_C = 4,
00093     QFE_MEM_D = 5,
00094     QBS_MEM   = 6
00095   };
00096 
00097   enum QBtnsStatus_
00098   {
00099     QBTNS_ON =true,
00100     QBTNS_OFF=false
00101   };
00102 
00103   
00104   enum QDirection_
00105   {
00106     QUP  =true,
00107     QDOWN=false
00108   };
00109 
00110 
00111   // Constant Definition
00112   static const size_t gNumbOfBits = 8; // each register has 8 bits
00113   static const size_t gNumbOfRegs = 7; // 6 register for the Front-End
00114                                        // 1 register for the Bessel 
00115 
00116 
00117   // Register names
00118   std::vector<std::string> RegNames;
00119   
00120 
00121   // Current Channel Loaded
00122   size_t fCurrent;
00123   inline const size_t GetCurrentChannel() const  {return fCurrent;}
00124 
00125   // Update Address fields
00126   void UpdateAddressFields(size_t qChannel);
00127 
00128   // Update Register Check Buttons with right value
00129   void FromValueToPannel(size_t qReg, size_t qValue);
00130   
00131   // Get Register from Pannel and transform it in the
00132   // right value
00133   char FromPannelToValue(size_t qReg);
00134 
00135   
00136   // Channel Selector
00137   QGUIChSelector     *fSelector;
00138 
00139   // Address Text Entries
00140   TGTextEntry        *fFECrate;       // Front-End Crate   Text Entry;
00141   TGTextEntry        *fFEBoard;       // Front-End Board   Text Entry;
00142   TGTextEntry        *fFEChannel;     // Front-End Channel Text Entry;
00143   TGTextEntry        *fFESlot;        // Front-End Slot    Text Entry;
00144   TGTextEntry        *fBSCrate;       // Bessel Crate   Text Entry;
00145   TGTextEntry        *fBSBoard;       // Bessel Board   Text Entry;
00146   TGTextEntry        *fBSChannel;     // Bessel Channel Text Entry;
00147   TGTextEntry        *fBSSlot;        // Bessel Slot    Text Entry;
00148   
00149   // Buttons
00150   TGTextButton       *fExitBtn;       // Exit Button
00151   TGTextButton       *fGGetBtn;       // Global Get Button
00152   TGTextButton       *fGSetBtn;       // Global Set Button
00153 
00154 
00155   // Address Frames
00156   TGHorizontalFrame  *fSelChFrame;      // Frame containing channel selection
00157   TGVerticalFrame    *fLoadFrame;       //    
00158   TGVerticalFrame    *fFELabelFrame;    // Frame containing Front-End address labels
00159   TGVerticalFrame    *fFEEntriesFrame;  // Frame containing Front-End address entries 
00160   TGVerticalFrame    *fBSLabelFrame;    // Frame containing Bessel address labels
00161   TGVerticalFrame    *fBSEntriesFrame;  // Frame containing Bessel address entries 
00162   TGVerticalFrame    *fGBtnsFrame;      // Frame containing global getter and setter
00163   TGHorizontalFrame  *fLogoFrame;       // Frame containing CUORE Logo
00164 
00165   // Registers Frame
00166   TGHorizontalFrame  *fRegsFrame;              // Frame containing registers status
00167   TGVerticalFrame    *fRegFrame[gNumbOfRegs];  // Frame containing Front-End address entries
00168 
00169   TGButtonGroup      *fRegGroup[gNumbOfRegs];  // Group of Buttons
00170   
00171   // Buttons
00172   TGTextButton       *fSetBtn[gNumbOfRegs];    // Set Button (one for each register)
00173   TGTextButton       *fGetBtn[gNumbOfRegs];    // Get Button (one for each register)
00174 
00175   // Check Buttons (one for register bit)
00176   TGCheckButton      *fBit[gNumbOfRegs][gNumbOfBits];
00177 
00178   // Text Entry
00179   TGTextEntry        *fRegValue[gNumbOfRegs];  // Text Entry for Register Value
00180                                                // (one for each register)
00181 
00182 
00183   // Electronics Channels
00184   std::map<int,QFEChannel*> fFEChannels;
00185   std::map<int,QBSChannel*> fBSChannels;
00186   std::vector<unsigned int>       fActChannels;
00187 
00188   // Get Pointer to channel qChannel
00189   QBSChannel* GetBSChannel(size_t qChannel);
00190   QFEChannel* GetFEChannel(size_t qChannel);
00191 
00192 
00193   // Communication Interface Used
00194   QEleBaseInterface* fFace;
00195 
00196   
00197   // Create Window
00198   void PopUp();
00199 
00200              
00201   // Create Address Display
00202   void CreateDisplayAddress(TGVerticalFrame* qLabelFrame, TGVerticalFrame* qEntriesFrame,
00203                             TGTextEntry* &qText,
00204                             const std::string& qLabel);
00205 
00206   // Create Load Channel Frame
00207   void FillLoadChannel(TGVerticalFrame* qLabelFrame);
00208 
00209 
00210   // Fill Channel Selection Frame
00211   void FillChSelectionFrame(TGCompositeFrame* qParent);
00212 
00213   // Fill Registers Status Frame
00214   void FillRegsStatusFrame(TGCompositeFrame* qParent);
00215   
00216   // Initialization
00217   bool Init(const TGWindow *p,unsigned int Basket);
00218 
00219   // Get Mapping from database
00220   bool GetMapping(unsigned int Basket);
00221   
00222   // Dump infos on screen
00223   void DumpInfos();
00224 
00225   // Set register to electronics
00226   void SetRegister(size_t qChannel, size_t qReg);
00227 
00228   // Get register from electronics
00229   void GetRegister(size_t qChannel, size_t qReg);
00230 
00231   // Set Buttons Status (enabled or disabled)
00232   void   SetButtonsStatus(QBtnsStatus_ qStatus);
00233   inline void EnableButtons()  {return SetButtonsStatus(QBTNS_ON);}
00234   inline void DisableButtons() {return SetButtonsStatus(QBTNS_OFF);}
00235 
00236    
00237   // Set to zero all Pointers
00238   void Zeros();
00239 
00240   // To integrate QEleRegsCtrl class into the ROOT system
00241   ClassDef(QGUIEleRegsCtrl,0)
00242 
00243 };
00244 
00245 #endif // _QGUI_ELE_REGS_CTRL_HH

Generated on Tue Nov 16 10:49:54 2010 for CUORE Software by  doxygen 1.5.6