mrfioc2  2.3.0
Classes | Macros | Functions
devMrmBuf.cpp File Reference
#include "devObj.h"
#include "mrf/object.h"
#include "mrf/databuf.h"
#include "mrmDataBufTx.h"
#include <epicsExport.h>
#include "devMrmBuf.h"
Include dependency graph for devMrmBuf.cpp:

Go to the source code of this file.

Classes

struct  mrmBufferInfo
 

Macros

#define BUF_RX   ":BUFRX"
 
#define BUF_TX   ":BUFTX"
 

Functions

mrmBufferInfo_tmrmBufInit (const char *dev_name)
 Initialize buffer data structure. More...
 
epicsStatus mrmBufRxSupported (mrmBufferInfo_t *data)
 Checks whether receive buffer is supported. More...
 
epicsStatus mrmBufTxSupported (mrmBufferInfo_t *data)
 Checks whether transferring buffer is supported. More...
 
epicsStatus mrmBufEnable (mrmBufferInfo_t *data)
 Disable buffer sending logic. More...
 
epicsStatus mrmBufDisable (mrmBufferInfo_t *data)
 Disable buffer sending logic. More...
 
epicsStatus mrmBufMaxLen (mrmBufferInfo *data, epicsUInt32 *maxLength)
 Get maximum supported buffer length. More...
 
epicsStatus mrmBufSend (mrmBufferInfo *data, epicsUInt32 len, epicsUInt8 *buf)
 Send buffer data. More...
 
epicsStatus mrmBufRegCallback (mrmBufferInfo *data, mrmBufRecievedCallback callback, void *pass)
 Register data receive callback function. More...
 

Macro Definition Documentation

◆ BUF_RX

#define BUF_RX   ":BUFRX"

Definition at line 14 of file devMrmBuf.cpp.

◆ BUF_TX

#define BUF_TX   ":BUFTX"

Definition at line 15 of file devMrmBuf.cpp.

Function Documentation

◆ mrmBufDisable()

epicsStatus mrmBufDisable ( mrmBufferInfo_t data)

Disable buffer sending logic.

Disables data buffer logic for both transfer and receive functionality.

Parameters
dataThe buffer information data structure
Returns
Returns 0 on success -1 on failure.

Definition at line 109 of file devMrmBuf.cpp.

109  {
110 
111  if(data && data->bufRx) {
112  data->bufRx->dataRxEnable(false);
113  }
114 
115  if(data && data->bufTx) {
116  data->bufTx->dataTxEnable(false);
117  }
118 
119  return 0;
120 }
mrmDataBufTx * bufTx
Definition: devMrmBuf.cpp:19
virtual void dataTxEnable(bool) OVERRIDE FINAL
virtual void dataRxEnable(bool)=0
dataBufRx * bufRx
Definition: devMrmBuf.cpp:18

◆ mrmBufEnable()

epicsStatus mrmBufEnable ( mrmBufferInfo_t data)

Disable buffer sending logic.

Enables data buffer logic for both transfer and receive functionality. This is already called by the enable record so it is only needed if the records for buffer enabling are not present.

Parameters
dataThe buffer information data structure
Returns
Returns 0 on success -1 on failure.

Definition at line 96 of file devMrmBuf.cpp.

96  {
97 
98  if(data && data->bufRx) {
99  data->bufRx->dataRxEnable(true);
100  }
101 
102  if(data && data->bufTx) {
103  data->bufTx->dataTxEnable(true);
104  }
105 
106  return 0;
107 }
mrmDataBufTx * bufTx
Definition: devMrmBuf.cpp:19
virtual void dataTxEnable(bool) OVERRIDE FINAL
virtual void dataRxEnable(bool)=0
dataBufRx * bufRx
Definition: devMrmBuf.cpp:18

◆ mrmBufInit()

mrmBufferInfo_t* mrmBufInit ( const char *  dev_name)

Initialize buffer data structure.

This function allocates and initializes the structure for use with other functions. Device name should correspond to the same name as is used when initializing EVR or EVG device with either mrmEv*SetupVME or mrmEv*SetupPCI functions / iocsh commands.

Parameters
dev_nameThe name of the device to use for buffer sending and receiving
Returns
Returns the structure pointer on success and NULL on failure.

Definition at line 24 of file devMrmBuf.cpp.

24  {
25 
26  mrmBufferInfo_t *data = NULL;
27  mrf::Object *object = NULL;
28  std::string bufRxName(dev_name);
29  std::string bufTxName(dev_name);
30 
31  if(!dev_name) {
32  errlogPrintf("mrmBufInit ERROR: NULL device name!\n");
33  return NULL;
34  }
35 
36  if(!(data = (mrmBufferInfo_t *)calloc(1, sizeof(mrmBufferInfo_t)))) {
37  errlogPrintf("mrmBufInit ERROR: failed to allocate memory for buffer info!\n");
38  return NULL;
39  }
40 
41  bufRxName += BUF_RX;
42  bufTxName += BUF_TX;
43 
44  object = mrf::Object::getObject(bufRxName);
45  if(!object) {
46  errlogPrintf("mrmBufInit WARNING: failed to find object '%s'\n", bufRxName.c_str());
47  } else {
48  data->bufRx = dynamic_cast<dataBufRx*>(object);
49  }
50 
51  object = mrf::Object::getObject(bufTxName);
52  if(!object) {
53  errlogPrintf("mrmBufInit WARNING: failed to find object '%s'\n", bufTxName.c_str());
54  } else {
55  data->bufTx = dynamic_cast<mrmDataBufTx*>(object);
56  }
57 
58  if(!data->bufRx && !data->bufTx) {
59  errlogPrintf("mrmBufInit: ERROR: failed to find both objects!\n");
60  free(data);
61  data = NULL;
62  }
63 
64  return data;
65 }
mrmDataBufTx * bufTx
Definition: devMrmBuf.cpp:19
#define BUF_RX
Definition: devMrmBuf.cpp:14
Base object inspection.
Definition: object.h:378
static Object * getObject(const std::string &name)
Definition: object.cpp:107
#define BUF_TX
Definition: devMrmBuf.cpp:15
dataBufRx * bufRx
Definition: devMrmBuf.cpp:18

