conduitEventHandlerArgs.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef CONDUITEVENTHANDLERARGS_H
00009 #define CONDUITEVENTHANDLERARGS_H
00010 
00011 #include <cadef.h>
00012 #include <conduit.h>
00013 #include <helper.h>
00014 
00015 
00020 struct change_eventHandlerArgs
00021 {
00022 #define __METHOD__ "change_eventHandlerArgs"
00023     change_eventHandlerArgs (const struct event_handler_args & new_eventHandlerArgs) :
00024             new_eventHandlerArgs(new_eventHandlerArgs){}
00025 
00026     void operator() (Conduit& c) {
00027                 
00028                 
00029 
00030                                 c.status= new_eventHandlerArgs.status;
00031         if(c.status!=ECA_NORMAL) return;
00032 
00033         Helper helper;
00034 
00035         chtype requestedT= new_eventHandlerArgs.type%DBR_STS_STRING;
00036         chtype bufferType= new_eventHandlerArgs.type; //default
00037                                 //Fill with what actually came back!
00038         //Let is do comparison!
00039         CAFENUM::DBR_TYPE dbrTypeClass=helper.convertToCAFEDbrTypeClass(new_eventHandlerArgs.type);
00040 
00041 
00042 
00043         c.usrArgs = new_eventHandlerArgs.usr;
00044                                 c.dataType= requestedT;
00045                                 c.dbrDataType= bufferType;
00046                                 c.cafeDbrType= dbrTypeClass;
00047 
00048         c.hasNewData=true; //flag used by getMonitorAction for CAFE extensions!
00049 
00050 
00051         if (new_eventHandlerArgs.type < DBR_GR_STRING) {
00052             bufferType = dbf_type_to_DBR_TIME(requestedT);
00053         }
00054         else if (new_eventHandlerArgs.type < DBR_PUT_ACKT) {
00055             bufferType = dbf_type_to_DBR_CTRL(requestedT);
00056         }
00057         else if (new_eventHandlerArgs.type < (LAST_BUFFER_TYPE+1)) {
00058            // keep default
00059         }
00060         else {
00061             std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00062             std::cout << "CAFE INTERNAL FUNNY: UNKNOWN event_handler_args.type= "
00063                     <<  new_eventHandlerArgs.type << std::endl;
00064         }
00065 
00066         // A safety check that the buffer size is indeed large enough to hold the data
00067 
00068         unsigned int nrequired  = dbr_size_n(bufferType, new_eventHandlerArgs.count);
00069         unsigned int navailable = nrequired;
00070 
00071         
00072 
00073         switch(dbrTypeClass)
00074         {
00075         case CAFENUM::DBR_STSACK:
00076             navailable =   c.channelRequestMetaSTSACK.byteSize;
00077             c.channelRequestMetaSTSACK.nelem        =  new_eventHandlerArgs.count;
00078             c.channelRequestMetaSTSACK.dataType     =  requestedT;
00079             c.channelRequestMetaSTSACK.dbrDataType  =  new_eventHandlerArgs.type;
00080             c.channelRequestMetaSTSACK.cafeDbrType  =  dbrTypeClass;
00081             c.channelRequestMetaSTSACK.usrArg       =  new_eventHandlerArgs.usr; //c.channelRequestMetaDataClient.usrArg;
00082             break;
00083         case CAFENUM::DBR_PRIMITIVE:
00084         case CAFENUM::DBR_STS:
00085         case CAFENUM::DBR_TIME:
00086             navailable =   c.channelRequestMetaData.byteSize; //
00087                                                 
00088                                         
00089         
00090             c.channelRequestMetaData.nelem        =  new_eventHandlerArgs.count;            
00091             c.channelRequestMetaData.dataType     =  requestedT;
00092             c.channelRequestMetaData.dbrDataType  =  new_eventHandlerArgs.type;
00093             c.channelRequestMetaData.cafeDbrType  =  dbrTypeClass;
00094             c.channelRequestMetaData.usrArg       =  new_eventHandlerArgs.usr; //c.channelRequestMetaDataClient.usrArg;
00095                                                 
00096                                                 //Do this check here already
00097             if (nrequired > navailable) {
00098                 c.channelRequestMetaData.byteSize     =  nrequired;
00099                                                                 
00100             }
00101             break;
00102         case CAFENUM::DBR_GR:
00103         case CAFENUM::DBR_CTRL:
00104             navailable =   c.channelRequestMetaCtrl.byteSize;
00105             c.channelRequestMetaCtrl.nelem        =  new_eventHandlerArgs.count;
00106             c.channelRequestMetaCtrl.dataType     =  requestedT;
00107             c.channelRequestMetaCtrl.dbrDataType  =  new_eventHandlerArgs.type;
00108             c.channelRequestMetaCtrl.cafeDbrType  =  dbrTypeClass;
00109             c.channelRequestMetaCtrl.usrArg       =  new_eventHandlerArgs.usr; //c.channelRequestMetaDataClient.usrArg;
00110             if (nrequired > navailable) {
00111                 c.channelRequestMetaCtrl.byteSize     =  nrequired;
00112             }
00113             break;
00114         case CAFENUM::DBR_CLASS:
00115             break;
00116         case CAFENUM::DBR_NONE:
00117             break;
00118         default:
00119             std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00120             std::cout << "CAFE INTERNAL FUNNY: UNKNOWN CAFENUM::DBR_TYPE= " <<  dbrTypeClass  << std::endl;
00121             break;
00122         }
00123 
00124                                 
00125                         
00126 
00127         if (nrequired > navailable) {
00128 
00129             std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00130             std::cout << "CHANGE OF BUFFER SIZE: FROM " << navailable << " bytes TO " << nrequired << " bytes" << std::endl;
00131             std::cout << "Channel-" << c.pv << " ca-name=" << ca_name(new_eventHandlerArgs.chid)
00132                     << " type="  <<  new_eventHandlerArgs.type
00133                     << " type="  << dbr_type_to_text(new_eventHandlerArgs.type) << std::endl;
00134 
00135             //check DataBuffers
00136             switch(dbrTypeClass)
00137             {
00138             case CAFENUM::DBR_STSACK: //value is of type dbr_string_t
00139 
00140                 if (c.stsackBuffer!=NULL)  {
00141                     free(c.stsackBuffer);
00142                 }
00143                 else {
00144                     std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00145                     std::cout << "CAFE INTERNAL FUNNY: HOW CAN stsackBuffer NOT ALREADY EXIST?" << std::endl;
00146                     std::cout << "CREATING stsackBuffer " << std::endl;
00147                 }
00148 
00149                 c.stsackBuffer = (db_access_val *) malloc (nrequired);
00150 
00151 
00152                 if (c.stsackBuffer==NULL){
00153                     std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00154                     printf ("Virtual memory exhausted for channel %s ", ca_name(c.channelID));
00155                     printf ("Exiting CAFE");
00156                     exit(0);
00157                 }
00158 
00159                 c.channelRequestMetaSTSACK.byteSize=nrequired;
00160 
00161 
00162 
00163                 break;
00164 
00165             case CAFENUM::DBR_PRIMITIVE:
00166             case CAFENUM::DBR_STS:
00167             case CAFENUM::DBR_TIME:
00168 
00169                 // Check that buffer is large enough! Do not expect this part ever to be invoked
00170                 if (c.dataBuffer != NULL){
00171 
00172                     // Only re-allocate buffer if the number of native elements has increased without the
00173                     // the callback function first being called. i.e. nelemNative was changed on the fly!
00174                     // Don't believe this is possible - oder?
00175 
00176                     free(c.dataBuffer);
00177                 }
00178                 else {
00179                     std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00180                     std::cout << "CAFE INTERNAL FUNNY: HOW CAN dataBuffer NOT ALREADY EXIST?" << std::endl;
00181                     std::cout << "CREATING dataBuffer " << std::endl;
00182                 }
00183 
00184                 c.dataBuffer = (db_access_val *) malloc (nrequired);
00185 
00186                 if (c.dataBuffer==NULL){
00187                     std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00188                     printf ("Virtual memory exhausted for channel %s ", ca_name(c.channelID));
00189                     printf ("Exiting CAFE");
00190                     exit(0);
00191                 }
00192                 c.channelRequestMetaData.byteSize=nrequired;
00193 
00194 
00195                 break;
00196 
00197             case CAFENUM::DBR_CTRL:
00198 
00199                 // Check that buffer is large enough! Do not expect this part ever to be invoked
00200                 if (c.ctrlBuffer != NULL){
00201 
00202                     // Only re-allocate buffer if the number of native elements has increased without the
00203                     // the callback function first being called. i.e. nelemNative was changed on the fly!
00204                     // Don't believe this is possible - oder?
00205 
00206                     free(c.ctrlBuffer);
00207                 }
00208                 else {
00209                     std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00210                     std::cout << "CAFE INTERNAL FUNNY: HOW CAN dataBuffer NOT ALREADY EXIST?" << std::endl;
00211                     std::cout << "CREATING dataBuffer " << std::endl;
00212                 }
00213 
00214                 c.ctrlBuffer = (db_access_val *) malloc (nrequired);
00215 
00216                 if (c.ctrlBuffer==NULL){
00217                     std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00218                     printf ("Virtual memory exhausted for channel %s ", ca_name(c.channelID));
00219                     printf ("Exiting CAFE");
00220                     exit(0);
00221                 }
00222 
00223                 c.channelRequestMetaCtrl.byteSize=nrequired;
00224 
00225                 //if (new_eventHandlerArgs.count >  (long) c.channelRequestMetaCtrl.nelem) {
00226                 //    c.channelRequestMetaCtrl.nelem = new_eventHandlerArgs.count;
00227                 //}
00228 
00229                 break;
00230 
00231             case CAFENUM::DBR_CLASS:
00232             default:
00233                 break;
00234             } //switch
00235         } // if new buffer size required
00236 
00237 
00238         if (new_eventHandlerArgs.count >  0) {
00239             if ((unsigned int) new_eventHandlerArgs.count >   c.channelRegalia.nelem) {
00240                 c.channelRegalia.nelem = (unsigned int) new_eventHandlerArgs.count;
00241             }
00242         }
00243 
00244         switch(dbrTypeClass)
00245         {
00246         case CAFENUM::DBR_PRIMITIVE:
00247             //c.hasAlarmStatus  =false;
00248             //c.hasAlarmSeverity=false;
00249             //c.hasTimeStamp    =false;
00250             //c.hasValue        =true;
00251             c.alarmStatus     =-1;
00252             c.alarmSeverity   =-1;
00253             c.ts.secPastEpoch =0;
00254             c.ts.nsec         =0;
00255             break;
00256         case CAFENUM::DBR_STS:
00257             //c.hasAlarmStatus  =true;
00258             //c.hasAlarmSeverity=true;
00259             //c.hasTimeStamp    =false;
00260             //c.hasValue        =true;
00261             c.ts.secPastEpoch =0;
00262             c.ts.nsec         =0;
00263             break;
00264         case CAFENUM::DBR_TIME:
00265             //c.hasAlarmStatus  =true;
00266             //c.hasAlarmSeverity=true;
00267             //c.hasTimeStamp    =true;
00268             //c.hasValue        =true;
00269             break;
00270         case CAFENUM::DBR_CTRL:
00271            // c.hasAlarmStatus  =true;
00272            // c.hasAlarmSeverity=true;
00273            // c.hasTimeStamp    =false;
00274            // c.hasValue        =true;
00275             break;
00276         case CAFENUM::DBR_STSACK:
00277            // c.hasAlarmStatus  =true;
00278            // c.hasAlarmSeverity=true;
00279            // c.hasTimeStamp    =false;
00280            // c.hasValue        =true;
00281             break;
00282         case CAFENUM::DBR_CLASS:
00283            // c.hasAlarmStatus  =false;
00284            // c.hasAlarmSeverity=false;
00285            // c.hasTimeStamp    =false;
00286            // c.hasValue        =false;
00287             break;
00288         case CAFENUM::DBR_PUT:
00289             break;
00290         case CAFENUM::DBR_NONE:
00291         default:
00292            // c.hasAlarmStatus  =false;
00293            // c.hasAlarmSeverity=false;
00294            // c.hasTimeStamp    =false;
00295            // c.hasValue        =false;
00296             std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
00297             std::cout << "CAFE INTERNAL ERROR. Datatype not catered for: "
00298                   << dbf_type_to_text(new_eventHandlerArgs.type) << std::endl;
00299             std::cout << new_eventHandlerArgs.type << std::endl;
00300             break;
00301         }
00302 
00303         //Now fill buffers
00304 
00305         switch(new_eventHandlerArgs.type)
00306         {
00307         case DBR_DOUBLE: //6
00308 
00309             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00310                 (*(&((c.dataBuffer)->doubleval)+i))
00311                     = (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->doubleval)+i));
00312             }
00313 
00314             break;
00315 
00316         case DBR_FLOAT: // 2
00317 
00318             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00319                 (*(&((c.dataBuffer)->fltval)+i))
00320                     =  (dbr_float_t) (*(&( ( (union db_access_val *)  new_eventHandlerArgs.dbr)->fltval)+i));
00321             }
00322 
00323 
00324             break;
00325 
00326         case DBR_LONG: // 5
00327 
00328             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00329                 (*(&((c.dataBuffer)->longval)+i))
00330                     = (*(&(( (union db_access_val *) new_eventHandlerArgs.dbr)->longval)+i));
00331             }
00332             break;
00333 
00334         case DBR_SHORT: // 1
00335 
00336             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00337                 (*(&((c.dataBuffer)->shrtval)+i))
00338                     = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->shrtval)+i));
00339             }
00340             break;
00341 
00342         case DBR_STRING: // 0
00343 
00344             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00345                 strcpy ((*(&((c.dataBuffer)->strval)+i)) ,
00346                     (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->strval)+i)) );
00347             }
00348             break;
00349 
00350         case DBR_ENUM: // 3
00351 
00352             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00353                 (*(&((c.dataBuffer)->enmval)+i))
00354                     = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->enmval)+i));
00355             }
00356             break;
00357 
00358         case DBR_CHAR:  // 4
00359 
00360             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00361                 (*(&((c.dataBuffer)->charval)+i))
00362                     = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->charval)+i));
00363             }
00364             break;
00365 
00366 
00367         case DBR_STS_DOUBLE: // 13
00368 
00369             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00370                 (*(&((c.dataBuffer)->sdblval.value)+i))
00371                     = (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->sdblval.value)+i));
00372             }
00373             (*(&((c.dataBuffer)->sdblval.status)))    = ((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->status;
00374             (*(&((c.dataBuffer)->sdblval.severity))) = ((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->severity;
00375 
00376             c.alarmStatus  =((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->status;
00377             c.alarmSeverity=((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->severity;
00378 
00379             break;
00380 
00381         case DBR_STS_FLOAT: // 9
00382 
00383             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00384                 (*(&((c.dataBuffer)->sfltval.value)+i))
00385                         =  (dbr_float_t) (*(&( ( (union db_access_val *)  new_eventHandlerArgs.dbr)->sfltval.value)+i));
00386             }
00387 
00388             (*(&((c.dataBuffer)->sfltval.status))) = ((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->status;
00389             (*(&((c.dataBuffer)->sfltval.severity))) = ((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->severity;
00390 
00391             c.alarmStatus  =((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->status;
00392             c.alarmSeverity=((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->severity;
00393 
00394             break;
00395 
00396         case DBR_STS_LONG: // 12
00397 
00398             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00399                 (*(&((c.dataBuffer)->slngval.value)+i))
00400                         = (*(&(( (union db_access_val *) new_eventHandlerArgs.dbr)->slngval.value)+i));
00401             }
00402 
00403             (*(&((c.dataBuffer)->slngval.status))) = ((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->status;
00404             (*(&((c.dataBuffer)->slngval.severity))) = ((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->severity;
00405 
00406             c.alarmStatus  =((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->status;
00407             c.alarmSeverity=((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->severity;
00408 
00409             break;
00410 
00411         case DBR_STS_SHORT: // 8
00412 
00413             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00414                 (*(&((c.dataBuffer)->sshrtval.value)+i))
00415                         = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->sshrtval.value)+i));
00416             }
00417             (*(&((c.dataBuffer)->sshrtval.status))) = ((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->status;
00418             (*(&((c.dataBuffer)->sshrtval.severity))) = ((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
00419 
00420             c.alarmStatus  =((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->status;
00421             c.alarmSeverity=((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
00422             break;
00423 
00424         case DBR_STS_STRING: // 7
00425 
00426             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00427                 strcpy ((*(&((c.dataBuffer)->sstrval.value)+i)) ,
00428                         (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->sstrval.value)+i)) );
00429             }
00430             (*(&((c.dataBuffer)->sstrval.status))) = ((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
00431             (*(&((c.dataBuffer)->sstrval.severity))) = ((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
00432 
00433             c.alarmStatus  =((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
00434             c.alarmSeverity=((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
00435 
00436             break;
00437 
00438         case DBR_STS_ENUM: // 10
00439 
00440             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00441                 (*(&((c.dataBuffer)->senmval.value)+i))
00442                         = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->senmval.value)+i));
00443             }
00444             (*(&((c.dataBuffer)->senmval.status))) = ((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->status;
00445             (*(&((c.dataBuffer)->senmval.severity))) = ((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->severity;
00446 
00447             c.alarmStatus  =((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->status;
00448             c.alarmSeverity=((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->severity;
00449 
00450             break;
00451 
00452         case DBR_STS_CHAR: // 11
00453 
00454              for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00455                 (*(&((c.dataBuffer)->schrval.value)+i))
00456                         = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->schrval.value)+i));
00457              }
00458 
00459              (*(&((c.dataBuffer)->schrval.status))) = ((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->status;
00460              (*(&((c.dataBuffer)->schrval.severity))) = ((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->severity;
00461 
00462              c.alarmStatus  =((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->status;
00463              c.alarmSeverity=((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->severity;
00464 
00465              break;
00466 
00467         case DBR_TIME_DOUBLE: // 20
00468 
00469             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00470                 (*(&((c.dataBuffer)->tdblval.value)+i))
00471                         = (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->tdblval.value)+i));
00472             }
00473 
00474             (*(&((c.dataBuffer)->tdblval.status))) = ((struct dbr_time_double *) new_eventHandlerArgs.dbr)->status;
00475             (*(&((c.dataBuffer)->tdblval.severity))) = ((struct dbr_time_double *) new_eventHandlerArgs.dbr)->severity;
00476             (*(&((c.dataBuffer)->tdblval.stamp))) = ((struct dbr_time_double *) new_eventHandlerArgs.dbr)->stamp;
00477 
00478             c.alarmStatus  =((struct dbr_time_double *) new_eventHandlerArgs.dbr)->status;
00479             c.alarmSeverity=((struct dbr_time_double *) new_eventHandlerArgs.dbr)->severity;
00480             c.ts =((struct dbr_time_double *) new_eventHandlerArgs.dbr)->stamp;
00481 
00482             break;
00483 
00484         case DBR_TIME_FLOAT: //16
00485 
00486             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00487 
00488                 (*(&((c.dataBuffer)->tfltval.value)+i))
00489                         =  (dbr_float_t) (*(&( ( (union db_access_val *)  new_eventHandlerArgs.dbr)->tfltval.value)+i));
00490 
00491 
00492             }
00493 
00494             (*(&((c.dataBuffer)->tfltval.status))) = ((struct dbr_time_float *) new_eventHandlerArgs.dbr)->status;
00495             (*(&((c.dataBuffer)->tfltval.severity))) = ((struct dbr_time_float *) new_eventHandlerArgs.dbr)->severity;
00496             (*(&((c.dataBuffer)->tfltval.stamp))) = ((struct dbr_time_float *) new_eventHandlerArgs.dbr)->stamp;
00497 
00498             c.alarmStatus  =((struct dbr_time_float *) new_eventHandlerArgs.dbr)->status;
00499             c.alarmSeverity=((struct dbr_time_float *) new_eventHandlerArgs.dbr)->severity;
00500             c.ts           =((struct dbr_time_float *) new_eventHandlerArgs.dbr)->stamp;
00501 
00502             break;
00503 
00504         case DBR_TIME_LONG: //19
00505 
00506             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00507                 (*(&((c.dataBuffer)->tlngval.value)+i))
00508                         = (*(&(( (union db_access_val *) new_eventHandlerArgs.dbr)->tlngval.value)+i));
00509             }
00510 
00511             (*(&((c.dataBuffer)->tlngval.status)))   = ((struct dbr_time_long *) new_eventHandlerArgs.dbr)->status;
00512             (*(&((c.dataBuffer)->tlngval.severity))) = ((struct dbr_time_long *) new_eventHandlerArgs.dbr)->severity;
00513             (*(&((c.dataBuffer)->tlngval.stamp)))    = ((struct dbr_time_long *) new_eventHandlerArgs.dbr)->stamp;
00514 
00515             c.alarmStatus  =((struct dbr_time_long *) new_eventHandlerArgs.dbr)->status;
00516             c.alarmSeverity=((struct dbr_time_long *) new_eventHandlerArgs.dbr)->severity;
00517             c.ts           =((struct dbr_time_long *) new_eventHandlerArgs.dbr)->stamp;
00518             break;
00519 
00520         case DBR_TIME_SHORT:
00521             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00522                 (*(&((c.dataBuffer)->tshrtval.value)+i))
00523                         = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tshrtval.value)+i));
00524             }
00525 
00526             (*(&((c.dataBuffer)->tshrtval.status))) = ((struct dbr_time_short *) new_eventHandlerArgs.dbr)->status;
00527             (*(&((c.dataBuffer)->tshrtval.severity))) = ((struct dbr_time_short *) new_eventHandlerArgs.dbr)->severity;
00528             (*(&((c.dataBuffer)->tshrtval.stamp))) = ((struct dbr_time_short *) new_eventHandlerArgs.dbr)->stamp;
00529 
00530             c.alarmStatus  =((struct dbr_time_short *) new_eventHandlerArgs.dbr)->status;
00531             c.alarmSeverity=((struct dbr_time_short *) new_eventHandlerArgs.dbr)->severity;
00532             c.ts        =((struct dbr_time_short *) new_eventHandlerArgs.dbr)->stamp;
00533 
00534             break;
00535 
00536         case DBR_TIME_STRING: //14
00537 
00538             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00539                 strcpy ((*(&((c.dataBuffer)->tstrval.value)+i)) ,
00540                         (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tstrval.value)+i)) );
00541             }
00542 
00543 
00544            (*(&((c.dataBuffer)->tstrval.status))) = ((struct dbr_time_string *) new_eventHandlerArgs.dbr)->status;
00545            (*(&((c.dataBuffer)->tstrval.severity))) = ((struct dbr_time_string *) new_eventHandlerArgs.dbr)->severity;
00546            (*(&((c.dataBuffer)->tstrval.stamp))) = ((struct dbr_time_string *) new_eventHandlerArgs.dbr)->stamp;
00547 
00548            c.alarmStatus  =((struct dbr_time_string *) new_eventHandlerArgs.dbr)->status;
00549            c.alarmSeverity=((struct dbr_time_string *) new_eventHandlerArgs.dbr)->severity;
00550            c.ts           =((struct dbr_time_string *) new_eventHandlerArgs.dbr)->stamp;
00551 
00552            break;
00553 
00554         case DBR_TIME_ENUM: //17
00555 
00556             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00557                 (*(&((c.dataBuffer)->tenmval.value)+i))
00558                         = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tenmval.value)+i));
00559             }
00560 
00561 
00562             (*(&((c.dataBuffer)->tenmval.status))) = ((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->status;
00563             (*(&((c.dataBuffer)->tenmval.severity))) = ((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->severity;
00564             (*(&((c.dataBuffer)->tenmval.stamp))) = ((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->stamp;
00565 
00566             c.alarmStatus  =((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->status;
00567             c.alarmSeverity=((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->severity;
00568             c.ts           =((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->stamp;
00569 
00570             break;
00571 
00572         case DBR_TIME_CHAR: //18
00573 
00574             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00575                 (*(&((c.dataBuffer)->tchrval.value)+i))
00576                         = (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tchrval.value)+i));
00577 
00578             }
00579             (*(&((c.dataBuffer)->tchrval.status))) = ((struct dbr_time_char *) new_eventHandlerArgs.dbr)->status;
00580             (*(&((c.dataBuffer)->tchrval.severity))) = ((struct dbr_time_char *) new_eventHandlerArgs.dbr)->severity;
00581             (*(&((c.dataBuffer)->tchrval.stamp))) = ((struct dbr_time_char *) new_eventHandlerArgs.dbr)->stamp;
00582 
00583             c.alarmStatus  =((struct dbr_time_char *) new_eventHandlerArgs.dbr)->status;
00584             c.alarmSeverity=((struct dbr_time_char *) new_eventHandlerArgs.dbr)->severity;
00585             c.ts           =((struct dbr_time_char *) new_eventHandlerArgs.dbr)->stamp;
00586             break;
00587 
00588         case DBR_CTRL_DOUBLE: //34
00589 
00590             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00591                 (*(&((c.ctrlBuffer)->cdblval.value)+i)) =
00592                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->cdblval.value)+i));
00593             }
00594 
00595             (*(&((c.ctrlBuffer)->cdblval.status)))    =
00596                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->status;
00597             (*(&((c.ctrlBuffer)->cdblval.severity)))  =
00598                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->severity;
00599             (*(&((c.ctrlBuffer)->cdblval.precision))) =
00600                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->precision;
00601             (*(&((c.ctrlBuffer)->cdblval.RISC_pad0))) =
00602                     (dbr_short_t) ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->RISC_pad0; //dbr_short_t
00603             memcpy((*(&((c.ctrlBuffer)->cdblval.units))),
00604                    &(((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->units),
00605                    sizeof(char[MAX_UNITS_SIZE]));
00606             (*(&((c.ctrlBuffer)->cdblval.upper_disp_limit))) =
00607                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00608             (*(&((c.ctrlBuffer)->cdblval.lower_disp_limit))) =
00609                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00610             (*(&((c.ctrlBuffer)->cdblval.upper_alarm_limit))) =
00611                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00612             (*(&((c.ctrlBuffer)->cdblval.upper_warning_limit))) =
00613                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00614             (*(&((c.ctrlBuffer)->cdblval.lower_warning_limit))) =
00615                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00616             (*(&((c.ctrlBuffer)->cdblval.lower_alarm_limit))) =
00617                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00618             (*(&((c.ctrlBuffer)->cdblval.upper_ctrl_limit))) =
00619                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
00620             (*(&((c.ctrlBuffer)->cdblval.lower_ctrl_limit))) =
00621                     ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
00622 
00623             break;
00624 
00625         case DBR_CTRL_LONG: //33
00626 
00627             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00628                 (*(&((c.ctrlBuffer)->clngval.value)+i)) =
00629                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->clngval.value)+i));
00630             }
00631 
00632             (*(&((c.ctrlBuffer)->clngval.status)))   =
00633                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->status;
00634             (*(&((c.ctrlBuffer)->clngval.severity))) =
00635                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->severity;
00636 
00637             // struct dbr_ctrl_long does not have the precision member
00638             // struct dbr_ctrl_long does not have the RISC_pad member
00639             memcpy((*(&((c.ctrlBuffer)->clngval.units))),
00640                    &(((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->units),
00641                    sizeof(char[MAX_UNITS_SIZE]));
00642 
00643             (*(&((c.ctrlBuffer)->clngval.upper_disp_limit))) =
00644                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00645             (*(&((c.ctrlBuffer)->clngval.lower_disp_limit))) =
00646                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00647             (*(&((c.ctrlBuffer)->clngval.upper_alarm_limit))) =
00648                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00649             (*(&((c.ctrlBuffer)->clngval.upper_warning_limit))) =
00650                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00651             (*(&((c.ctrlBuffer)->clngval.lower_warning_limit))) =
00652                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00653             (*(&((c.ctrlBuffer)->clngval.lower_alarm_limit))) =
00654                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00655             (*(&((c.ctrlBuffer)->clngval.upper_ctrl_limit))) =
00656                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
00657             (*(&((c.ctrlBuffer)->clngval.lower_ctrl_limit))) =
00658                     ((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
00659 
00660             //c.alarmStatus  =((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->status;
00661             //c.alarmSeverity=((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->severity;
00662 
00663             break;
00664 
00665 
00666         case DBR_CTRL_CHAR: //32
00667 
00668             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00669                 (*(&((c.ctrlBuffer)->gchrval.value)+i)) =
00670                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->cchrval.value)+i));
00671             }
00672 
00673             (*(&((c.ctrlBuffer)->cchrval.status)))   =
00674                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->status;
00675             (*(&((c.ctrlBuffer)->cchrval.severity))) =
00676                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->severity;
00677 
00678             // struct dbr_ctrl_char does not have the precision member
00679             // struct dbr_ctrl_char does not have the RISC_pad member
00680             memcpy((*(&((c.ctrlBuffer)->cchrval.units))),
00681                    &(((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->units),
00682                    sizeof(char[MAX_UNITS_SIZE]));
00683 
00684             (*(&((c.ctrlBuffer)->cchrval.upper_disp_limit))) =
00685                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00686             (*(&((c.ctrlBuffer)->cchrval.lower_disp_limit))) =
00687                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00688             (*(&((c.ctrlBuffer)->cchrval.upper_alarm_limit))) =
00689                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00690             (*(&((c.ctrlBuffer)->cchrval.upper_warning_limit))) =
00691                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00692             (*(&((c.ctrlBuffer)->cchrval.lower_warning_limit))) =
00693                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00694             (*(&((c.ctrlBuffer)->cchrval.lower_alarm_limit))) =
00695                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00696             (*(&((c.ctrlBuffer)->cchrval.upper_ctrl_limit))) =
00697                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
00698             (*(&((c.ctrlBuffer)->cchrval.lower_ctrl_limit))) =
00699                     ((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
00700 
00701            // c.alarmStatus  =((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->status;
00702             //c.alarmSeverity=((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->severity;
00703 
00704             break;
00705 
00706 
00707         case DBR_CTRL_ENUM: //31
00708 
00709             for (long i=0; i<new_eventHandlerArgs.count; ++i){
00710                 (*(&((c.ctrlBuffer)->cenmval.value)+i)) =
00711                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->cenmval.value)+i));
00712             }
00713 
00714             (*(&((c.ctrlBuffer)->cenmval.status)))   =
00715                     ((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->status;
00716             (*(&((c.ctrlBuffer)->cenmval.severity))) =
00717                     ((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->severity;
00718 
00719             // struct dbr_ctrl_enum does not have the precision member
00720             // struct dbr_ctrl_enum does not have the RISC_pad member
00721             // struct dbr_ctrl_enum does not have the disp/alarm/warning/ctrl _limits
00722 
00723             (*(&((c.ctrlBuffer)->cenmval.no_str)))   =
00724                     ((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->no_str;
00725 
00726             memcpy( (*(&((c.ctrlBuffer)->cenmval.strs))),
00727                     &(((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->strs),
00728                     sizeof(char)*MAX_ENUM_STRING_SIZE*MAX_ENUM_STATES) ;
00729 
00730 
00731 
00732             memcpy(c.channelEnumStrings.options, &(((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->strs),
00733                         sizeof(c.channelEnumStrings.options));
00734             c.channelEnumStrings.noOptions=((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->no_str;
00735             //std::cout << "=====================" << c.channelEnumStrings.noOptions << std::endl;
00736             //for (int i=0; i<c.channelEnumStrings.noOptions; ++i) std::cout << c.channelEnumStrings.options[i] << std::endl;
00737 
00738             break;
00739 
00740 
00741         case DBR_CTRL_FLOAT: //30
00742 
00743             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00744                 (*(&((c.ctrlBuffer)->cfltval.value)+i)) =
00745                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->cfltval.value)+i));
00746             }
00747 
00748             (*(&((c.ctrlBuffer)->cfltval.status)))   =
00749                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->status;
00750             (*(&((c.ctrlBuffer)->cfltval.severity))) =
00751                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->severity;
00752 
00753 
00754             (*(&((c.ctrlBuffer)->cfltval.precision))) =
00755                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->precision;
00756             (*(&((c.ctrlBuffer)->cfltval.RISC_pad))) = (dbr_short_t)
00757                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->RISC_pad; //dbr_short_t
00758 
00759             memcpy((*(&((c.ctrlBuffer)->cfltval.units))),
00760                    &(((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->units),
00761                    sizeof(char[MAX_UNITS_SIZE]));
00762 
00763             (*(&((c.ctrlBuffer)->cfltval.upper_disp_limit))) =
00764                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00765             (*(&((c.ctrlBuffer)->cfltval.lower_disp_limit))) =
00766                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00767             (*(&((c.ctrlBuffer)->cfltval.upper_alarm_limit))) =
00768                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00769             (*(&((c.ctrlBuffer)->cfltval.upper_warning_limit))) =
00770                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00771             (*(&((c.ctrlBuffer)->cfltval.lower_warning_limit))) =
00772                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00773             (*(&((c.ctrlBuffer)->cfltval.lower_alarm_limit))) =
00774                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00775             (*(&((c.ctrlBuffer)->cfltval.upper_ctrl_limit))) =
00776                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
00777             (*(&((c.ctrlBuffer)->cfltval.lower_ctrl_limit))) =
00778                     ((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
00779 
00780 
00781             //c.alarmStatus  =((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->status;
00782             //c.alarmSeverity=((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->severity;
00783 
00784             break;
00785 
00786 
00787         case DBR_CTRL_SHORT: //29
00788 
00789             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00790                 (*(&((c.ctrlBuffer)->gshrtval.value)+i)) =
00791                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->cshrtval.value)+i));
00792             }
00793 
00794             (*(&((c.ctrlBuffer)->cshrtval.status)))   =
00795                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->status;
00796             (*(&((c.ctrlBuffer)->cshrtval.severity))) =
00797                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->severity;
00798 
00799             // struct dbr_ctrl_short does not have the precision member
00800             // struct dbr_ctrl_short does not have the RISC_pad member
00801             memcpy((*(&((c.ctrlBuffer)->cshrtval.units))),
00802                    &(((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->units),
00803                    sizeof(char[MAX_UNITS_SIZE]));
00804 
00805             (*(&((c.ctrlBuffer)->cshrtval.upper_disp_limit))) =
00806                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00807             (*(&((c.ctrlBuffer)->cshrtval.lower_disp_limit))) =
00808                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00809             (*(&((c.ctrlBuffer)->cshrtval.upper_alarm_limit))) =
00810                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00811             (*(&((c.ctrlBuffer)->cshrtval.upper_warning_limit))) =
00812                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00813             (*(&((c.ctrlBuffer)->cshrtval.lower_warning_limit))) =
00814                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00815             (*(&((c.ctrlBuffer)->cshrtval.lower_alarm_limit))) =
00816                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00817             (*(&((c.ctrlBuffer)->cshrtval.upper_ctrl_limit))) =
00818                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
00819             (*(&((c.ctrlBuffer)->cshrtval.lower_ctrl_limit))) =
00820                     ((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
00821 
00822 
00823             //c.alarmStatus  =((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->status;
00824             //c.alarmSeverity=((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->severity;
00825 
00826             break;
00827 
00828 
00829         case DBR_CTRL_STRING: //28
00830 
00831             for (long i=0; i<new_eventHandlerArgs.count; ++i){
00832                 strcpy( (*(&((c.ctrlBuffer)->cstrval.value)+i)),
00833                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->cstrval.value)+i)));
00834             }
00835 
00836             (*(&((c.ctrlBuffer)->cstrval.status)))   =
00837                     ((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
00838             (*(&((c.ctrlBuffer)->cstrval.severity))) =
00839                     ((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
00840 
00841             //c.alarmStatus  =((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
00842             //c.alarmSeverity=((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
00843 
00844             break;
00845 
00846         case DBR_GR_DOUBLE: //27
00847 
00848             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00849                 (*(&((c.ctrlBuffer)->gdblval.value)+i)) =
00850                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->gdblval.value)+i));
00851             }
00852 
00853             (*(&((c.ctrlBuffer)->gdblval.status)))    =
00854                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->status;
00855             (*(&((c.ctrlBuffer)->gdblval.severity)))  =
00856                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->severity;
00857 
00858             (*(&((c.ctrlBuffer)->gdblval.precision))) =
00859                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->precision;
00860 
00861             (*(&((c.ctrlBuffer)->gdblval.RISC_pad0))) =
00862                     (dbr_short_t) ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->RISC_pad0; //dbr_short_t
00863 
00864             memcpy((*(&((c.ctrlBuffer)->gdblval.units))),
00865                    &(((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->units),
00866                    sizeof(char[MAX_UNITS_SIZE]));
00867 
00868             (*(&((c.ctrlBuffer)->gdblval.upper_disp_limit))) =
00869                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00870             (*(&((c.ctrlBuffer)->gdblval.lower_disp_limit))) =
00871                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00872             (*(&((c.ctrlBuffer)->gdblval.upper_alarm_limit))) =
00873                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00874             (*(&((c.ctrlBuffer)->gdblval.upper_warning_limit))) =
00875                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00876             (*(&((c.ctrlBuffer)->gdblval.lower_warning_limit))) =
00877                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00878             (*(&((c.ctrlBuffer)->gdblval.lower_alarm_limit))) =
00879                     ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00880 
00881             //c.alarmStatus  =((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->status;
00882             //c.alarmSeverity=((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->severity;
00883 
00884             break;
00885 
00886         case DBR_GR_LONG: //26
00887 
00888             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00889                 (*(&((c.ctrlBuffer)->glngval.value)+i)) =
00890                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->glngval.value)+i));
00891             }
00892 
00893             (*(&((c.ctrlBuffer)->glngval.status)))   =
00894                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->status;
00895             (*(&((c.ctrlBuffer)->glngval.severity))) =
00896                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->severity;
00897 
00898             // struct dbr_gr_long does not have the precision member
00899             // struct dbr_gr_long does not have the RISC_pad member
00900             memcpy((*(&((c.ctrlBuffer)->glngval.units))),
00901                    &(((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->units),
00902                    sizeof(char[MAX_UNITS_SIZE]));
00903 
00904             (*(&((c.ctrlBuffer)->glngval.upper_disp_limit))) =
00905                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00906             (*(&((c.ctrlBuffer)->glngval.lower_disp_limit))) =
00907                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00908             (*(&((c.ctrlBuffer)->glngval.upper_alarm_limit))) =
00909                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00910             (*(&((c.ctrlBuffer)->glngval.upper_warning_limit))) =
00911                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00912             (*(&((c.ctrlBuffer)->glngval.lower_warning_limit))) =
00913                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00914             (*(&((c.ctrlBuffer)->glngval.lower_alarm_limit))) =
00915                     ((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00916 
00917             //c.alarmStatus  =((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->status;
00918             //c.alarmSeverity=((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->severity;
00919 
00920             break;
00921 
00922 
00923         case DBR_GR_CHAR: //25
00924 
00925             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00926                 (*(&((c.ctrlBuffer)->gchrval.value)+i)) =
00927                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->gchrval.value)+i));
00928             }
00929 
00930             (*(&((c.ctrlBuffer)->gchrval.status)))   =
00931                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->status;
00932             (*(&((c.ctrlBuffer)->gchrval.severity))) =
00933                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->severity;
00934 
00935             // struct dbr_gr_char does not have the precision member
00936             // struct dbr_gr_char does not have the RISC_pad member
00937             memcpy((*(&((c.ctrlBuffer)->gchrval.units))),
00938                    &(((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->units),
00939                    sizeof(char[MAX_UNITS_SIZE]));
00940 
00941             (*(&((c.ctrlBuffer)->gchrval.upper_disp_limit))) =
00942                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->upper_disp_limit;
00943             (*(&((c.ctrlBuffer)->gchrval.lower_disp_limit))) =
00944                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->lower_disp_limit;
00945             (*(&((c.ctrlBuffer)->gchrval.upper_alarm_limit))) =
00946                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
00947             (*(&((c.ctrlBuffer)->gchrval.upper_warning_limit))) =
00948                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->upper_warning_limit;
00949             (*(&((c.ctrlBuffer)->gchrval.lower_warning_limit))) =
00950                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->lower_warning_limit;
00951             (*(&((c.ctrlBuffer)->gchrval.lower_alarm_limit))) =
00952                     ((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
00953 
00954             //c.alarmStatus  =((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->status;
00955             //c.alarmSeverity=((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->severity;
00956 
00957             break;
00958 
00959 
00960         case DBR_GR_ENUM: //24
00961 
00962             for (long i=0; i<new_eventHandlerArgs.count; ++i){
00963                 (*(&((c.ctrlBuffer)->genmval.value)+i)) =
00964                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->genmval.value)+i));
00965             }
00966 
00967             (*(&((c.ctrlBuffer)->genmval.status)))   =
00968                     ((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->status;
00969             (*(&((c.ctrlBuffer)->genmval.severity))) =
00970                     ((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->severity;
00971 
00972             // struct dbr_gr_enum does not have the precision member
00973             // struct dbr_gr_enum does not have the RISC_pad member
00974             // struct dbr_gr_enum does not have the disp/alarm/warning/ctrl _limits
00975 
00976             (*(&((c.ctrlBuffer)->genmval.no_str)))   =
00977                     ((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->no_str;
00978 
00979             memcpy( (*(&((c.ctrlBuffer)->genmval.strs))),
00980                     &(((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->strs),
00981                     sizeof(char)*MAX_ENUM_STRING_SIZE*MAX_ENUM_STATES) ;
00982 
00983            // c.alarmStatus  =((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->status;
00984             //c.alarmSeverity=((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->severity;
00985 
00986             memcpy(c.channelEnumStrings.options, &(((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->strs),
00987                         sizeof(c.channelEnumStrings.options));
00988             c.channelEnumStrings.noOptions=((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->no_str;
00989             //std::cout << "=====================" << c.channelEnumStrings.noOptions << std::endl;
00990             //for (int i=0; i<c.channelEnumStrings.noOptions; ++i) std::cout << c.channelEnumStrings.options[i] << std::endl;
00991 
00992             break;
00993 
00994 
00995         case DBR_GR_FLOAT: //23
00996 
00997             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
00998                 (*(&((c.ctrlBuffer)->gfltval.value)+i)) =
00999                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->gfltval.value)+i));
01000             }
01001 
01002             (*(&((c.ctrlBuffer)->gfltval.status)))   =
01003                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->status;
01004             (*(&((c.ctrlBuffer)->gfltval.severity))) =
01005                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->severity;
01006 
01007 
01008             (*(&((c.ctrlBuffer)->gfltval.precision))) =
01009                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->precision;
01010             (*(&((c.ctrlBuffer)->gfltval.RISC_pad0))) =
01011                     (dbr_short_t) ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->RISC_pad0; //dbr_short_t
01012 
01013             memcpy((*(&((c.ctrlBuffer)->gfltval.units))),
01014                    &(((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->units),
01015                    sizeof(char[MAX_UNITS_SIZE]));
01016 
01017             (*(&((c.ctrlBuffer)->gfltval.upper_disp_limit))) =
01018                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->upper_disp_limit;
01019             (*(&((c.ctrlBuffer)->gfltval.lower_disp_limit))) =
01020                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->lower_disp_limit;
01021             (*(&((c.ctrlBuffer)->gfltval.upper_alarm_limit))) =
01022                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
01023             (*(&((c.ctrlBuffer)->gfltval.upper_warning_limit))) =
01024                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->upper_warning_limit;
01025             (*(&((c.ctrlBuffer)->gfltval.lower_warning_limit))) =
01026                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->lower_warning_limit;
01027             (*(&((c.ctrlBuffer)->gfltval.lower_alarm_limit))) =
01028                     ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
01029 
01030 
01031            // c.alarmStatus  =((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->status;
01032             //c.alarmSeverity=((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->severity;
01033 
01034             break;
01035 
01036 
01037         case DBR_GR_SHORT: //22
01038 
01039             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
01040                 (*(&((c.ctrlBuffer)->gshrtval.value)+i)) =
01041                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->gshrtval.value)+i));
01042             }
01043 
01044             (*(&((c.ctrlBuffer)->gshrtval.status)))   =
01045                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->status;
01046             (*(&((c.ctrlBuffer)->gshrtval.severity))) =
01047                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->severity;
01048 
01049             // struct dbr_gr_short does not have the precision member
01050             // struct dbr_gr_short does not have the RISC_pad member
01051             memcpy((*(&((c.ctrlBuffer)->gshrtval.units))),
01052                    &(((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->units),
01053                    sizeof(char[MAX_UNITS_SIZE]));
01054 
01055             (*(&((c.ctrlBuffer)->gshrtval.upper_disp_limit))) =
01056                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->upper_disp_limit;
01057             (*(&((c.ctrlBuffer)->gshrtval.lower_disp_limit))) =
01058                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->lower_disp_limit;
01059             (*(&((c.ctrlBuffer)->gshrtval.upper_alarm_limit))) =
01060                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
01061             (*(&((c.ctrlBuffer)->gshrtval.upper_warning_limit))) =
01062                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->upper_warning_limit;
01063             (*(&((c.ctrlBuffer)->gshrtval.lower_warning_limit))) =
01064                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->lower_warning_limit;
01065             (*(&((c.ctrlBuffer)->gshrtval.lower_alarm_limit))) =
01066                     ((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
01067 
01068             // c.alarmStatus  =((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->status;
01069             // c.alarmSeverity=((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->severity;
01070 
01071             break;
01072 
01073 
01074         case DBR_GR_STRING: //21
01075 
01076             for (long i=0; i<new_eventHandlerArgs.count; ++i){
01077                 strcpy( (*(&((c.ctrlBuffer)->gstrval.value)+i)),
01078                         (*(&( ((union db_access_val *)  new_eventHandlerArgs.dbr)->gstrval.value)+i)));
01079             }
01080 
01081             (*(&((c.ctrlBuffer)->gstrval.status)))   =
01082                     ((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
01083             (*(&((c.ctrlBuffer)->gstrval.severity))) =
01084                     ((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
01085 
01086             // c.alarmStatus  =((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
01087             // c.alarmSeverity=((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
01088 
01089             break;
01090 
01091         case DBR_STSACK_STRING: // 37
01092 
01093             // std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
01094 
01095 
01096             // std::cout << "no of events = " << new_eventHandlerArgs.count << std::endl;
01097             // std::cout << "Is databuffer large enough? " << std::endl;
01098             // Need to cast as (struct dbr_stsack_string *) rather than (union db_access_val *)
01099             //
01100 
01101             //CHECK BUFFER SIZE!!!
01102 
01103             // std::cout <<  "VALUE (struct) = " <<
01104             //        (*(&(((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->value)+0))
01105             //        << std::endl;
01106 
01107             for (long i=0; i<new_eventHandlerArgs.count; ++i) {
01108                   strcpy ((*(&((c.stsackBuffer)->sastrval.value)+i)) ,
01109                     (*(&(((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->value)+i)) );
01110                   //std::cout << " VAL  " << (*(&((c.stsackBuffer)->sastrval.value)+i)) << " [" << i << "] ";
01111             }
01112 
01113             //std::cout << std::endl;
01114 
01115             (*(&((c.stsackBuffer)->sastrval.status)))   = (dbr_ushort_t) ((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->status;
01116             (*(&((c.stsackBuffer)->sastrval.severity))) = (dbr_ushort_t) ((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->severity;
01117 
01118 
01119 
01120 
01121             //std::cout << "Value STSACK " <<  (*(&((c.stsackBuffer)->sastrval.value)+0)) << std::endl;
01122             //std::cout << "Value STSACK " <<  (*(&(((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->value)+0))<< std::endl;
01123             //std::cout << "ALARM STATUS  " <<  (*(&((c.stsackBuffer)->sastrval.status))) << std::endl;
01124             //std::cout << "ALARM SEVERITY " <<  (*(&((c.stsackBuffer)->sastrval.severity))) << std::endl;
01125 
01126             //std::cout << "VAL ACKT " <<  (dbr_ushort_t) ( (struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->ackt << std::endl;
01127 
01128             //std::cout << "VAL ACKS " <<  (dbr_ushort_t)  ( (struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->acks << std::endl;
01129 
01130 
01131 
01132            // c.alarmStatus  =((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->status;
01133            // c.alarmSeverity=((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->severity;
01134 
01135 
01136             break;
01137 
01138         case DBR_CLASS_NAME: // 37
01139 
01140             // Need to cast as (struct dbr_stsack_string *) rather than (union db_access_val *)
01141             //
01142 
01143             // strcpy ((c.dataBuffer)->classname ,
01144             // (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)) );
01145 
01146 
01147             // std::cout << "Value CLASSNAME " <<  strlen((*(&((c.dataBuffer)->classname)+0)) )<< std::endl;
01148             // std::cout << "Value CLASSNAME " <<  ((*(&((c.dataBuffer)->classname)+0)) )<< std::endl;
01149             // std::cout << "Value CLASSNAME " <<   strlen((*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)))<< "/"<<std::endl;
01150 
01151 
01153             strcpy( c.channelRegalia.className,
01154                     (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)));
01155 
01156             //std::cout << "ClassName=" << c.channelRegalia.className << std::endl;
01157 
01158             break;
01159 
01160 
01161         default:
01162             std::cout << "CAFE INTERNAL ERROR: This line should never appear! " << std::endl;
01163             std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
01164             std::cout << "Method does not support this DBR_TYPE: "
01165                  << dbr_type_to_text(new_eventHandlerArgs.type) << std::endl;
01166 
01167             //break;
01168 
01169         } //switch
01170 
01171 
01172                 //Do this to prevent overflow error in epicsTime time(ts) routines!
01173                 //This bad number can occur in timeouts
01174                 if(c.ts.nsec>1000000000) {c.ts.nsec=0;}
01175 
01176                 
01177     } // void
01178                 
01179                 
01180 
01181 private:
01182     event_handler_args new_eventHandlerArgs;
01183 #undef __METHOD__
01184 };
01185 
01186 
01188 
01189 
01190 #endif // CONDUITEVENTHANDLERARGS_H

Generated on 28 May 2018 for CAFE by  doxygen 1.6.1