mrfioc2  2.3.0
Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
mrmBufRx Class Reference

#include <drvemRxBuf.h>

Inheritance diagram for mrmBufRx:
Inheritance graph
[legend]
Collaboration diagram for mrmBufRx:
Collaboration graph
[legend]

Public Member Functions

 mrmBufRx (const std::string &, volatile void *base, unsigned int qdepth, unsigned int bsize=0)
 
virtual ~mrmBufRx ()
 
virtual void lock () const OVERRIDE FINAL
 
virtual void unlock () const OVERRIDE FINAL
 
virtual bool dataRxEnabled () const OVERRIDE FINAL
 
virtual void dataRxEnable (bool) OVERRIDE FINAL
 
- Public Member Functions inherited from bufRxManager
 bufRxManager (const std::string &, unsigned int qdepth, unsigned int bsize=0)
 
virtual ~bufRxManager ()
 
unsigned int bsize ()
 
epicsUInt8 * getFree (unsigned int *)
 
void receive (epicsUInt8 *, unsigned int)
 
virtual void dataRxError (dataBufComplete, void *) OVERRIDE FINAL
 Notification if Rx queue overflows. More...
 
virtual void dataRxAddReceive (dataBufComplete fptr, void *arg=0) OVERRIDE FINAL
 Register to receive data buffers. More...
 
virtual void dataRxDeleteReceive (dataBufComplete fptr, void *arg=0) OVERRIDE FINAL
 Unregister. More...
 
- Public Member Functions inherited from dataBufRx
 dataBufRx (const std::string &n)
 
virtual ~dataBufRx ()=0
 
- Public Member Functions inherited from mrf::ObjectInst< dataBufRx >
virtual propertyBasegetPropertyBase (const char *pname, const std::type_info &ptype)
 
virtual void visitProperties (bool(*cb)(propertyBase *, void *), void *arg)
 
- Public Member Functions inherited from mrf::Object
const std::string & name () const
 
const Objectparent () const
 
child_iterator beginChild () const
 
child_iterator endChild () const
 
template<typename P >
mrf::auto_ptr< property< P > > getProperty (const char *pname)
 

Static Public Member Functions

static void drainbuf (CALLBACK *)
 
- Static Public Member Functions inherited from mrf::ObjectInst< dataBufRx >
static int initObject ()
 
- Static Public Member Functions inherited from mrf::Object
static ObjectgetObject (const std::string &name)
 
static ObjectgetCreateObject (const std::string &name, const std::string &klass, const create_args_t &args=create_args_t())
 
static void addFactory (const std::string &klass, create_factory_t fn)
 
static void visitObjects (bool(*)(Object *, void *), void *)
 

Protected Attributes

volatile unsigned char *const base
 

Additional Inherited Members

- Public Types inherited from mrf::Object
typedef m_obj_children_t::const_iterator child_iterator
 
typedef std::map< std::string, std::string > create_args_t
 
typedef Object *(* create_factory_t) (const std::string &name, const std::string &klass, const create_args_t &args)
 
- Protected Member Functions inherited from bufRxManager
void haderror (epicsStatus e)
 
- Protected Member Functions inherited from mrf::ObjectInst< dataBufRx >
 ObjectInst (const std::string &n)
 
 ObjectInst (const std::string &n, A &a)
 
virtual ~ObjectInst ()
 
- Protected Member Functions inherited from mrf::Object
 Object (const std::string &n, const Object *par=0)
 
virtual ~Object ()=0
 

Detailed Description

Definition at line 18 of file drvemRxBuf.h.

Constructor & Destructor Documentation

◆ mrmBufRx()

mrmBufRx::mrmBufRx ( const std::string &  n,
volatile void *  base,
unsigned int  qdepth,
unsigned int  bsize = 0 
)

Definition at line 31 of file drvemRxBuf.cpp.

32  :bufRxManager(n, qdepth, bsize)
33  ,base((volatile unsigned char *)b)
34 {
35 }
unsigned int bsize()
Definition: bufrxmgr.h:28
volatile unsigned char *const base
Definition: drvemRxBuf.h:34
bufRxManager(const std::string &, unsigned int qdepth, unsigned int bsize=0)
Definition: bufrxmgr.cpp:63

◆ ~mrmBufRx()

mrmBufRx::~mrmBufRx ( )
virtual

Definition at line 37 of file drvemRxBuf.cpp.

38 {
39  BITSET(NAT,32,base, DataBufCtrl, DataBufCtrl_stop);
40 }
#define DataBufCtrl_stop
Definition: evrRegMap.h:123
#define BITSET(ord, len, base, offset, mask)
Definition: mrfBitOps.h:21
volatile unsigned char *const base
Definition: drvemRxBuf.h:34

Member Function Documentation

◆ dataRxEnable()

void mrmBufRx::dataRxEnable ( bool  v)
virtual

Implements dataBufRx.

Definition at line 49 of file drvemRxBuf.cpp.

