mrfioc2  2.3.0
Typedefs | Functions
devMrmBuf.h File Reference

C interface for data buffer sending and receiving. More...

#include <epicsTypes.h>
Include dependency graph for devMrmBuf.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct mrmBufferInfo mrmBufferInfo_t
 The buffer information data structure. More...
 
typedef void(* mrmBufRecievedCallback) (void *arg, epicsStatus status, epicsUInt32 length, const epicsUInt8 *buffer)
 Buffer received callback function. More...
 

Functions

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

Detailed Description

C interface for data buffer sending and receiving.

Author
Jure Krasna jure..nosp@m.kras.nosp@m.na@co.nosp@m.syla.nosp@m.b.com

Definition in file devMrmBuf.h.

Typedef Documentation

◆ mrmBufferInfo_t

The buffer information data structure.

This structure holds references to receive and send classes for a specific device - either a receiver or a generator.

Definition at line 23 of file devMrmBuf.h.

◆ mrmBufRecievedCallback

typedef void(* mrmBufRecievedCallback) (void *arg, epicsStatus status, epicsUInt32 length, const epicsUInt8 *buffer)

Buffer received callback function.

Parameters
argParameter which is assigned at callback registration
statusStatus of the receive action (0 = ok)
lengthLength of the buffer in bytes
bufferBuffer data

Definition at line 33 of file devMrmBuf.h.

Function Documentation

◆ mrmBufDisable()

epicsStatus epicsShareFunc 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 epicsShareFunc 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 epicsShareFunc* 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 epicsShareFunc 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 epicsShareFunc 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 epicsShareFunc 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 epicsShareFunc 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 epicsShareFunc 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