fdhwlib  2.0.25
/home/kopmann/git-mirror/fdhwlib/fdhwlib/hw4/baseregister.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     baseregister.h  -  description
00003 
00004     begin                : Thu Jun 29 2000
00005     copyright            : (C) 2000 by Andreas Kopmann
00006     email                : kopmann@hpe.fzk.de
00007  ***************************************************************************/
00008 
00009 
00010 #ifndef _HW4_BASEREGISTER_H_INCLUDED
00011 #define _HW4_BASEREGISTER_H_INCLUDED
00012 
00013 
00014 #include <Pbus/Pbus.h>
00015 
00016 #include <hw4/baseregisteritem.h>
00017 
00018 namespace hw4 {
00019 
00148 class BaseRegister : public Pbus {
00149 public:
00156   BaseRegister(const char * name, int slotID, unsigned int regID, int r, int w, 
00157               int len = 1, int addrShift = 0, int blockLen = 1, bool useCache = true);
00158 
00161   virtual ~BaseRegister();
00162 
00165   virtual unsigned long read();
00166 
00169   virtual unsigned long read(int elem);
00170 
00174   virtual unsigned long read(int elem, int line); // TODO: Lesen mit Line= 0?
00175 
00177   virtual int getActiveBits(int elem = 0, unsigned long mask = 0xffffffff);
00178 
00180   virtual void readBlock(unsigned long * data);
00181 
00183   virtual void readBlock(unsigned long * data, unsigned long blockLen);
00184 
00186   virtual void readBlock(unsigned long * data,  unsigned long start, unsigned long blockLen);
00187 
00189   virtual void readBlock(int elem, unsigned long * data);
00190 
00192   virtual void readBlock(int elem, unsigned long * data, unsigned long blockLen);
00193 
00195   virtual void readBlock(int elem, unsigned long * data, unsigned long start, unsigned long blockLen);
00196 
00198   virtual void readElements(int elem0, int elem1, unsigned long * data);
00199 
00201   virtual void readElements(unsigned long * data = 0);
00202 
00203  
00208   virtual void write(unsigned long data);
00209   
00214   virtual void write(int elem, unsigned long data);
00215 
00220   virtual void write(int elem, int line, unsigned long data);
00221   
00226   virtual void write(unsigned long *data);
00227 
00228   virtual void writeBits(unsigned long data, unsigned long mask, int shift);
00229 
00230   virtual void writeBits(int elem, unsigned long data, unsigned long mask, int shift);
00231 
00232   virtual void writeBits(int elem, int line, unsigned long data, unsigned long mask, int shift);
00233 
00234   virtual void setBitsToHigh(unsigned long mask);
00235 
00236   virtual void setBitsToHigh(int elem, unsigned long mask);
00237 
00238   virtual void setBitsToLow(unsigned long mask);
00239 
00240   virtual void setBitsToLow(int elem, unsigned long mask);
00241 
00246   unsigned long getCache(int elem = 0, int line = 0);
00247   
00248   void getCache(unsigned long *data);
00249   
00251   void setCache(unsigned long data);
00252 
00253   void setCache(int elem, unsigned long data);
00254 
00255   //void setCache(unsigned long *data);
00256 
00257 
00259   virtual void setCacheBits(unsigned long data, unsigned long mask, int shift);
00260 
00261   virtual void setCacheBits(int elem, unsigned long data, unsigned long mask, int shift);
00262   
00264   virtual void writeCache();
00265 
00267   virtual void writeCache(int elem);
00268 
00270   virtual void writeCache(int elem , int line);
00271 
00272 
00280   virtual int writeBitsByName(char *name, unsigned long data);
00281   
00283   //TODO: HJ proposed a better way to handle the itemList (advantage: the number of items itemN
00284   //TODO: will always be correct because it is computed during creation of item list; and
00285   //TODO: itemList[.] is still available). -tb-
00286   //TODO: std::vector<hw4:BaseRegisterItem*> itemList;
00287   //TODO: example of creating register items:
00288   //TODO: itemList.push_back( triggerEnable = new BaseRegisterItem(this, "TriggerEnable", 0, 6) );
00289   //TODO: .. and replace itemN by unsigned int getNItems() {   return itemList.size(); }
00290   BaseRegisterItem **itemList;
00291   
00293   int itemN;  
00294 
00295   const char * getName();
00296 
00297   bool isReadable();
00298 
00299   bool isWriteable();
00300 
00302   unsigned long getAddr();
00303   
00304   virtual int getLength();
00305   
00306   int getBlockLength();
00307   
00308   unsigned long getAddrShift();
00309   
00314   bool isCacheEnabled();
00315   
00316 //private:
00317 protected:
00318   unsigned long addr;
00319   
00320   unsigned long addrShift;
00321   
00322   int len;
00323 
00324   int blockLen; 
00325 
00326   const char * name;
00327 
00328   bool readable;
00329 
00330   bool writeable;
00331   
00332   bool useCache;
00333   
00334   bool hasCBWOBits; //TODO: this will be needed in the future to implement handling of CBWO (cleared by writing 1) bits -tb-
00335   
00336   bool isMemory;
00337   
00343   unsigned long *cache;
00344 };
00345 
00346 } // namespace hw4
00347         
00348 #endif // _HW4_BASEREGISTER_H_INCLUDED
00349