◆ mrmBufMaxLen()

epicsStatus mrmBufMaxLen ( mrmBufferInfo_t data,
epicsUInt32 *  maxLength 
)

Get maximum supported buffer length.

Parameters
dataThe buffer information data structure
maxLengthMaximum buffer length in bytes
Returns
Returns 0 on success -1 on failure.

Definition at line 122 of file devMrmBuf.cpp.

122  {
123 
124  if(!data->bufTx) {
125  errlogPrintf("mrmBufMaxLen: ERROR: transfer structure not initialized!\n");
126  return -1;
127  }
128 
129  try {
130  *maxLength = data->bufTx->lenMax();
131  } catch(std::exception &e) {
132  errlogPrintf("mrmBufMaxLen: EXCEPTION: %s\n", e.what());
133  return -1;
134  }
135 
136  return 0;
137 }
mrmDataBufTx * bufTx
Definition: devMrmBuf.cpp:19
virtual epicsUInt32 lenMax() const OVERRIDE FINAL

◆ mrmBufRegCallback()

epicsStatus mrmBufRegCallback ( mrmBufferInfo_t data,
mrmBufRecievedCallback  callback,
void *  param 
)

Register data receive callback function.

Parameters
dataThe buffer information data structure
callbackCallback function to be registered
paramParameter which is passed to the calllback when it is executed
Returns
Returns 0 on success -1 on failure.

Definition at line 156 of file devMrmBuf.cpp.

156  {
157 
158  if(!data->bufRx) {
159  errlogPrintf("mrmBufRegCallback: ERROR: receive structure not initialized!\n");
160  return -1;
161  }
162 
163  try {
164  data->bufRx->dataRxAddReceive(callback, pass);
165  } catch(std::exception &e) {
166  errlogPrintf("mrmBufRegCallback: EXCEPTION: %s\n", e.what());
167  return -1;
168  }
169 
170  return 0;
171 }
dataBufRx * bufRx
Definition: devMrmBuf.cpp:18
virtual void dataRxAddReceive(dataBufComplete fptr, void *arg=0)=0
Register to receive data buffers.

◆ mrmBufRxSupported()

epicsStatus mrmBufRxSupported ( mrmBufferInfo_t data)

Checks whether receive buffer is supported.

Since some devices (EVR or EVG) might only support transfer functionality this function allows you to check whether you can call all receive-related functions for this device.

Parameters
dataThe buffer information data structure
Returns
Returns 1 if supported, 0 if not and -1 if data is NULL.

Definition at line 67 of file devMrmBuf.cpp.

67  {
68 
69  if(!data) {
70  errlogPrintf("mrmBufRxSupported ERROR: NULL data parameter!\n");
71  return -1;
72  }
73 
74  if(data->bufRx) {
75  return 1;
76  }
77 
78  return 0;
79 }
dataBufRx * bufRx
Definition: devMrmBuf.cpp:18

◆ mrmBufSend()

epicsStatus mrmBufSend ( mrmBufferInfo_t data,
epicsUInt32  len,
epicsUInt8 *  buf 
)

Send buffer data.

The function blocks until data is sent completely.

Parameters
dataThe buffer information data structure
lenBuffer length in bytes
bufArray of buffer data
Returns
Returns 0 on success -1 on failure.

Definition at line 139 of file devMrmBuf.cpp.

139  {
140 
141  if(!data->bufTx) {
142  errlogPrintf("mrmBufSend: ERROR: transfer structure not initialized!\n");
143  return -1;
144  }
145 
146  try {
147  data->bufTx->dataSend(len, buf);
148  } catch(std::exception &e) {
149  errlogPrintf("mrmBufSend: EXCEPTION: %s\n", e.what());
150  return -1;
151  }
152 
153  return 0;
154 }
mrmDataBufTx * bufTx
Definition: devMrmBuf.cpp:19
virtual void dataSend(epicsUInt32 len, const epicsUInt8 *buf) OVERRIDE FINAL
Transmit a byte array.

◆ mrmBufTxSupported()

epicsStatus mrmBufTxSupported ( mrmBufferInfo_t data)

Checks whether transferring buffer is supported.

Since some devices (EVR or EVG) might only support receive functionality this function allows you to check whether you can call all transfer-related functions for this device.

Parameters
dataThe buffer information data structure
Returns
Returns 1 if supported, 0 if not and -1 if data is NULL.

Definition at line 81 of file devMrmBuf.cpp.

81  {
82 
83  if(!data) {
84  errlogPrintf("mrmBufTxSupported ERROR: NULL data parameter!\n");
85  return -1;
86  }
87 
88  if(data->bufTx) {
89  return 1;
90  }
91 
92  return 0;
93 
94 }
mrmDataBufTx * bufTx
Definition: devMrmBuf.cpp:19