This is Unofficial EPICS BASE Doxygen Site
convert.cpp
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2002 The University of Chicago, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * EPICS BASE is distributed subject to a Software License Agreement found
7 * in file LICENSE that is included with this distribution.
8 \*************************************************************************/
9 /*
10  * C O N V E R T . C
11  *
12  * Author: D. Kersteins
13  *
14  *
15  * NOTES:
16  *
17  * 1) All routines in this file have an encode argument which
18  * determines if we are converting from the standard format to
19  * the local format or vise versa. To date only float and double data
20  * types must be converted differently depending on the encode
21  * argument - joh
22  *
23  */
24 
25 #include <string.h>
26 
27 #include "dbDefs.h"
28 #include "osiSock.h"
29 #include "osiWireFormat.h"
30 
31 #include "net_convert.h"
32 #include "iocinf.h"
33 #include "caProto.h"
34 #include "caerr.h"
35 
36 /*
37  * NOOP if this isnt required
38  */
39 #ifdef EPICS_CONVERSION_REQUIRED
40 
41 /*
42  * if hton is true then it is a host to network conversion
43  * otherwise vise-versa
44  *
45  * net format: big endian and IEEE float
46  */
47 typedef void ( * CACVRTFUNCPTR ) (
48  const void *pSrc, void *pDest, int hton, arrayElementCount count );
49 
50 inline void dbr_htond (
51  const dbr_double_t * pHost, dbr_double_t * pNet )
52 {
53  AlignedWireRef < epicsFloat64 > tmp ( *pNet );
54  tmp = *pHost;
55 }
56 inline void dbr_ntohd (
57  const dbr_double_t * pNet, dbr_double_t * pHost )
58 {
59  *pHost = AlignedWireRef < const epicsFloat64 > ( *pNet );
60 }
61 inline void dbr_htonf (
62  const dbr_float_t * pHost, dbr_float_t * pNet )
63 {
64  AlignedWireRef < epicsFloat32 > tmp ( *pNet );
65  tmp = *pHost;
66 }
67 inline void dbr_ntohf (
68  const dbr_float_t * pNet, dbr_float_t * pHost )
69 {
70  *pHost = AlignedWireRef < const epicsFloat32 > ( *pNet );
71 }
72 
73 inline epicsUInt16 dbr_ntohs( const epicsUInt16 & net )
74 {
76 }
77 
78 inline epicsUInt16 dbr_htons ( const epicsUInt16 & host )
79 {
80  epicsUInt16 tmp;
82  awr = host;
83  return tmp;
84 }
85 
86 inline epicsUInt32 dbr_ntohl( const epicsUInt32 & net )
87 {
89 }
90 
91 inline epicsUInt32 dbr_htonl ( const epicsUInt32 & host )
92 {
93  epicsUInt32 tmp;
95  awr = host;
96  return tmp;
97 }
98 
99 /*
100  * if hton is true then it is a host to network conversion
101  * otherwise vise-versa
102  *
103  * net format: big endian and IEEE float
104  *
105  */
106 
107 /*
108  * CVRT_STRING()
109  */
110 static void cvrt_string(
111 const void *s, /* source */
112 void *d, /* destination */
113 int /* encode */, /* cvrt HOST to NET if T */
114 arrayElementCount num /* number of values */
115 )
116 {
117  char *pSrc = (char *) s;
118  char *pDest = (char *) d;
119 
120  /* convert "in place" -> nothing to do */
121  if (s == d)
122  return;
123  memcpy ( pDest, pSrc, num*MAX_STRING_SIZE );
124 }
125 
126 /*
127  * CVRT_SHORT()
128  */
129 static void cvrt_short(
130 const void *s, /* source */
131 void *d, /* destination */
132 int encode, /* cvrt HOST to NET if T */
133 arrayElementCount num /* number of values */
134 )
135 {
136  dbr_short_t *pSrc = (dbr_short_t *) s;
137  dbr_short_t *pDest = (dbr_short_t *) d;
138 
139  if(encode){
140  for(arrayElementCount i=0; i<num; i++){
141  pDest[i] = dbr_htons( pSrc[i] );
142  }
143  }
144  else {
145  for(arrayElementCount i=0; i<num; i++){
146  pDest[i] = dbr_ntohs( pSrc[i] );
147  }
148  }
149 }
150 
151 /*
152  * CVRT_CHAR()
153  *
154  *
155  *
156  *
157  */
158 static void cvrt_char(
159 const void *s, /* source */
160 void *d, /* destination */
161 int /*encode*/, /* cvrt HOST to NET if T */
162 arrayElementCount num /* number of values */
163 )
164 {
165  dbr_char_t *pSrc = (dbr_char_t *) s;
166  dbr_char_t *pDest = (dbr_char_t *) d;
167 
168  /* convert "in place" -> nothing to do */
169  if (s == d)
170  return;
171  for( arrayElementCount i=0; i<num; i++){
172  pDest[i] = pSrc[i];
173  }
174 }
175 
176 /*
177  * CVRT_LONG()
178  */
179 static void cvrt_long(
180 const void *s, /* source */
181 void *d, /* destination */
182 int encode, /* cvrt HOST to NET if T */
183 arrayElementCount num /* number of values */
184 )
185 {
186  dbr_long_t *pSrc = (dbr_long_t *) s;
187  dbr_long_t *pDest = (dbr_long_t *) d;
188 
189  if(encode){
190  for(arrayElementCount i=0; i<num; i++){
191  pDest[i] = dbr_htonl( pSrc[i] );
192  }
193  }
194  else {
195  for(arrayElementCount i=0; i<num; i++){
196  pDest[i] = dbr_ntohl( pSrc[i] );
197  }
198  }
199 }
200 
201 /*
202  * CVRT_ENUM()
203  *
204  *
205  *
206  *
207  */
208 static void cvrt_enum(
209 const void *s, /* source */
210 void *d, /* destination */
211 int encode, /* cvrt HOST to NET if T */
212 arrayElementCount num /* number of values */
213 )
214 {
215  dbr_enum_t *pSrc = (dbr_enum_t *) s;
216  dbr_enum_t *pDest = (dbr_enum_t *) d;
217 
218  if(encode){
219  for(arrayElementCount i=0; i<num; i++){
220  pDest[i] = dbr_htons ( pSrc[i] );
221  }
222  }
223  else {
224  for(arrayElementCount i=0; i<num; i++){
225  pDest[i] = dbr_ntohs ( pSrc[i] );
226  }
227  }
228 }
229 
230 /*
231  * CVRT_FLOAT()
232  *
233  *
234  * NOTES:
235  * placing encode outside the loop results in more
236  * code but better performance.
237  *
238  */
239 static void cvrt_float(
240 const void *s, /* source */
241 void *d, /* destination */
242 int encode, /* cvrt HOST to NET if T */
243 arrayElementCount num /* number of values */
244 )
245 {
246  const dbr_float_t *pSrc = (const dbr_float_t *) s;
247  dbr_float_t *pDest = (dbr_float_t *) d;
248 
249  if(encode){
250  for(arrayElementCount i=0; i<num; i++){
251  dbr_htonf ( &pSrc[i], &pDest[i] );
252  }
253  }
254  else{
255  for(arrayElementCount i=0; i<num; i++){
256  dbr_ntohf ( &pSrc[i], &pDest[i] );
257  }
258  }
259 }
260 
261 /*
262  * CVRT_DOUBLE()
263  */
264 static void cvrt_double(
265 const void *s, /* source */
266 void *d, /* destination */
267 int encode, /* cvrt HOST to NET if T */
268 arrayElementCount num /* number of values */
269 )
270 {
271  dbr_double_t *pSrc = (dbr_double_t *) s;
272  dbr_double_t *pDest = (dbr_double_t *) d;
273 
274  if(encode){
275  for(arrayElementCount i=0; i<num; i++){
276  dbr_htond ( &pSrc[i], &pDest[i] );
277  }
278  }
279  else{
280  for(arrayElementCount i=0; i<num; i++){
281  dbr_ntohd( &pSrc[i], &pDest[i] );
282  }
283  }
284 }
285 
286 /****************************************************************************
287 ** cvrt_sts_string(s,d)
288 ** struct dbr_sts_string *s pointer to source struct
289 ** struct dbr_sts_string *d pointer to destination struct
290 ** int encode; boolean, if true vax to ieee
291 ** else ieee to vax
292 **
293 ** converts fields of struct in HOST format to NET format
294 ** or
295 ** converts fields of struct in NET format to fields with HOST
296 ** format;
297 ****************************************************************************/
298 
299 static void cvrt_sts_string(
300 const void *s, /* source */
301 void *d, /* destination */
302 int /*encode*/, /* cvrt HOST to NET if T */
303 arrayElementCount num /* number of values */
304 )
305 {
306  struct dbr_sts_string *pSrc = (struct dbr_sts_string *) s;
307  struct dbr_sts_string *pDest = (struct dbr_sts_string *) d;
308 
309  /* convert ieee to vax format or vax to ieee */
310  pDest->status = dbr_ntohs(pSrc->status);
311  pDest->severity = dbr_ntohs(pSrc->severity);
312 
313  /* convert "in place" -> nothing else to do */
314  if (s == d)
315  return;
316 
317  memcpy ( pDest->value, pSrc->value, (MAX_STRING_SIZE * num) );
318 
319 }
320 
321 /****************************************************************************
322 ** cvrt_sts_short(s,d)
323 ** struct dbr_sts_int *s pointer to source struct
324 ** struct dbr_sts_int *d pointer to destination struct
325 ** int encode; boolean, if true vax to ieee
326 ** else ieee to vax
327 **
328 ** converts fields ofstruct in HOST format to ieee format
329 ** or
330 ** converts fields of struct in NET format to fields with HOST
331 ** format
332 ****************************************************************************/
333 
334 static void cvrt_sts_short(
335 const void *s, /* source */
336 void *d, /* destination */
337 int encode, /* cvrt HOST to NET if T */
338 arrayElementCount num /* number of values */
339 )
340 {
341  struct dbr_sts_int *pSrc = (struct dbr_sts_int *) s;
342  struct dbr_sts_int *pDest = (struct dbr_sts_int *) d;
343 
344  /* convert vax to ieee or ieee to vax format -- same code*/
345  pDest->status = dbr_ntohs(pSrc->status);
346  pDest->severity = dbr_ntohs(pSrc->severity);
347 
348  if (num == 1) /* single value */
349  pDest->value = dbr_ntohs(pSrc->value);
350  else /* array chan-- multiple pts */
351  {
352  cvrt_short(&pSrc->value, &pDest->value, encode, num);
353  }
354 }
355 /****************************************************************************
356 ** cvrt_sts_float(s,d)
357 ** struct dbr_sts_float *s pointer to source struct
358 ** struct dbr_sts_float *d pointer to destination struct
359 ** int encode; boolean, if true vax to ieee
360 ** else ieee to vax
361 **
362 ** if encode
363 ** converts struct in HOST format to ieee format
364 ** else
365 ** converts fields of struct in NET format to fields with HOST
366 ** format;
367 ****************************************************************************/
368 
369 static void cvrt_sts_float(
370 const void *s, /* source */
371 void *d, /* destination */
372 int encode, /* cvrt HOST to NET if T */
373 arrayElementCount num /* number of values */
374 )
375 {
376  struct dbr_sts_float *pSrc = (struct dbr_sts_float *) s;
377  struct dbr_sts_float *pDest = (struct dbr_sts_float *) d;
378 
379  pDest->status = dbr_ntohs(pSrc->status);
380  pDest->severity = dbr_ntohs(pSrc->severity);
381 
382  cvrt_float(&pSrc->value, &pDest->value, encode, num);
383 }
384 
385 /****************************************************************************
386 ** cvrt_sts_double(s,d)
387 **
388 ** if encode
389 ** converts struct in HOST format to ieee format
390 ** else
391 ** converts fields of struct in NET format to fields with HOST
392 ** format;
393 ****************************************************************************/
394 
395 static void cvrt_sts_double(
396 const void *s, /* source */
397 void *d, /* destination */
398 int encode, /* cvrt HOST to NET if T */
399 arrayElementCount num /* number of values */
400 )
401 {
402  struct dbr_sts_double *pSrc = (struct dbr_sts_double *) s;
403  struct dbr_sts_double *pDest = (struct dbr_sts_double *) d;
404 
405  pDest->status = dbr_ntohs(pSrc->status);
406  pDest->severity = dbr_ntohs(pSrc->severity);
407 
408  cvrt_double(&pSrc->value, &pDest->value, encode, num);
409 }
410 
411 /****************************************************************************
412 ** cvrt_sts_enum(s,d)
413 ** struct dbr_sts_enum *s pointer to source struct
414 ** struct dbr_sts_enum *d pointer to destination struct
415 ** int encode; boolean, if true vax to ieee
416 ** else ieee to vax
417 **
418 ** converts fields of struct in NET format to fields with HOST format
419 ** or
420 ** converts fields of struct in HOST format to fields with NET format
421 **
422 ****************************************************************************/
423 
424 static void cvrt_sts_enum(
425 const void *s, /* source */
426 void *d, /* destination */
427 int encode, /* cvrt HOST to NET if T */
428 arrayElementCount num /* number of values */
429 )
430 {
431  struct dbr_sts_enum *pSrc = (struct dbr_sts_enum *) s;
432  struct dbr_sts_enum *pDest = (struct dbr_sts_enum *) d;
433 
434  pDest->status = dbr_ntohs(pSrc->status);
435  pDest->severity = dbr_ntohs(pSrc->severity);
436  if (num == 1)
437  pDest->value = dbr_ntohs(pSrc->value);
438  else {
439  cvrt_enum(&pSrc->value,&pDest->value,encode,num);
440  }
441 }
442 
443 /****************************************************************************
444 ** cvrt_gr_short()
445 **
446 ** converts fields of struct in NET format to fields with HOST format
447 ** or
448 ** converts fields of struct in HOST format to fields with NET format
449 **
450 ****************************************************************************/
451 
452 static void cvrt_gr_short(
453 const void *s, /* source */
454 void *d, /* destination */
455 int encode, /* cvrt HOST to NET if T */
456 arrayElementCount num /* number of values */
457 )
458 {
459  struct dbr_gr_int *pSrc = (struct dbr_gr_int *) s;
460  struct dbr_gr_int *pDest = (struct dbr_gr_int *) d;
461 
462  pDest->status = dbr_ntohs(pSrc->status);
463  pDest->severity = dbr_ntohs(pSrc->severity);
464  if ( s != d ) {
465  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
466  }
467 
468  pDest->upper_disp_limit = dbr_ntohs(pSrc->upper_disp_limit);
469  pDest->lower_disp_limit = dbr_ntohs(pSrc->lower_disp_limit);
470  pDest->upper_alarm_limit = dbr_ntohs(pSrc->upper_alarm_limit);
471  pDest->upper_warning_limit = dbr_ntohs(pSrc->upper_warning_limit);
472  pDest->lower_alarm_limit = dbr_ntohs(pSrc->lower_alarm_limit);
473  pDest->lower_warning_limit = dbr_ntohs(pSrc->lower_warning_limit);
474 
475  if (num == 1)
476  pDest->value = dbr_ntohs(pSrc->value);
477  else {
478  cvrt_short(&pSrc->value, &pDest->value, encode,num);
479  }
480 }
481 
482 /****************************************************************************
483 ** cvrt_gr_char()
484 **
485 ** converts fields of struct in NET format to fields with HOST format
486 ** or
487 ** converts fields of struct in HOST format to fields with NET format
488 **
489 ****************************************************************************/
490 
491 static void cvrt_gr_char(
492 const void *s, /* source */
493 void *d, /* destination */
494 int /*encode*/, /* cvrt HOST to NET if T */
495 arrayElementCount num /* number of values */
496 )
497 {
498  struct dbr_gr_char *pSrc = (struct dbr_gr_char *) s;
499  struct dbr_gr_char *pDest = (struct dbr_gr_char *) d;
500 
501  pDest->status = dbr_ntohs(pSrc->status);
502  pDest->severity = dbr_ntohs(pSrc->severity);
503 
504  if (s == d) /* source == dest -> no more conversions */
505  return;
506 
507  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
508 
509  pDest->upper_disp_limit = pSrc->upper_disp_limit;
510  pDest->lower_disp_limit = pSrc->lower_disp_limit;
511  pDest->upper_alarm_limit = pSrc->upper_alarm_limit;
513  pDest->lower_alarm_limit = pSrc->lower_alarm_limit;
515 
516  if (num == 1)
517  pDest->value = pSrc->value;
518  else {
519  memcpy((char *)&pDest->value, (char *)&pSrc->value, num);
520  }
521 }
522 
523 /****************************************************************************
524 ** cvrt_gr_long()
525 **
526 ** converts fields of struct in NET format to fields with HOST format
527 ** or
528 ** converts fields of struct in HOST format to fields with NET format
529 **
530 ****************************************************************************/
531 
532 static void cvrt_gr_long(
533 const void *s, /* source */
534 void *d, /* destination */
535 int encode, /* cvrt HOST to NET if T */
536 arrayElementCount num /* number of values */
537 )
538 {
539  struct dbr_gr_long *pSrc = (struct dbr_gr_long *) s;
540  struct dbr_gr_long *pDest = (struct dbr_gr_long *) d;
541 
542  pDest->status = dbr_ntohs(pSrc->status);
543  pDest->severity = dbr_ntohs(pSrc->severity);
544  if ( s != d ) {
545  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
546  }
547 
548  pDest->upper_disp_limit = dbr_ntohl(pSrc->upper_disp_limit);
549  pDest->lower_disp_limit = dbr_ntohl(pSrc->lower_disp_limit);
550  pDest->upper_alarm_limit = dbr_ntohl(pSrc->upper_alarm_limit);
551  pDest->upper_warning_limit = dbr_ntohl(pSrc->upper_warning_limit);
552  pDest->lower_alarm_limit = dbr_ntohl(pSrc->lower_alarm_limit);
553  pDest->lower_warning_limit = dbr_ntohl(pSrc->lower_warning_limit);
554 
555  if (num == 1)
556  pDest->value = dbr_ntohl(pSrc->value);
557  else {
558  cvrt_long(&pSrc->value, &pDest->value, encode, num);
559  }
560 }
561 
562 /****************************************************************************
563 ** cvrt_gr_enum(s,d)
564 **
565 ** if encode
566 ** converts struct in HOST format to ieee format
567 ** else
568 ** converts fields of struct in NET format to fields with HOST
569 ** format;
570 ****************************************************************************/
571 
572 static void cvrt_gr_enum(
573 const void *s, /* source */
574 void *d, /* destination */
575 int encode, /* cvrt HOST to NET if T */
576 arrayElementCount num /* number of values */
577 )
578 {
579  struct dbr_gr_enum *pSrc = (struct dbr_gr_enum *) s;
580  struct dbr_gr_enum *pDest = (struct dbr_gr_enum *) d;
581 
582  pDest->status = dbr_ntohs(pSrc->status);
583  pDest->severity = dbr_ntohs(pSrc->severity);
584  pDest->no_str = dbr_ntohs(pSrc->no_str);
585  if ( s != d ) {
586  memcpy((void *)pDest->strs,(void *)pSrc->strs,sizeof(pSrc->strs));
587  }
588 
589  if (num == 1) /* single value */
590  pDest->value = dbr_ntohs(pSrc->value);
591  else /* array chan-- multiple pts */
592  {
593  cvrt_enum(&(pSrc->value), &(pDest->value), encode, num);
594  }
595 }
596 
597 /****************************************************************************
598 ** cvrt_gr_double(s,d)
599 **
600 ** if encode
601 ** converts struct in HOST format to ieee format
602 ** else
603 ** converts fields of struct in NET format to fields with HOST
604 ** format;
605 ****************************************************************************/
606 
607 static void cvrt_gr_double(
608 const void *s, /* source */
609 void *d, /* destination */
610 int encode, /* cvrt HOST to NET if T */
611 arrayElementCount num /* number of values */
612 )
613 {
614  struct dbr_gr_double *pSrc = (struct dbr_gr_double *) s;
615  struct dbr_gr_double *pDest = (struct dbr_gr_double *) d;
616 
617  /* these are same for vax to ieee or ieee to vax */
618  pDest->status = dbr_ntohs(pSrc->status);
619  pDest->severity = dbr_ntohs(pSrc->severity);
620  pDest->precision = dbr_ntohs(pSrc->precision);
621  if ( s != d ) {
622  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
623  }
624 
625  if (encode) /* vax to ieee convert */
626  {
627  if (num == 1){
628  dbr_htond(&pSrc->value, &pDest->value);
629  }
630  else {
631  cvrt_double(&pSrc->value, &pDest->value, encode,num);
632  }
633  dbr_htond(&pSrc->upper_disp_limit,&pDest->upper_disp_limit);
634  dbr_htond(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
635  dbr_htond(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
636  dbr_htond(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
637  dbr_htond(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
638  dbr_htond(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
639  }
640  else /* ieee to vax convert */
641  {
642  if (num == 1){
643  dbr_ntohd(&pSrc->value, &pDest->value);
644  }
645  else {
646  cvrt_double(&pSrc->value, &pDest->value, encode,num);
647  }
648  dbr_ntohd(&pSrc->upper_disp_limit,&pDest->upper_disp_limit);
649  dbr_ntohd(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
650  dbr_ntohd(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
651  dbr_ntohd(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
652  dbr_ntohd(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
653  dbr_ntohd(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
654  }
655 }
656 
657 
658 /****************************************************************************
659 ** cvrt_gr_float(s,d)
660 ** struct dbr_gr_float *d pointer to destination struct
661 ** int encode; boolean, if true vax to ieee
662 ** else ieee to vax
663 **
664 ** if encode
665 ** converts struct in HOST format to ieee format
666 ** else
667 ** converts fields of struct in NET format to fields with HOST
668 ** format;
669 ****************************************************************************/
670 
671 static void cvrt_gr_float(
672 const void *s, /* source */
673 void *d, /* destination */
674 int encode, /* cvrt HOST to NET if T */
675 arrayElementCount num /* number of values */
676 )
677 {
678  struct dbr_gr_float *pSrc = (struct dbr_gr_float *) s;
679  struct dbr_gr_float *pDest = (struct dbr_gr_float *) d;
680 
681  /* these are same for vax to ieee or ieee to vax */
682  pDest->status = dbr_ntohs(pSrc->status);
683  pDest->severity = dbr_ntohs(pSrc->severity);
684  pDest->precision = dbr_ntohs(pSrc->precision);
685  if ( s != d ) {
686  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
687  }
688 
689  if (encode) /* vax to ieee convert */
690  {
691  if (num == 1){
692  dbr_htonf(&pSrc->value, &pDest->value);
693  }
694  else {
695  cvrt_float(&pSrc->value, &pDest->value, encode,num);
696  }
697  dbr_htonf(&pSrc->upper_disp_limit,&pDest->upper_disp_limit);
698  dbr_htonf(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
699  dbr_htonf(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
700  dbr_htonf(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
701  dbr_htonf(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
702  dbr_htonf(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
703  }
704  else /* ieee to vax convert */
705  {
706  if (num == 1){
707  dbr_ntohf(&pSrc->value, &pDest->value);
708  }
709  else {
710  cvrt_float(&pSrc->value, &pDest->value, encode,num);
711  }
712  dbr_ntohf(&pSrc->upper_disp_limit,&pDest->upper_disp_limit);
713  dbr_ntohf(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
714  dbr_ntohf(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
715  dbr_ntohf(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
716  dbr_ntohf(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
717  dbr_ntohf(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
718  }
719 }
720 
721 
722 
723 /****************************************************************************
724 ** cvrt_ctrl_short(s,d)
725 ** struct dbr_gr_int *s pointer to source struct
726 ** struct dbr_gr_int *d pointer to destination struct
727 ** int encode; boolean, if true vax to ieee
728 ** else ieee to vax
729 **
730 ** converts fields of struct in NET format to fields with HOST format
731 ** or
732 ** converts fields of struct in HOST format to fields with NET format
733 **
734 ****************************************************************************/
735 
736 static void cvrt_ctrl_short(
737 const void *s, /* source */
738 void *d, /* destination */
739 int encode, /* cvrt HOST to NET if T */
740 arrayElementCount num /* number of values */
741 )
742 {
743  struct dbr_ctrl_int *pSrc = (struct dbr_ctrl_int *) s;
744  struct dbr_ctrl_int *pDest = (struct dbr_ctrl_int *) d;
745 
746  /* vax to ieee or ieee to vax -- same code */
747  pDest->status = dbr_ntohs(pSrc->status);
748  pDest->severity = dbr_ntohs(pSrc->severity);
749  if ( s != d ) {
750  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
751  }
752 
753  pDest->upper_disp_limit = dbr_ntohs(pSrc->upper_disp_limit);
754  pDest->lower_disp_limit = dbr_ntohs(pSrc->lower_disp_limit);
755  pDest->upper_alarm_limit = dbr_ntohs(pSrc->upper_alarm_limit);
756  pDest->upper_warning_limit = dbr_ntohs(pSrc->upper_warning_limit);
757  pDest->lower_alarm_limit = dbr_ntohs(pSrc->lower_alarm_limit);
758  pDest->lower_warning_limit = dbr_ntohs(pSrc->lower_warning_limit);
759  pDest->lower_ctrl_limit = dbr_ntohs(pSrc->lower_ctrl_limit);
760  pDest->upper_ctrl_limit = dbr_ntohs(pSrc->upper_ctrl_limit);
761 
762  if (num == 1)
763  pDest->value = dbr_ntohs(pSrc->value);
764  else {
765  cvrt_short(&pSrc->value, &pDest->value, encode, num);
766  }
767 }
768 
769 /****************************************************************************
770 ** cvrt_ctrl_long(s,d)
771 **
772 ** converts fields of struct in NET format to fields with HOST format
773 ** or
774 ** converts fields of struct in HOST format to fields with NET format
775 **
776 ****************************************************************************/
777 
778 static void cvrt_ctrl_long(
779 const void *s, /* source */
780 void *d, /* destination */
781 int encode, /* cvrt HOST to NET if T */
782 arrayElementCount num /* number of values */
783 )
784 {
785  struct dbr_ctrl_long *pSrc = (struct dbr_ctrl_long*) s;
786  struct dbr_ctrl_long *pDest = (struct dbr_ctrl_long *) d;
787 
788  /* vax to ieee or ieee to vax -- same code */
789  pDest->status = dbr_ntohs(pSrc->status);
790  pDest->severity = dbr_ntohs(pSrc->severity);
791  if ( s != d ) {
792  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
793  }
794 
795  pDest->upper_disp_limit = dbr_ntohl(pSrc->upper_disp_limit);
796  pDest->lower_disp_limit = dbr_ntohl(pSrc->lower_disp_limit);
797  pDest->upper_alarm_limit = dbr_ntohl(pSrc->upper_alarm_limit);
798  pDest->upper_warning_limit = dbr_ntohl(pSrc->upper_warning_limit);
799  pDest->lower_alarm_limit = dbr_ntohl(pSrc->lower_alarm_limit);
800  pDest->lower_warning_limit = dbr_ntohl(pSrc->lower_warning_limit);
801  pDest->lower_ctrl_limit = dbr_ntohl(pSrc->lower_ctrl_limit);
802  pDest->upper_ctrl_limit = dbr_ntohl(pSrc->upper_ctrl_limit);
803 
804  if (num == 1)
805  pDest->value = dbr_ntohl(pSrc->value);
806  else {
807  cvrt_long(&pSrc->value, &pDest->value, encode, num);
808  }
809 }
810 
811 /****************************************************************************
812 ** cvrt_ctrl_short(s,d)
813 **
814 ** converts fields of struct in NET format to fields with HOST format
815 ** or
816 ** converts fields of struct in HOST format to fields with NET format
817 **
818 ****************************************************************************/
819 
820 static void cvrt_ctrl_char(
821 const void *s, /* source */
822 void *d, /* destination */
823 int /*encode*/, /* cvrt HOST to NET if T */
824 arrayElementCount num /* number of values */
825 )
826 {
827  struct dbr_ctrl_char *pSrc = (struct dbr_ctrl_char *) s;
828  struct dbr_ctrl_char *pDest = (struct dbr_ctrl_char *) d;
829 
830  /* vax to ieee or ieee to vax -- same code */
831  pDest->status = dbr_ntohs(pSrc->status);
832  pDest->severity = dbr_ntohs(pSrc->severity);
833 
834  if ( s == d )
835  return;
836 
837  pDest->upper_disp_limit = pSrc->upper_disp_limit;
838  pDest->lower_disp_limit = pSrc->lower_disp_limit;
839  pDest->upper_alarm_limit = pSrc->upper_alarm_limit;
841  pDest->lower_ctrl_limit = pSrc->lower_ctrl_limit;
842  pDest->upper_ctrl_limit = pSrc->upper_ctrl_limit;
843 
844  if (num == 1)
845  pDest->value = pSrc->value;
846  else {
847  memcpy((void *)&pDest->value, (void *)&pSrc->value, num);
848  }
849 }
850 
851 /****************************************************************************
852 ** cvrt_ctrl_double(s,d)
853 **
854 ** if encode
855 ** converts struct in HOST format to ieee format
856 ** else
857 ** converts fields of struct in NET format to fields with HOST
858 ** format;
859 ****************************************************************************/
860 
861 static void cvrt_ctrl_double(
862 const void *s, /* source */
863 void *d, /* destination */
864 int encode, /* cvrt HOST to NET if T */
865 arrayElementCount num /* number of values */
866 )
867 {
868  struct dbr_ctrl_double *pSrc = (struct dbr_ctrl_double *) s;
869  struct dbr_ctrl_double *pDest = (struct dbr_ctrl_double *) d;
870 
871  /* these are the same for ieee to vax or vax to ieee */
872  pDest->status = dbr_ntohs(pSrc->status);
873  pDest->severity = dbr_ntohs(pSrc->severity);
874  pDest->precision = dbr_ntohs(pSrc->precision);
875  if ( s != d ) {
876  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
877  }
878  if (encode) /* vax to ieee convert */
879  {
880  if (num == 1){
881  dbr_htond(&pSrc->value, &pDest->value);
882  }
883  else {
884  cvrt_double(&pSrc->value, &pDest->value, encode, num);
885  }
886  dbr_htond(&pSrc->upper_disp_limit,&pDest->upper_disp_limit);
887  dbr_htond(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
888  dbr_htond(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
889  dbr_htond(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
890  dbr_htond(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
891  dbr_htond(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
892  dbr_htond(&pSrc->lower_ctrl_limit, &pDest->lower_ctrl_limit);
893  dbr_htond(&pSrc->upper_ctrl_limit, &pDest->upper_ctrl_limit);
894  }
895  else /* ieee to vax convert */
896  {
897  if (num == 1){
898  dbr_ntohd(&pSrc->value, &pDest->value);
899  }
900  else {
901  cvrt_double(&pSrc->value, &pDest->value, encode, num);
902  }
903  dbr_ntohd(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
904  dbr_ntohd(&pSrc->upper_disp_limit, &pDest->upper_disp_limit);
905  dbr_ntohd(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
906  dbr_ntohd(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
907  dbr_ntohd(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
908  dbr_ntohd(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
909  dbr_ntohd(&pSrc->lower_ctrl_limit, &pDest->lower_ctrl_limit);
910  dbr_ntohd(&pSrc->upper_ctrl_limit, &pDest->upper_ctrl_limit);
911  }
912 
913 }
914 
915 
916 
917 /****************************************************************************
918 ** cvrt_ctrl_float(s,d)
919 **
920 ** if encode
921 ** converts struct in HOST format to ieee format
922 ** else
923 ** converts fields of struct in NET format to fields with HOST
924 ** format;
925 ****************************************************************************/
926 
927 static void cvrt_ctrl_float(
928 const void *s, /* source */
929 void *d, /* destination */
930 int encode, /* cvrt HOST to NET if T */
931 arrayElementCount num /* number of values */
932 )
933 {
934  struct dbr_ctrl_float *pSrc = (struct dbr_ctrl_float *) s;
935  struct dbr_ctrl_float *pDest = (struct dbr_ctrl_float *) d;
936 
937  /* these are the same for ieee to vaax or vax to ieee */
938  pDest->status = dbr_ntohs(pSrc->status);
939  pDest->severity = dbr_ntohs(pSrc->severity);
940  pDest->precision = dbr_ntohs(pSrc->precision);
941  if ( s != d ) {
942  memcpy(pDest->units,pSrc->units,sizeof(pSrc->units));
943  }
944  if (encode) /* vax to ieee convert */
945  {
946  if (num == 1){
947  dbr_htonf(&pSrc->value, &pDest->value);
948  }
949  else {
950  cvrt_float(&pSrc->value, &pDest->value, encode, num);
951  }
952  dbr_htonf(&pSrc->upper_disp_limit,&pDest->upper_disp_limit);
953  dbr_htonf(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
954  dbr_htonf(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
955  dbr_htonf(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
956  dbr_htonf(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
957  dbr_htonf(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
958  dbr_htonf(&pSrc->lower_ctrl_limit, &pDest->lower_ctrl_limit);
959  dbr_htonf(&pSrc->upper_ctrl_limit, &pDest->upper_ctrl_limit);
960  }
961  else /* ieee to vax convert */
962  {
963  if (num == 1){
964  dbr_ntohf(&pSrc->value, &pDest->value);
965  }
966  else {
967  cvrt_float(&pSrc->value, &pDest->value, encode, num);
968  }
969  dbr_ntohf(&pSrc->lower_disp_limit, &pDest->lower_disp_limit);
970  dbr_ntohf(&pSrc->upper_disp_limit, &pDest->upper_disp_limit);
971  dbr_ntohf(&pSrc->upper_alarm_limit, &pDest->upper_alarm_limit);
972  dbr_ntohf(&pSrc->upper_warning_limit, &pDest->upper_warning_limit);
973  dbr_ntohf(&pSrc->lower_alarm_limit, &pDest->lower_alarm_limit);
974  dbr_ntohf(&pSrc->lower_warning_limit, &pDest->lower_warning_limit);
975  dbr_ntohf(&pSrc->lower_ctrl_limit, &pDest->lower_ctrl_limit);
976  dbr_ntohf(&pSrc->upper_ctrl_limit, &pDest->upper_ctrl_limit);
977  }
978 
979 }
980 
981 
982 /****************************************************************************
983 ** cvrt_ctrl_enum(s,d)
984 **
985 ** if encode
986 ** converts struct in HOST format to ieee format
987 ** else
988 ** converts fields of struct in NET format to fields with HOST
989 ** format;
990 ****************************************************************************/
991 
992 static void cvrt_ctrl_enum(
993 const void *s, /* source */
994 void *d, /* destination */
995 int encode, /* cvrt HOST to NET if T */
996 arrayElementCount num /* number of values */
997 )
998 {
999  struct dbr_ctrl_enum *pSrc = (struct dbr_ctrl_enum *) s;
1000  struct dbr_ctrl_enum *pDest = (struct dbr_ctrl_enum *) d;
1001 
1002  pDest->status = dbr_ntohs(pSrc->status);
1003  pDest->severity = dbr_ntohs(pSrc->severity);
1004  pDest->no_str = dbr_ntohs(pSrc->no_str);
1005  if ( s != d ) {
1006  memcpy((void *)pDest->strs,(void *)pSrc->strs,sizeof(pSrc->strs));
1007  }
1008 
1009  if (num == 1) /* single value */
1010  pDest->value = dbr_ntohs(pSrc->value);
1011  else /* array chan-- multiple pts */
1012  {
1013  cvrt_enum(&(pSrc->value), &(pDest->value), encode, num);
1014  }
1015 }
1016 
1017 /****************************************************************************
1018 ** cvrt_sts_char(s,d)
1019 ** struct dbr_sts_int *s pointer to source struct
1020 ** struct dbr_sts_int *d pointer to destination struct
1021 ** int encode; boolean, if true vax to ieee
1022 ** else ieee to vax
1023 **
1024 ** converts fields ofstruct in HOST format to ieee format
1025 ** or
1026 ** converts fields of struct in NET format to fields with HOST
1027 ** format
1028 ****************************************************************************/
1029 
1030 static void cvrt_sts_char(
1031 const void *s, /* source */
1032 void *d, /* destination */
1033 int /*encode*/, /* cvrt HOST to NET if T */
1034 arrayElementCount num /* number of values */
1035 )
1036 {
1037  struct dbr_sts_char *pSrc = (struct dbr_sts_char *) s;
1038  struct dbr_sts_char *pDest = (struct dbr_sts_char *) d;
1039 
1040  /* convert vax to ieee or ieee to vax format -- same code*/
1041  pDest->status = dbr_ntohs(pSrc->status);
1042  pDest->severity = dbr_ntohs(pSrc->severity);
1043 
1044  if ( s == d )
1045  return;
1046 
1047  if (num == 1) /* single value */
1048  pDest->value = pSrc->value;
1049  else /* array chan-- multiple pts */
1050  {
1051  memcpy((void *)&pDest->value, (void *)&pSrc->value, num);
1052  }
1053 }
1054 
1055 /****************************************************************************
1056 ** cvrt_sts_long(s,d)
1057 **
1058 ** converts fields ofstruct in HOST format to ieee format
1059 ** or
1060 ** converts fields of struct in NET format to fields with HOST
1061 ** format
1062 ****************************************************************************/
1063 
1064 static void cvrt_sts_long(
1065 const void *s, /* source */
1066 void *d, /* destination */
1067 int encode, /* cvrt HOST to NET if T */
1068 arrayElementCount num /* number of values */
1069 )
1070 {
1071  struct dbr_sts_long *pSrc = (struct dbr_sts_long *) s;
1072  struct dbr_sts_long *pDest = (struct dbr_sts_long *) d;
1073 
1074  /* convert vax to ieee or ieee to vax format -- same code*/
1075  pDest->status = dbr_ntohs(pSrc->status);
1076  pDest->severity = dbr_ntohs(pSrc->severity);
1077 
1078  if (num == 1) /* single value */
1079  pDest->value = dbr_ntohl(pSrc->value);
1080  else /* array chan-- multiple pts */
1081  {
1082  cvrt_long(&pDest->value, &pSrc->value, encode, num);
1083  }
1084 }
1085 
1086 
1087 /****************************************************************************
1088 ** cvrt_time_string(s,d)
1089 **
1090 ** converts fields of struct in HOST format to NET format
1091 ** or
1092 ** converts fields of struct in NET format to fields with HOST
1093 ** format;
1094 ****************************************************************************/
1095 
1096 static void cvrt_time_string(
1097 const void *s, /* source */
1098 void *d, /* destination */
1099 int /*encode*/, /* cvrt HOST to NET if T */
1100 arrayElementCount num /* number of values */
1101 )
1102 {
1103  struct dbr_time_string *pSrc = (struct dbr_time_string *) s;
1104  struct dbr_time_string *pDest = (struct dbr_time_string *) d;
1105 
1106  /* convert ieee to vax format or vax to ieee */
1107  pDest->status = dbr_ntohs(pSrc->status);
1108  pDest->severity = dbr_ntohs(pSrc->severity);
1109  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1110  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1111 
1112  if ( s != d ) {
1113  memcpy(pDest->value, pSrc->value, (MAX_STRING_SIZE * num));
1114  }
1115 }
1116 
1117 /****************************************************************************
1118 ** cvrt_time_short(s,d)
1119 **
1120 ** converts fields ofstruct in HOST format to ieee format
1121 ** or
1122 ** converts fields of struct in NET format to fields with HOST
1123 ** format
1124 ****************************************************************************/
1125 
1126 static void cvrt_time_short(
1127 const void *s, /* source */
1128 void *d, /* destination */
1129 int encode, /* cvrt HOST to NET if T */
1130 arrayElementCount num /* number of values */
1131 )
1132 {
1133  struct dbr_time_short *pSrc = (struct dbr_time_short *) s;
1134  struct dbr_time_short *pDest = (struct dbr_time_short *) d;
1135 
1136  /* convert vax to ieee or ieee to vax format -- same code*/
1137  pDest->status = dbr_ntohs(pSrc->status);
1138  pDest->severity = dbr_ntohs(pSrc->severity);
1139  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1140  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1141 
1142  if (num == 1) /* single value */
1143  pDest->value = dbr_ntohs(pSrc->value);
1144  else /* array chan-- multiple pts */
1145  {
1146  cvrt_short(&pSrc->value, &pDest->value, encode, num);
1147  }
1148 }
1149 
1150 /****************************************************************************
1151 ** cvrt_time_float(s,d)
1152 **
1153 ** if encode
1154 ** converts struct in HOST format to ieee format
1155 ** else
1156 ** converts fields of struct in NET format to fields with HOST
1157 ** format;
1158 ****************************************************************************/
1159 
1160 static void cvrt_time_float(
1161 const void *s, /* source */
1162 void *d, /* destination */
1163 int encode, /* cvrt HOST to NET if T */
1164 arrayElementCount num /* number of values */
1165 )
1166 {
1167  struct dbr_time_float *pSrc = (struct dbr_time_float *) s;
1168  struct dbr_time_float *pDest = (struct dbr_time_float *) d;
1169 
1170  pDest->status = dbr_ntohs(pSrc->status);
1171  pDest->severity = dbr_ntohs(pSrc->severity);
1172  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1173  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1174 
1175  cvrt_float(&pSrc->value, &pDest->value, encode, num);
1176 }
1177 
1178 /****************************************************************************
1179 ** cvrt_time_double(s,d)
1180 **
1181 ** if encode
1182 ** converts struct in HOST format to ieee format
1183 ** else
1184 ** converts fields of struct in NET format to fields with HOST
1185 ** format;
1186 ****************************************************************************/
1187 
1188 static void cvrt_time_double(
1189 const void *s, /* source */
1190 void *d, /* destination */
1191 int encode, /* cvrt HOST to NET if T */
1192 arrayElementCount num /* number of values */
1193 )
1194 {
1195  struct dbr_time_double *pSrc = (struct dbr_time_double *) s;
1196  struct dbr_time_double *pDest = (struct dbr_time_double *) d;
1197 
1198  pDest->status = dbr_ntohs(pSrc->status);
1199  pDest->severity = dbr_ntohs(pSrc->severity);
1200  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1201  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1202 
1203  cvrt_double(&pSrc->value, &pDest->value, encode, num);
1204 }
1205 
1206 
1207 
1208 /****************************************************************************
1209 ** cvrt_time_enum(s,d)
1210 **
1211 ** converts fields of struct in NET format to fields with HOST format
1212 ** or
1213 ** converts fields of struct in HOST format to fields with NET format
1214 **
1215 ****************************************************************************/
1216 
1217 static void cvrt_time_enum(
1218 const void *s, /* source */
1219 void *d, /* destination */
1220 int encode, /* cvrt HOST to NET if T */
1221 arrayElementCount num /* number of values */
1222 )
1223 {
1224  struct dbr_time_enum *pSrc = (struct dbr_time_enum *) s;
1225  struct dbr_time_enum *pDest = (struct dbr_time_enum *) d;
1226 
1227  pDest->status = dbr_ntohs(pSrc->status);
1228  pDest->severity = dbr_ntohs(pSrc->severity);
1229  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1230  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1231  if (num == 1)
1232  pDest->value = dbr_ntohs(pSrc->value);
1233  else {
1234  cvrt_enum(&pSrc->value,&pDest->value,encode,num);
1235  }
1236 }
1237 
1238 /****************************************************************************
1239 ** cvrt_sts_char(s,d)
1240 **
1241 ** converts fields ofstruct in HOST format to ieee format
1242 ** or
1243 ** converts fields of struct in NET format to fields with HOST
1244 ** format
1245 ****************************************************************************/
1246 
1247 static void cvrt_time_char(
1248 const void *s, /* source */
1249 void *d, /* destination */
1250 int /*encode*/, /* cvrt HOST to NET if T */
1251 arrayElementCount num /* number of values */
1252 )
1253 {
1254  struct dbr_time_char *pSrc = (struct dbr_time_char *) s;
1255  struct dbr_time_char *pDest = (struct dbr_time_char *) d;
1256 
1257  /* convert vax to ieee or ieee to vax format -- same code*/
1258  pDest->status = dbr_ntohs(pSrc->status);
1259  pDest->severity = dbr_ntohs(pSrc->severity);
1260  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1261  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1262 
1263  if ( s == d )
1264  return;
1265 
1266  if (num == 1) /* single value */
1267  pDest->value = pSrc->value;
1268  else /* array chan-- multiple pts */
1269  {
1270  memcpy((void *)&pDest->value, (void *)&pSrc->value, num);
1271  }
1272 }
1273 /****************************************************************************
1274 ** cvrt_time_long(s,d)
1275 **
1276 ** converts fields ofstruct in HOST format to ieee format
1277 ** or
1278 ** converts fields of struct in NET format to fields with HOST
1279 ** format
1280 ****************************************************************************/
1281 
1282 static void cvrt_time_long(
1283 const void *s, /* source */
1284 void *d, /* destination */
1285 int encode, /* cvrt HOST to NET if T */
1286 arrayElementCount num /* number of values */
1287 )
1288 {
1289  struct dbr_time_long *pSrc = (struct dbr_time_long *) s;
1290  struct dbr_time_long *pDest = (struct dbr_time_long *) d;
1291 
1292  /* convert vax to ieee or ieee to vax format -- same code*/
1293  pDest->status = dbr_ntohs(pSrc->status);
1294  pDest->severity = dbr_ntohs(pSrc->severity);
1295  pDest->stamp.secPastEpoch = dbr_ntohl(pSrc->stamp.secPastEpoch);
1296  pDest->stamp.nsec = dbr_ntohl(pSrc->stamp.nsec);
1297 
1298  if (num == 1) /* single value */
1299  pDest->value = dbr_ntohl(pSrc->value);
1300  else /* array chan-- multiple pts */
1301  {
1302  cvrt_long(&pDest->value, &pSrc->value, encode, num);
1303  }
1304 }
1305 
1306 /*
1307  * cvrt_put_ackt()
1308  *
1309  *
1310  *
1311  *
1312  */
1313 static void cvrt_put_ackt(
1314 const void *s, /* source */
1315 void *d, /* destination */
1316 int /*encode*/, /* cvrt HOST to NET if T */
1317 arrayElementCount num /* number of values */
1318 )
1319 {
1320  dbr_put_ackt_t *pSrc = (dbr_put_ackt_t *) s;
1321  dbr_put_ackt_t *pDest = (dbr_put_ackt_t *) d;
1323 
1324  for(i=0; i<num; i++){
1325  *pDest = dbr_ntohs( *pSrc );
1326  /*
1327  * dont increment these inside the MACRO
1328  */
1329  pDest++;
1330  pSrc++;
1331  }
1332 }
1333 
1334 /****************************************************************************
1335 ** cvrt_stsack_string(s,d)
1336 ** struct dbr_stsack_string *s pointer to source struct
1337 ** struct dbr_stsack_string *d pointer to destination struct
1338 ** int encode; boolean, if true vax to ieee
1339 ** else ieee to vax
1340 **
1341 ** converts fields of struct in HOST format to NET format
1342 ** or
1343 ** converts fields of struct in NET format to fields with HOST
1344 ** format;
1345 ****************************************************************************/
1346 
1347 static void cvrt_stsack_string(
1348 const void *s, /* source */
1349 void *d, /* destination */
1350 int /*encode*/, /* cvrt HOST to NET if T */
1351 arrayElementCount num /* number of values */
1352 )
1353 {
1354  struct dbr_stsack_string *pSrc = (struct dbr_stsack_string *) s;
1355  struct dbr_stsack_string *pDest = (struct dbr_stsack_string *) d;
1356 
1357  /* convert ieee to vax format or vax to ieee */
1358  pDest->status = dbr_ntohs(pSrc->status);
1359  pDest->severity = dbr_ntohs(pSrc->severity);
1360  pDest->ackt = dbr_ntohs(pSrc->ackt);
1361  pDest->acks = dbr_ntohs(pSrc->acks);
1362 
1363  /* convert "in place" -> nothing else to do */
1364  if (s == d)
1365  return;
1366 
1367  memcpy(pDest->value, pSrc->value, (MAX_STRING_SIZE * num));
1368 }
1369 
1370 /* cvrt is (array of) (pointer to) (function returning) int */
1371 static CACVRTFUNCPTR cac_dbr_cvrt[] = {
1372  cvrt_string,
1373  cvrt_short,
1374  cvrt_float,
1375  cvrt_enum,
1376  cvrt_char,
1377  cvrt_long,
1378  cvrt_double,
1379 
1380  cvrt_sts_string,
1381  cvrt_sts_short,
1382  cvrt_sts_float,
1383  cvrt_sts_enum,
1384  cvrt_sts_char,
1385  cvrt_sts_long,
1386  cvrt_sts_double,
1387 
1388  cvrt_time_string,
1389  cvrt_time_short,
1390  cvrt_time_float,
1391  cvrt_time_enum,
1392  cvrt_time_char,
1393  cvrt_time_long,
1394  cvrt_time_double,
1395 
1396  cvrt_sts_string, /* DBR_GR_STRING identical to dbr_sts_string */
1397  cvrt_gr_short,
1398  cvrt_gr_float,
1399  cvrt_gr_enum,
1400  cvrt_gr_char,
1401  cvrt_gr_long,
1402  cvrt_gr_double,
1403 
1404  cvrt_sts_string, /* DBR_CTRL_STRING identical to dbr_sts_string */
1405  cvrt_ctrl_short,
1406  cvrt_ctrl_float,
1407  cvrt_ctrl_enum,
1408  cvrt_ctrl_char,
1409  cvrt_ctrl_long,
1410  cvrt_ctrl_double,
1411 
1412  cvrt_put_ackt,
1413  cvrt_put_ackt, /* DBR_PUT_ACKS identical to DBR_PUT_ACKT */
1414  cvrt_stsack_string,
1415  cvrt_string
1416 };
1417 
1418 #endif /* EPICS_CONVERSION_REQUIRED */
1419 
1420 int caNetConvert ( unsigned type, const void *pSrc, void *pDest,
1421  int hton, arrayElementCount count )
1422 {
1423 # ifdef EPICS_CONVERSION_REQUIRED
1424  if ( type >= NELEMENTS ( cac_dbr_cvrt ) ) {
1425  return ECA_BADTYPE;
1426  }
1427  ( * cac_dbr_cvrt [ type ] ) ( pSrc, pDest, hton, count );
1428 # else
1429  if ( INVALID_DB_REQ ( type ) ) {
1430  return ECA_BADTYPE;
1431  }
1432  if ( pSrc != pDest ) {
1433  memcpy ( pDest, pSrc, dbr_size_n ( type, count ) );
1434  }
1435 # endif
1436  return ECA_NORMAL;
1437 }
1438 
dbr_char_t upper_ctrl_limit
Definition: db_access.h:478
dbr_short_t severity
Definition: db_access.h:352
dbr_double_t upper_disp_limit
Definition: db_access.h:507
dbr_short_t severity
Definition: db_access.h:205
dbr_short_t severity
Definition: db_access.h:288
dbr_short_t severity
Definition: db_access.h:178
dbr_double_t value
Definition: db_access.h:299
dbr_char_t upper_alarm_limit
Definition: db_access.h:366
dbr_short_t status
Definition: db_access.h:309
dbr_float_t upper_warning_limit
Definition: db_access.h:343
dbr_short_t severity
Definition: db_access.h:252
dbr_long_t upper_ctrl_limit
Definition: db_access.h:495
dbr_short_t status
Definition: db_access.h:226
dbr_short_t value
Definition: db_access.h:422
dbr_short_t status
Definition: db_access.h:361
dbr_long_t upper_disp_limit
Definition: db_access.h:379
dbr_short_t status
Definition: db_access.h:218
dbr_short_t value
Definition: db_access.h:255
dbr_long_t value
Definition: db_access.h:497
dbr_double_t upper_alarm_limit
Definition: db_access.h:397
dbr_float_t upper_alarm_limit
Definition: db_access.h:342
dbr_short_t severity
Definition: db_access.h:219
dbr_short_t status
Definition: db_access.h:177
dbr_long_t upper_alarm_limit
Definition: db_access.h:491
dbr_char_t lower_ctrl_limit
Definition: db_access.h:479
dbr_short_t status
Definition: db_access.h:268
dbr_short_t status
Definition: db_access.h:204
int i
Definition: scan.c:967
dbr_short_t lower_warning_limit
Definition: db_access.h:418
char units[MAX_UNITS_SIZE]
Definition: db_access.h:506
dbr_short_t lower_disp_limit
Definition: db_access.h:415
dbr_short_t severity
Definition: db_access.h:391
int caNetConvert(unsigned type, const void *pSrc, void *pDest, int hton, arrayElementCount count)
Definition: convert.cpp:1420
dbr_float_t lower_ctrl_limit
Definition: db_access.h:453
dbr_short_t status
Definition: db_access.h:486
char units[MAX_UNITS_SIZE]
Definition: db_access.h:311
unsigned short epicsUInt16
Definition: epicsTypes.h:41
dbr_long_t lower_ctrl_limit
Definition: db_access.h:496
dbr_double_t value
Definition: db_access.h:236
epicsFloat32 dbr_float_t
Definition: db_access.h:46
dbr_enum_t value
Definition: db_access.h:213
dbr_short_t status
Definition: db_access.h:459
dbr_short_t status
Definition: db_access.h:192
epicsTimeStamp stamp
Definition: db_access.h:297
pvd::StructureConstPtr type
dbr_char_t upper_warning_limit
Definition: db_access.h:475
char units[MAX_UNITS_SIZE]
Definition: db_access.h:394
dbr_short_t status
Definition: db_access.h:335
#define INVALID_DB_REQ(x)
Definition: db_access.h:115
dbr_long_t lower_disp_limit
Definition: db_access.h:490
dbr_short_t status
Definition: db_access.h:233
dbr_float_t upper_warning_limit
Definition: db_access.h:449
dbr_char_t lower_warning_limit
Definition: db_access.h:368
dbr_long_t lower_warning_limit
Definition: db_access.h:383
dbr_char_t lower_alarm_limit
Definition: db_access.h:369
dbr_double_t upper_disp_limit
Definition: db_access.h:395
dbr_short_t upper_alarm_limit
Definition: db_access.h:416
unsigned int epicsUInt32
Definition: epicsTypes.h:43
dbr_double_t lower_disp_limit
Definition: db_access.h:396
dbr_long_t lower_warning_limit
Definition: db_access.h:493
dbr_short_t precision
Definition: db_access.h:392
dbr_short_t lower_warning_limit
Definition: db_access.h:316
dbr_float_t upper_ctrl_limit
Definition: db_access.h:452
Miscellaneous macro definitions.
dbr_short_t severity
Definition: db_access.h:193
dbr_char_t upper_disp_limit
Definition: db_access.h:472
dbr_long_t upper_warning_limit
Definition: db_access.h:492
dbr_string_t value
Definition: db_access.h:246
dbr_float_t value
Definition: db_access.h:454
dbr_float_t upper_disp_limit
Definition: db_access.h:340
dbr_short_t status
Definition: db_access.h:287
dbr_short_t lower_alarm_limit
Definition: db_access.h:317
dbr_short_t severity
Definition: db_access.h:234
dbr_short_t lower_ctrl_limit
Definition: db_access.h:421
dbr_short_t value
Definition: db_access.h:318
dbr_long_t upper_disp_limit
Definition: db_access.h:489
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
Definition: epicsTime.h:34
dbr_float_t value
Definition: db_access.h:206
dbr_short_t lower_alarm_limit
Definition: db_access.h:419
dbr_ushort_t acks
Definition: db_access.h:187
dbr_short_t severity
Definition: db_access.h:503
char strs[MAX_ENUM_STATES][MAX_ENUM_STRING_SIZE]
Definition: db_access.h:462
char units[MAX_UNITS_SIZE]
Definition: db_access.h:378
dbr_short_t severity
Definition: db_access.h:362
dbr_char_t upper_warning_limit
Definition: db_access.h:367
dbr_short_t severity
Definition: db_access.h:442
dbr_short_t upper_disp_limit
Definition: db_access.h:312
dbr_ushort_t ackt
Definition: db_access.h:186
dbr_char_t value
Definition: db_access.h:371
dbr_short_t severity
Definition: db_access.h:227
dbr_float_t value
Definition: db_access.h:346
dbr_short_t severity
Definition: db_access.h:261
dbr_double_t upper_alarm_limit
Definition: db_access.h:509
dbr_double_t upper_ctrl_limit
Definition: db_access.h:513
dbr_double_t upper_warning_limit
Definition: db_access.h:398
dbr_short_t upper_warning_limit
Definition: db_access.h:315
dbr_char_t upper_disp_limit
Definition: db_access.h:364
dbr_short_t status
Definition: db_access.h:351
dbr_enum_t value
Definition: db_access.h:356
dbr_short_t value
Definition: db_access.h:194
dbr_char_t value
Definition: db_access.h:481
#define ECA_NORMAL
Definition: caerr.h:77
dbr_long_t lower_alarm_limit
Definition: db_access.h:494
dbr_short_t severity
Definition: db_access.h:296
dbr_double_t value
Definition: db_access.h:401
dbr_enum_t value
Definition: db_access.h:272
dbr_short_t severity
Definition: db_access.h:269
dbr_short_t status
Definition: db_access.h:243
dbr_short_t severity
Definition: db_access.h:278
dbr_short_t upper_disp_limit
Definition: db_access.h:414
dbr_short_t upper_alarm_limit
Definition: db_access.h:314
dbr_short_t severity
Definition: db_access.h:470
dbr_short_t status
Definition: db_access.h:502
dbr_char_t value
Definition: db_access.h:282
dbr_short_t status
Definition: db_access.h:411
dbr_short_t severity
Definition: db_access.h:310
epicsFloat64 dbr_double_t
Definition: db_access.h:47
dbr_double_t lower_alarm_limit
Definition: db_access.h:400
dbr_double_t lower_ctrl_limit
Definition: db_access.h:514
dbr_short_t status
Definition: db_access.h:441
dbr_double_t lower_warning_limit
Definition: db_access.h:511
dbr_float_t value
Definition: db_access.h:263
epicsTimeStamp stamp
Definition: db_access.h:245
epicsTimeStamp stamp
Definition: db_access.h:262
#define NELEMENTS(A)
Definition: aToIPAddr.c:21
dbr_double_t lower_alarm_limit
Definition: db_access.h:512
dbr_short_t no_str
Definition: db_access.h:353
dbr_short_t no_str
Definition: db_access.h:461
epicsUInt8 dbr_char_t
Definition: db_access.h:39
dbr_char_t lower_disp_limit
Definition: db_access.h:365
dbr_short_t status
Definition: db_access.h:469
dbr_short_t precision
Definition: db_access.h:504
dbr_short_t precision
Definition: db_access.h:443
dbr_short_t upper_ctrl_limit
Definition: db_access.h:420
epicsUInt16 dbr_enum_t
Definition: db_access.h:43
unsigned long arrayElementCount
Definition: cacIO.h:57
dbr_double_t upper_warning_limit
Definition: db_access.h:510
char units[MAX_UNITS_SIZE]
Definition: db_access.h:445
dbr_short_t status
Definition: db_access.h:277
dbr_float_t upper_disp_limit
Definition: db_access.h:446
dbr_double_t lower_warning_limit
Definition: db_access.h:399
dbr_char_t lower_disp_limit
Definition: db_access.h:473
dbr_char_t value
Definition: db_access.h:221
dbr_short_t severity
Definition: db_access.h:377
dbr_short_t lower_disp_limit
Definition: db_access.h:313
dbr_short_t status
Definition: db_access.h:251
dbr_float_t upper_alarm_limit
Definition: db_access.h:448
#define MAX_STRING_SIZE
Definition: epicsTypes.h:65
dbr_short_t upper_warning_limit
Definition: db_access.h:417
dbr_long_t value
Definition: db_access.h:228
#define dbr_size_n(TYPE, COUNT)
Definition: db_access.h:518
epicsTimeStamp stamp
Definition: db_access.h:289
dbr_long_t value
Definition: db_access.h:290
dbr_double_t lower_disp_limit
Definition: db_access.h:508
dbr_short_t precision
Definition: db_access.h:337
dbr_float_t lower_warning_limit
Definition: db_access.h:450
dbr_float_t lower_disp_limit
Definition: db_access.h:447
dbr_short_t status
Definition: db_access.h:260
dbr_long_t upper_warning_limit
Definition: db_access.h:382
dbr_char_t upper_alarm_limit
Definition: db_access.h:474
dbr_enum_t value
Definition: db_access.h:464
#define ECA_BADTYPE
Definition: caerr.h:91
char units[MAX_UNITS_SIZE]
Definition: db_access.h:413
dbr_short_t status
Definition: db_access.h:211
dbr_double_t value
Definition: db_access.h:515
dbr_ushort_t status
Definition: db_access.h:184
epicsTimeStamp stamp
Definition: db_access.h:253
dbr_long_t value
Definition: db_access.h:385
epicsTimeStamp stamp
Definition: db_access.h:270
epicsInt16 dbr_short_t
Definition: db_access.h:40
dbr_float_t lower_warning_limit
Definition: db_access.h:344
epicsInt32 dbr_long_t
Definition: db_access.h:44
dbr_string_t value
Definition: db_access.h:188
dbr_ushort_t severity
Definition: db_access.h:185
dbr_long_t upper_alarm_limit
Definition: db_access.h:381
epicsUInt16 dbr_put_ackt_t
Definition: db_access.h:48
dbr_float_t lower_disp_limit
Definition: db_access.h:341
epicsTimeStamp stamp
Definition: db_access.h:279
char units[MAX_UNITS_SIZE]
Definition: db_access.h:363
dbr_float_t lower_alarm_limit
Definition: db_access.h:451
dbr_string_t value
Definition: db_access.h:179
dbr_short_t severity
Definition: db_access.h:460
dbr_short_t severity
Definition: db_access.h:412
dbr_short_t severity
Definition: db_access.h:487
dbr_long_t lower_disp_limit
Definition: db_access.h:380
char units[MAX_UNITS_SIZE]
Definition: db_access.h:488
dbr_short_t severity
Definition: db_access.h:336
dbr_float_t lower_alarm_limit
Definition: db_access.h:345
dbr_short_t status
Definition: db_access.h:295
dbr_long_t lower_alarm_limit
Definition: db_access.h:384
dbr_short_t status
Definition: db_access.h:376
char units[MAX_UNITS_SIZE]
Definition: db_access.h:339
epicsUInt32 nsec
nanoseconds within second
Definition: epicsTime.h:35
char strs[MAX_ENUM_STATES][MAX_ENUM_STRING_SIZE]
Definition: db_access.h:354
dbr_short_t severity
Definition: db_access.h:212
dbr_short_t status
Definition: db_access.h:390
dbr_short_t severity
Definition: db_access.h:244