50 {
51  int key=epicsInterruptLock();
52  if (v) {
53  // start reception and switch to DBus+data
54  BITSET(NAT,32,base, DataBufCtrl, DataBufCtrl_mode|DataBufCtrl_rx);
55  } else {
56  BITSET(NAT,32,base, DataBufCtrl, DataBufCtrl_stop); // stop reception
57  BITCLR(NAT,32,base, DataBufCtrl, DataBufCtrl_mode); // switch to DBus only
58  }
59  epicsInterruptUnlock(key);
60 }
#define BITCLR(ord, len, base, offset, mask)
Definition: mrfBitOps.h:26
#define DataBufCtrl_rx
Definition: evrRegMap.h:121
#define DataBufCtrl_stop
Definition: evrRegMap.h:123
#define DataBufCtrl_mode
Definition: evrRegMap.h:125
#define BITSET(ord, len, base, offset, mask)
Definition: mrfBitOps.h:21
volatile unsigned char *const base
Definition: drvemRxBuf.h:34

◆ dataRxEnabled()

bool mrmBufRx::dataRxEnabled ( ) const
virtual

Implements dataBufRx.

Definition at line 43 of file drvemRxBuf.cpp.

44 {
45  return (READ32(base, DataBufCtrl) & DataBufCtrl_mode) != 0;
46 }
#define READ32(base, offset)
Definition: mrfCommonIO.h:114
#define DataBufCtrl_mode
Definition: evrRegMap.h:125
volatile unsigned char *const base
Definition: drvemRxBuf.h:34

◆ drainbuf()

void mrmBufRx::drainbuf ( CALLBACK *  cb)
static

Definition at line 74 of file drvemRxBuf.cpp.

75 {
76 try {
77  void *vptr;
78  callbackGetUser(vptr,cb);
79  mrmBufRx& self=*static_cast<mrmBufRx*>(vptr);
80 
81  epicsUInt32 sts=READ32(self.base, DataBufCtrl);
82 
83  // Configured to send?
84  if (!(sts&DataBufCtrl_mode))
85  return;
86 
87  // Still receiving?
88  if (sts&DataBufCtrl_rx)
89  return;
90 
91  if (sts&DataBufCtrl_sumerr) {
92  self.haderror(2);
93 
94  } else {
95  unsigned int bsize;
96  epicsUInt8 *buf=self.getFree(&bsize);
97 
98  if (!buf) {
99  self.haderror(1);
100  } else {
101 
102  unsigned int rsize=sts&DataBufCtrl_len_mask;
103 
104  if (rsize>bsize) {
105  errlogPrintf("Received data buffer with size %u >= %u\n", rsize, bsize);
106  rsize=bsize;
107  }
108 
109  if(evrMrmSeqRxDebug>=1)
110  {
111  errlogPrintf("buffer %s: size=%u %08x %08x %08x %08x\n",
112  self.name().c_str(), rsize,
113  (unsigned)BE_READ32(self.base, DataRx(0)),
114  (unsigned)BE_READ32(self.base, DataRx(4)),
115  (unsigned)BE_READ32(self.base, DataRx(8)),
116  (unsigned)BE_READ32(self.base, DataRx(12)));
117  }
118 
119  /* keep buffer in big endian mode (as sent by EVG) */
120  for(unsigned int i=0; i<rsize; i+=4) {
121  *(epicsUInt32*)(buf+i) = BE_READ32(self.base, DataRx(i));
122  }
123  self.receive(buf, rsize);
124  }
125  }
126 
127  WRITE32(self.base, DataBufCtrl, sts|DataBufCtrl_rx);
128 } catch(std::exception& e) {
129  epicsPrintf("exception in mrmBufRx::drainbuf callback: %s\n", e.what());
130 }
131 }
#define READ32(base, offset)
Definition: mrfCommonIO.h:114
#define BE_READ32(base, offset)
Definition: mrfCommonIO.h:164
#define DataBufCtrl_rx
Definition: evrRegMap.h:121
#define DataBufCtrl_len_mask
Definition: evrRegMap.h:126
int evrMrmSeqRxDebug
Definition: drvem.cpp:62
#define DataBufCtrl_sumerr
Definition: evrRegMap.h:124
#define DataBufCtrl_mode
Definition: evrRegMap.h:125
const std::string & name() const
Definition: object.h:393
unsigned int bsize()
Definition: bufrxmgr.h:28
volatile unsigned char *const base
Definition: drvemRxBuf.h:34
#define WRITE32(base, offset, value)
Definition: mrfCommonIO.h:119

◆ lock()

virtual void mrmBufRx::lock ( ) const
inlinevirtual

Implements mrf::Object.

Definition at line 25 of file drvemRxBuf.h.

25 {};

◆ unlock()

virtual void mrmBufRx::unlock ( ) const
inlinevirtual

Implements mrf::Object.

Definition at line 26 of file drvemRxBuf.h.

26 {};

Member Data Documentation

◆ base

volatile unsigned char* const mrmBufRx::base
protected

Definition at line 34 of file drvemRxBuf.h.


The documentation for this class was generated from the following files: