00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00035 #ifndef SCTPIXELROD_VMEINTERFACE_H
00036 #define SCTPIXELROD_VMEINTERFACE_H
00037 
00038 #include <vector>
00039 #include <string>
00040 
00041 #include "BaseException.h"
00042 
00043 namespace SctPixelRod {
00044 
00045 class VmePort;
00046 class VmeInterruptHandler;
00047 
00048 #define VMEADD_MISALIGNED      11001
00049 #define PCIADD_MISALIGNED      11002
00050 #define PCI_VME_MISALIGNED     11003
00051 #define DMAMEM_ALLOC_ERROR     11004
00052 #define BT_READ_ERROR          12000
00053 #define BT_WRITE_ERROR         13000
00054 
00056 class VmeException : public BaseException {
00057 public:
00058   enum ErrorClass {OK, INIT_ERROR, BUS_ERROR, MAP_ERROR, DMA_ERROR};
00060   VmeException(ErrorClass ec, long ecod, VmePort *port=NULL) : 
00061      BaseException("VME Error"), m_errorClass(ec), m_errorCode(ecod), m_port(port) {}; 
00062 
00064   ErrorClass getErrorClass() { return m_errorClass; };
00066   long getErrorCode() { return m_errorCode; };
00068   VmePort *getPort() { return m_port; };
00069 private:
00070   ErrorClass m_errorClass;
00071   int m_errorCode;
00072   VmePort *m_port;
00073 };
00074 
00075 class VmeInterface {
00076 public:
00077   enum AddrMod { A16, A24, A32 };
00078 
00080   VmeInterface() {};
00082   virtual ~VmeInterface() {};                                                                  
00083 
00085   virtual void declareInterruptHandler(VmeInterruptHandler &handler) = 0;
00087   virtual void cleanInterruptHandlers() = 0;
00089   virtual void removeInterruptHandler(VmeInterruptHandler &handler) = 0;
00091   virtual void activateSoftVector(unsigned char vect, unsigned char subvect) = 0; 
00093   virtual void reEnableInterrupt() = 0; 
00095   virtual void blockInterruptNotification() = 0; 
00097   virtual void resumeInterruptNotification() = 0; 
00099   virtual void setInterruptData(long data) = 0;
00101   virtual long getInterruptData() = 0;
00102   
00104   virtual long getBusErrors() = 0;
00106   virtual void busErrorReport() = 0;
00107   virtual void busErrorReport(const unsigned long handle) = 0;
00108   virtual void busErrorReport(VmePort &port) = 0;
00110   virtual long getLastErrcode() = 0;
00112   virtual std::string getErrorMessage(const long errcode) = 0;
00113 
00115   virtual unsigned char read8  (const unsigned long handle, const unsigned long offset) = 0;  
00116   
00117   virtual unsigned short read16 (const unsigned long handle, const unsigned long offset) = 0;  
00119   virtual unsigned long read32 (const unsigned long handle, const unsigned long offset) = 0;  
00121   virtual void write8 (const unsigned long handle, const unsigned long offset, const unsigned char value) = 0;   
00123   virtual void write16(const unsigned long handle, const unsigned long offset, const unsigned short value)= 0;    
00125   virtual void write32(const unsigned long handle, const unsigned long offset, const unsigned long value) = 0;   
00126 
00128   virtual void blockRead32 (VmePort &port, const unsigned long offset, unsigned long *buf, const long len) = 0;  
00130   virtual void blockRead64 (VmePort &port, const unsigned long offset, unsigned long *buf, const long len) = 0;   
00132   virtual void blockWrite32(VmePort &port, const unsigned long offset, const unsigned long *buf, const long len) = 0;  
00134   virtual void blockWrite64(VmePort &port, const unsigned long offset, const unsigned long *buf, const long len) = 0;   
00135 
00137   virtual unsigned long registerPort(VmePort &port) = 0;         
00139   virtual void deletePort(VmePort &port) = 0;
00141   virtual void *getPortMap(const unsigned long handle) = 0;
00142 
00143 };                                             
00144 
00145 } 
00146 
00147 #endif // SCTPIXELROD_VMEINTERFACE_H
00148 
00149 
00150 
00151 
00152 
00153