67 #define epicsAssertAuthor "Jeff Hill johill@lanl.gov" 82 comBufMemMgr ( comBufMemMgrIn ), wire ( wireIn ),
96 while ( ( pBuf = this->bufs.
get () ) ) {
99 this->comBufMemMgr.
release ( pBuf );
102 assert ( this->nBytesPending == 0 );
105 void comQueSend::copy_dbr_string (
const void * pValue )
107 this->push ( static_cast < const char * > ( pValue ),
MAX_STRING_SIZE );
110 void comQueSend::copy_dbr_short (
const void * pValue )
112 this->push ( * static_cast <const dbr_short_t *> ( pValue ) );
115 void comQueSend::copy_dbr_float (
const void * pValue )
117 this->push ( * static_cast <const dbr_float_t *> ( pValue ) );
120 void comQueSend::copy_dbr_char (
const void * pValue )
122 this->push ( * static_cast <const dbr_char_t *> ( pValue ) );
125 void comQueSend::copy_dbr_long (
const void * pValue )
127 this->push ( * static_cast <const dbr_long_t *> ( pValue ) );
130 void comQueSend::copy_dbr_double (
const void * pValue )
132 this->push ( * static_cast <const dbr_double_t *> ( pValue ) );
135 void comQueSend::copy_dbr_invalid (
const void * )
140 const comQueSend::copyScalarFunc_t comQueSend::dbrCopyScalar [39] = {
141 &comQueSend::copy_dbr_string,
142 &comQueSend::copy_dbr_short,
143 &comQueSend::copy_dbr_float,
144 &comQueSend::copy_dbr_short,
145 &comQueSend::copy_dbr_char,
146 &comQueSend::copy_dbr_long,
147 &comQueSend::copy_dbr_double,
148 &comQueSend::copy_dbr_invalid,
149 &comQueSend::copy_dbr_invalid,
150 &comQueSend::copy_dbr_invalid,
151 &comQueSend::copy_dbr_invalid,
152 &comQueSend::copy_dbr_invalid,
153 &comQueSend::copy_dbr_invalid,
154 &comQueSend::copy_dbr_invalid,
155 &comQueSend::copy_dbr_invalid,
156 &comQueSend::copy_dbr_invalid,
157 &comQueSend::copy_dbr_invalid,
158 &comQueSend::copy_dbr_invalid,
159 &comQueSend::copy_dbr_invalid,
160 &comQueSend::copy_dbr_invalid,
161 &comQueSend::copy_dbr_invalid,
162 &comQueSend::copy_dbr_invalid,
163 &comQueSend::copy_dbr_invalid,
164 &comQueSend::copy_dbr_invalid,
165 &comQueSend::copy_dbr_invalid,
166 &comQueSend::copy_dbr_invalid,
167 &comQueSend::copy_dbr_invalid,
168 &comQueSend::copy_dbr_invalid,
169 &comQueSend::copy_dbr_invalid,
170 &comQueSend::copy_dbr_invalid,
171 &comQueSend::copy_dbr_invalid,
172 &comQueSend::copy_dbr_invalid,
173 &comQueSend::copy_dbr_invalid,
174 &comQueSend::copy_dbr_invalid,
175 &comQueSend::copy_dbr_invalid,
176 &comQueSend::copy_dbr_short,
177 &comQueSend::copy_dbr_short,
178 &comQueSend::copy_dbr_invalid,
179 &comQueSend::copy_dbr_invalid
182 void comQueSend::copy_dbr_string (
const void *pValue,
unsigned nElem )
184 this->push ( static_cast < const char * > ( pValue ), nElem *
MAX_STRING_SIZE );
187 void comQueSend::copy_dbr_short (
const void *pValue,
unsigned nElem )
189 this->push ( static_cast <const dbr_short_t *> ( pValue ), nElem );
192 void comQueSend::copy_dbr_float (
const void *pValue,
unsigned nElem )
194 this->push ( static_cast <const dbr_float_t *> ( pValue ), nElem );
197 void comQueSend::copy_dbr_char (
const void *pValue,
unsigned nElem )
199 this->push ( static_cast <const dbr_char_t *> ( pValue ), nElem );
202 void comQueSend::copy_dbr_long (
const void *pValue,
unsigned nElem )
204 this->push ( static_cast <const dbr_long_t *> ( pValue ), nElem );
207 void comQueSend::copy_dbr_double (
const void *pValue,
unsigned nElem )
209 this->push ( static_cast <const dbr_double_t *> ( pValue ), nElem );
212 void comQueSend::copy_dbr_invalid (
const void *,
unsigned )
217 const comQueSend::copyVectorFunc_t comQueSend::dbrCopyVector [39] = {
218 &comQueSend::copy_dbr_string,
219 &comQueSend::copy_dbr_short,
220 &comQueSend::copy_dbr_float,
221 &comQueSend::copy_dbr_short,
222 &comQueSend::copy_dbr_char,
223 &comQueSend::copy_dbr_long,
224 &comQueSend::copy_dbr_double,
225 &comQueSend::copy_dbr_invalid,
226 &comQueSend::copy_dbr_invalid,
227 &comQueSend::copy_dbr_invalid,
228 &comQueSend::copy_dbr_invalid,
229 &comQueSend::copy_dbr_invalid,
230 &comQueSend::copy_dbr_invalid,
231 &comQueSend::copy_dbr_invalid,
232 &comQueSend::copy_dbr_invalid,
233 &comQueSend::copy_dbr_invalid,
234 &comQueSend::copy_dbr_invalid,
235 &comQueSend::copy_dbr_invalid,
236 &comQueSend::copy_dbr_invalid,
237 &comQueSend::copy_dbr_invalid,
238 &comQueSend::copy_dbr_invalid,
239 &comQueSend::copy_dbr_invalid,
240 &comQueSend::copy_dbr_invalid,
241 &comQueSend::copy_dbr_invalid,
242 &comQueSend::copy_dbr_invalid,
243 &comQueSend::copy_dbr_invalid,
244 &comQueSend::copy_dbr_invalid,
245 &comQueSend::copy_dbr_invalid,
246 &comQueSend::copy_dbr_invalid,
247 &comQueSend::copy_dbr_invalid,
248 &comQueSend::copy_dbr_invalid,
249 &comQueSend::copy_dbr_invalid,
250 &comQueSend::copy_dbr_invalid,
251 &comQueSend::copy_dbr_invalid,
252 &comQueSend::copy_dbr_invalid,
253 &comQueSend::copy_dbr_short,
254 &comQueSend::copy_dbr_short,
255 &comQueSend::copy_dbr_invalid,
256 &comQueSend::copy_dbr_invalid
264 if ( nBytesThisBuf ) {
265 assert ( this->nBytesPending >= nBytesThisBuf );
266 this->nBytesPending -= nBytesThisBuf;
269 this->bufs.
push ( *pBuf );
274 assert ( this->nBytesPending == 0u );
284 if ( payloadSize < 0xffff && nElem < 0xffff ) {
287 pComBuf = newComBuf ();
288 this->pushComBuf ( *pComBuf );
290 pComBuf->
push ( request );
291 pComBuf->
push ( static_cast < ca_uint16_t > ( payloadSize ) );
292 pComBuf->
push ( dataType );
293 pComBuf->
push ( static_cast < ca_uint16_t > ( nElem ) );
294 pComBuf->
push ( cid );
295 pComBuf->
push ( requestDependent );
300 pComBuf = newComBuf ();
301 this->pushComBuf ( *pComBuf );
303 pComBuf->
push ( request );
304 pComBuf->
push ( static_cast < ca_uint16_t > ( 0xffff ) );
305 pComBuf->
push ( dataType );
306 pComBuf->
push ( static_cast < ca_uint16_t > ( 0u ) );
307 pComBuf->
push ( cid );
308 pComBuf->
push ( requestDependent );
309 pComBuf->
push ( payloadSize );
310 pComBuf->
push ( nElem );
320 const void * pPayload,
bool v49Ok )
332 const char * pStr = static_cast <
const char * > ( pPayload );
333 size = strlen ( pStr ) + 1u;
339 static_cast <ca_uint16_t> ( dataType ),
340 nElem, cid, requestDependent, v49Ok );
347 static_cast <ca_uint16_t> ( dataType ),
348 nElem, cid, requestDependent, v49Ok );
349 ( this->*dbrCopyScalar [dataType] ) ( pPayload );
355 maxBytes = 0xffffffff;
363 if ( nElem >= maxElem ) {
372 static_cast <ca_uint16_t> ( dataType ),
373 static_cast < ca_uint32_t > ( nElem ),
374 cid, requestDependent, v49Ok );
375 ( this->*dbrCopyVector [dataType] ) ( pPayload, nElem );
378 unsigned padSize = payloadSize - size;
384 void comQueSend::commitMsg ()
386 while ( this->pFirstUncommited.
valid() ) {
389 this->pFirstUncommited++;
395 void comQueSend::clearUncommitedMsg ()
397 while ( this->pFirstUncommited.
valid() ) {
402 this->bufs.
remove ( *this->pFirstUncommited );
403 this->pFirstUncommited->~comBuf ();
406 this->pFirstUncommited = next;
const unsigned short dbr_value_size[LAST_BUFFER_TYPE+1]
const unsigned short dbr_size[LAST_BUFFER_TYPE+1]
#define assert(exp)
Declare that a condition should be true.
void pushString(const char *pVal, unsigned nChar)
#define INVALID_DB_REQ(x)
unsigned uncommittedBytes() const
unsigned short ca_uint16_t
comQueSend(wireSendAdapter &, comBufMemoryManager &)
void clearUncommittedIncomming()
#define CA_MESSAGE_ALIGN(A)
const char cacNillBytes[]
unsigned occupiedBytes() const
epicsFloat64 dbr_double_t
void insertRequestWithPayLoad(ca_uint16_t request, unsigned dataType, arrayElementCount nElem, ca_uint32_t cid, ca_uint32_t requestDependent, const void *pPayload, bool v49Ok)
unsigned long arrayElementCount
comBuf * popNextComBufToSend()
#define dbr_size_n(TYPE, COUNT)
unsigned unoccupiedBytes() const
void insertRequestHeader(ca_uint16_t request, ca_uint32_t payloadSize, ca_uint16_t dataType, ca_uint32_t nElem, ca_uint32_t cid, ca_uint32_t requestDependent, bool v49Ok)
#define comQueSendCopyDispatchSize
virtual void release(void *)=0