From: <ro...@us...> - 2003-09-10 11:09:47
|
Update of /cvsroot/nscldaq/clients/Readout In directory sc8-pr-cvs1:/tmp/cvs-serv1500 Modified Files: VmeModule.h VmeModule.cpp Nimout.cpp CVMEptr.h CVME.h CaenIO.h CaenIO.cpp Log Message: Provide support for VME interfaces without mmap capability (e.g. Wiener). Index: VmeModule.h =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/VmeModule.h,v retrieving revision 3.1 retrieving revision 3.2 diff -C2 -d -r3.1 -r3.2 *** VmeModule.h 22 Mar 2003 04:03:46 -0000 3.1 --- VmeModule.h 10 Sep 2003 11:09:43 -0000 3.2 *************** *** 304,320 **** public: enum Space { ! a16d16, ! a24d16, ! a24d32, ! a32d32 }; ! private: CVME<UShort_t> m_CVME; // the CVME map to the module public: // Default constructors CVmeModule(Space space, UInt_t base, UInt_t length, int nCrate = 0); ! CVmeModule(CVME<UShort_t>& am_CVME); // Copy Constructor --- 304,329 ---- public: enum Space { ! a16d16 = 0, ! a24d16 = 1, ! a24d32 = 2, ! a32d32 = 3, ! geo = 4 }; ! private: ! #ifdef WienerVME ! Space m_nSpace; ! UInt_t m_nBase; ! UInt_t m_nLength; ! Int_t m_nCrate; ! void* m_pDriver; ! #else CVME<UShort_t> m_CVME; // the CVME map to the module + #endif public: // Default constructors CVmeModule(Space space, UInt_t base, UInt_t length, int nCrate = 0); ! // CVmeModule(CVME<UShort_t>& am_CVME); // Copy Constructor *************** *** 331,334 **** --- 340,345 ---- // Mutator function + + #ifndef WienerVME protected: void setCVME(CVME<UShort_t> aCVME) *************** *** 343,346 **** --- 354,367 ---- return m_CVME; } + #else + protected: + void setDriver(void* pDriver) { + m_pDriver = pDriver; + } + public: + void* getDriver() { + return m_pDriver; + } + #endif // Public member functions *************** *** 352,356 **** --- 373,390 ---- virtual void pokew(UShort_t word, UInt_t nOffset); virtual void pokel(ULong_t lword, UInt_t nOffset); + + // Utility: + protected: + void CopyToMe(const CVmeModule& rModule); }; #endif + + + + + + + + + Index: VmeModule.cpp =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/VmeModule.cpp,v retrieving revision 3.2 retrieving revision 3.3 diff -C2 -d -r3.2 -r3.3 *** VmeModule.cpp 14 Aug 2003 17:55:30 -0000 3.2 --- VmeModule.cpp 10 Sep 2003 11:09:43 -0000 3.3 *************** *** 294,298 **** --- 294,327 ---- #include "VmeModule.h" + #ifdef WienerVME + #include <CVMEInterface.h> + #include <WienerAPI.h> + + #endif + #include <string> + /* + The array below maps from address space selectors to CVME<UShort_t + selectors or, in the caes of WienerVME controllers, the address modifier. + + */ + static const + #ifdef WienerVME + CVMEInterface::AddressMode AmodTable[] = { + CVMEInterface::A16, + CVMEInterface::A24, + CVMEInterface::A24, + CVMEInterface::A32, + CVMEInterface::GEO + }; + #else + CVME<UShort_t>::VmeSpace AmodTable[] = { + CVME<UShort_t>::a16d16, + CVME<UShort_t>::a24d16, + CVME<UShort_t>::a24d32, + CVME<UShort_t>::a32d32, + CVME<UShort_t>::geo + }; + #endif /* \fn CVmeModule::CVmeModule(Space space, UInt_t base, UInt_t length) *************** *** 310,354 **** */ CVmeModule::CVmeModule(Space space, UInt_t base, UInt_t length, int nCrate) { try { switch(space) { case a16d16: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a16d16, base, length, ! nCrate); break; case a24d16: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a24d16, base, length, ! nCrate); break; case a24d32: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a24d32, base, length, ! nCrate); break; case a32d32: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a32d32, base, length, ! nCrate); } } ! catch (CMmapError& me) { ! cerr << me.ReasonText() << endl; ! exit(-1); } } - /* - \fn CVmeModule::CVmeModule(CVME<UShort_t>& amCVME) - - Operation Type: - Basic constructor - - Purpose: - Constructs an object of type CVmeModule - - \param CVME<UShort_t>& am_CVME - a CVME object from which to construct this - */ - CVmeModule::CVmeModule(CVME<UShort_t>& am_CVME) - { - m_CVME = am_CVME; - } /* --- 339,374 ---- */ CVmeModule::CVmeModule(Space space, UInt_t base, UInt_t length, int nCrate) + #ifdef WienerVME + : m_nSpace(space), + m_nBase(base), + m_nLength(length), + m_nCrate(nCrate), + m_pDriver(0) + #endif { + #ifdef WienerVME + m_pDriver = CVMEInterface::Open(AmodTable[space], m_nCrate); + #else try { switch(space) { case a16d16: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a16d16, base, length); break; case a24d16: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a24d16, base, length); break; case a24d32: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a24d32, base, length); break; case a32d32: ! m_CVME = CVME<UShort_t>(CVME<UShort_t>::a32d32, base, length); } } ! catch(...) { ! throw string("Invalid address space in CVMEModule constructor"); } + #endif } /* *************** *** 366,370 **** CVmeModule::CVmeModule(const CVmeModule& aCVmeModule) { ! m_CVME = aCVmeModule.m_CVME; } --- 386,391 ---- CVmeModule::CVmeModule(const CVmeModule& aCVmeModule) { ! ! CopyToMe(aCVmeModule); } *************** *** 385,389 **** if(this == &aCVmeModule) return *this; ! m_CVME = aCVmeModule.m_CVME; return *this; } --- 406,410 ---- if(this == &aCVmeModule) return *this; ! CopyToMe(aCVmeModule); return *this; } *************** *** 403,407 **** --- 424,435 ---- CVmeModule::operator== (const CVmeModule& aCVmeModule) { + #ifdef WienerVME + return ((m_nSpace == aCVmeModule.m_nSpace) && + (m_nBase == aCVmeModule.m_nBase) && + (m_nLength== aCVmeModule.m_nLength) && + (m_nCrate == aCVmeModule.m_nCrate)); + #else return (m_CVME == aCVmeModule.m_CVME); + #endif } *************** *** 422,431 **** CVmeModule::peekb(UInt_t offset=0) { ! try { ! return (UChar_t)((m_CVME.asChar())[offset]); ! } ! catch(CRangeError& re) { ! throw re; ! } } --- 450,462 ---- CVmeModule::peekb(UInt_t offset=0) { ! #ifdef WienerVME ! UChar_t byte; ! WienerVMEInterface::ReadBytes(m_pDriver, ! m_nBase + offset, ! &byte, 1); ! return byte; ! #else ! return (UChar_t)((m_CVME.asChar())[offset]); ! #endif } *************** *** 446,456 **** CVmeModule::peekw(UInt_t offset=0) { ! try { ! volatile UShort_t* c = (m_CVME.asShort()); ! return (UShort_t)(c[offset]); ! } ! catch(CRangeError& re) { ! throw re; ! } } --- 477,490 ---- CVmeModule::peekw(UInt_t offset=0) { ! #ifdef WienerVME ! UShort_t word; ! WienerVMEInterface::ReadWords(m_pDriver, ! m_nBase + offset * sizeof(UShort_t), ! &word, 1); ! return word; ! #else ! volatile UShort_t* c = (m_CVME.asShort()); ! return (UShort_t)(c[offset]); ! #endif } *************** *** 471,480 **** CVmeModule::peekl(UInt_t offset=0) { ! try { ! return (ULong_t)((m_CVME.asLong())[offset]); ! } ! catch(CRangeError& re) { ! throw re; ! } } --- 505,517 ---- CVmeModule::peekl(UInt_t offset=0) { ! #ifdef WienerVME ! ULong_t lword; ! WienerVMEInterface::ReadLongs(m_pDriver, ! m_nBase + offset * sizeof(UInt_t), ! &lword, 1); ! return lword; ! #else ! return (ULong_t)((m_CVME.asLong())[offset]); ! #endif } *************** *** 495,504 **** CVmeModule::pokeb(UChar_t byte, UInt_t nOffset) { ! try { (m_CVME.asChar())[nOffset] = byte; ! } ! catch(CRangeError& re) { ! throw re; ! } } --- 532,541 ---- CVmeModule::pokeb(UChar_t byte, UInt_t nOffset) { ! #ifdef WienerVME ! WienerVMEInterface::ReadBytes(m_pDriver, m_nBase + nOffset, ! &byte, 1); ! #else (m_CVME.asChar())[nOffset] = byte; ! #endif } *************** *** 519,528 **** CVmeModule::pokew(UShort_t word, UInt_t nOffset) { ! try { (m_CVME.asShort())[nOffset] = word; ! } ! catch(CRangeError& re) { ! throw re; ! } } --- 556,566 ---- CVmeModule::pokew(UShort_t word, UInt_t nOffset) { ! #ifdef WienerVME ! WienerVMEInterface::WriteWords(m_pDriver, ! m_nBase + nOffset*sizeof(UShort_t), ! &word, 1); ! #else (m_CVME.asShort())[nOffset] = word; ! #endif } *************** *** 543,551 **** CVmeModule::pokel(ULong_t lword, UInt_t nOffset) { ! try { ! (m_CVME.asLong())[nOffset] = lword; ! } ! catch(CRangeError& re) { ! throw re; ! } } --- 581,606 ---- CVmeModule::pokel(ULong_t lword, UInt_t nOffset) { ! #ifdef WienerVME ! WienerVMEInterface::WriteLongs(m_pDriver, ! m_nBase + nOffset * sizeof(ULong_t), ! &lword, 1); ! #else ! (m_CVME.asLong())[nOffset] = lword; ! #endif ! } ! /*! ! Utility function to copy an object to me. ! */ ! void ! CVmeModule::CopyToMe(const CVmeModule& rModule) ! { ! #ifdef WienerVME ! m_nSpace = rModule.m_nSpace; ! m_nBase = rModule.m_nBase; ! m_nLength= rModule.m_nLength; ! m_nCrate = rModule.m_nCrate; ! m_pDriver= (rModule.m_pDriver); ! #else ! m_CVME = rModule.m_CVME; ! #endif } Index: Nimout.cpp =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/Nimout.cpp,v retrieving revision 3.1 retrieving revision 3.2 diff -C2 -d -r3.1 -r3.2 *** Nimout.cpp 22 Mar 2003 04:03:29 -0000 3.1 --- Nimout.cpp 10 Sep 2003 11:09:43 -0000 3.2 *************** *** 315,330 **** } - /*! - \fn CNimout(CVME<UShort_t>& am_CVME) - - Purpose: - Constructor for type CNimout. Defines a VmeModule - with a previously constructed CVME object. - - \param CVME<UShort_t>& am_CVME - the CVME to use for this - */ - CNimout::CNimout(CVME<UShort_t>& am_CVME) : - CVmeModule(am_CVME) - { } /*! --- 315,318 ---- Index: CVMEptr.h =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/CVMEptr.h,v retrieving revision 3.1 retrieving revision 3.2 diff -C2 -d -r3.1 -r3.2 *** CVMEptr.h 22 Mar 2003 04:03:28 -0000 3.1 --- CVMEptr.h 10 Sep 2003 11:09:43 -0000 3.2 *************** *** 565,568 **** --- 565,571 ---- m_pHandle = CVMEInterface::Open(CVMEInterface::A32, crate); break; + case 4: + m_pHandle = CVMEInterface::Open(CVMEInterface::GEO , crate); + break; default: cerr << "Default condition in CVMEptr<T> CreateMap switch " << space Index: CVME.h =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/CVME.h,v retrieving revision 3.1 retrieving revision 3.2 diff -C2 -d -r3.1 -r3.2 *** CVME.h 22 Mar 2003 04:03:28 -0000 3.1 --- CVME.h 10 Sep 2003 11:09:43 -0000 3.2 *************** *** 320,324 **** a24d16, a24d32, ! a32d32 }; --- 320,325 ---- a24d16, a24d32, ! a32d32, ! geo }; Index: CaenIO.h =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/CaenIO.h,v retrieving revision 3.1 retrieving revision 3.2 diff -C2 -d -r3.1 -r3.2 *** CaenIO.h 22 Mar 2003 04:03:28 -0000 3.1 --- CaenIO.h 10 Sep 2003 11:09:43 -0000 3.2 *************** *** 301,304 **** --- 301,307 ---- Change log: $Log$ + Revision 3.2 2003/09/10 11:09:43 ron-fox + Provide support for VME interfaces without mmap capability (e.g. Wiener). + Revision 3.1 2003/03/22 04:03:28 ron-fox Added SBS/Bit3 device driver. *************** *** 340,345 **** // Default constructor CCaenIO(UInt_t base, int nCrate = 0); CCaenIO(CVME<UShort_t>& am_CVME); ! // Copy constructor CCaenIO(const CCaenIO& aCCaenIO); --- 343,349 ---- // Default constructor CCaenIO(UInt_t base, int nCrate = 0); + #ifndef WienerVME CCaenIO(CVME<UShort_t>& am_CVME); ! #endif // Copy constructor CCaenIO(const CCaenIO& aCCaenIO); *************** *** 369,377 **** void SetECL(UShort_t value); void ClearECL(); short* getInputPointer() const; short* getPulsedOutputPointer() const; short* getLatchedOutputPointer() const; short* getECLOutputPointer() const; ! }; --- 373,382 ---- void SetECL(UShort_t value); void ClearECL(); + #ifndef WienerVME short* getInputPointer() const; short* getPulsedOutputPointer() const; short* getLatchedOutputPointer() const; short* getECLOutputPointer() const; ! #endif }; Index: CaenIO.cpp =================================================================== RCS file: /cvsroot/nscldaq/clients/Readout/CaenIO.cpp,v retrieving revision 3.1 retrieving revision 3.2 diff -C2 -d -r3.1 -r3.2 *** CaenIO.cpp 22 Mar 2003 04:03:28 -0000 3.1 --- CaenIO.cpp 10 Sep 2003 11:09:43 -0000 3.2 *************** *** 299,302 **** --- 299,305 ---- Change log: $Log$ + Revision 3.2 2003/09/10 11:09:43 ron-fox + Provide support for VME interfaces without mmap capability (e.g. Wiener). + Revision 3.1 2003/03/22 04:03:28 ron-fox Added SBS/Bit3 device driver. *************** *** 347,366 **** /*! - \fn CCaenIO(CVME<UShort_t>& am_CVME) - - Purpose: - Basic constructor for type CCaenIO. Defines a - VmeModule with a previously constructed CVME - object. Initializes the output mask to zero. - - \param CVME<UShort_t>& am_CVME - the CVME to use for this construction - */ - CCaenIO::CCaenIO(CVME<UShort_t>& am_CVME) : - CVmeModule(am_CVME), - m_nOutputMask(0) - { - } - - /*! \fn CCaenIO(const CCaenIO& aCCaenIO) --- 350,353 ---- *************** *** 431,444 **** { if((input < 0) || (input > 3)) { ! cerr << "\nInvalid input on read operation. Must be between 0 and 3.\n"; ! exit(0); ! } ! ! try { ! return ((peekw(5) & (1 << input)) ? 1 : 0); ! } ! catch(CRangeError& re) { ! throw re; } } --- 418,424 ---- { if((input < 0) || (input > 3)) { ! throw string("\nInvalid input on read operation. Must be between 0 and 3.\n"); } + return ((peekw(5) & (1 << input)) ? 1 : 0); } *************** *** 538,542 **** pokew(0, 3); } ! /*! Get a pointer to the input register. This is --- 518,522 ---- pokew(0, 3); } ! #ifndef WienerVME /*! Get a pointer to the input register. This is *************** *** 580,581 **** --- 560,562 ---- } + #endif |