1268 lines
56 KiB
C++
1268 lines
56 KiB
C++
///
|
|
/// \file conduitEventHandlerArgs.h
|
|
/// \author Jan Chrin, PSI
|
|
/// \date Release: February 2015
|
|
/// \version CAFE 1.0.0
|
|
///
|
|
|
|
#ifndef CONDUITEVENTHANDLERARGS_H
|
|
#define CONDUITEVENTHANDLERARGS_H
|
|
|
|
#include <cadef.h>
|
|
#include <conduit.h>
|
|
#include <helper.h>
|
|
|
|
|
|
/**
|
|
* Friend to Conduit/CAFEGroup permitting the event_handler_args.dbr data from callback fn
|
|
* to be recorded in hash table
|
|
*/
|
|
struct change_eventHandlerArgs
|
|
{
|
|
#define __METHOD__ "change_eventHandlerArgs"
|
|
change_eventHandlerArgs (const struct event_handler_args & new_eventHandlerArgs) :
|
|
new_eventHandlerArgs(new_eventHandlerArgs) {}
|
|
|
|
void operator() (Conduit& c)
|
|
{
|
|
|
|
//c.eventHandlerArgs = new_eventHandlerArgs;
|
|
c.status= new_eventHandlerArgs.status;
|
|
|
|
//Must always return else segmentataion fault
|
|
//But all initCallbacksComplete method will return false
|
|
//Change this to stop this happening
|
|
if(c.status!=ECA_NORMAL) {
|
|
std::cout << "conduitEventHandlerArgs.h/" << __LINE__ << " " << __METHOD__ << " STATUS IS " << c.status << std::endl;
|
|
std::cout << "conduitEventHandlerArgs.h/" << __LINE__ << " " << __METHOD__ << " return from method ***IS *** enforced " << std::endl;
|
|
return;
|
|
}
|
|
//std::cout << __METHOD__ << " STATUS IS " << c.status << std::endl;
|
|
|
|
Helper helper;
|
|
|
|
chtype requestedT= new_eventHandlerArgs.type%DBR_STS_STRING;
|
|
chtype bufferType= new_eventHandlerArgs.type; //default
|
|
//Fill with what actually came back!
|
|
//Let is do comparison!
|
|
CAFENUM::DBR_TYPE dbrTypeClass=helper.convertToCAFEDbrTypeClass(new_eventHandlerArgs.type);
|
|
|
|
c.usrArgs = new_eventHandlerArgs.usr;
|
|
c.dataType= requestedT;
|
|
c.dbrDataType= bufferType;
|
|
c.cafeDbrType= dbrTypeClass;
|
|
|
|
c.hasNewData=true; //flag used by getMonitorAction for CAFE extensions!
|
|
|
|
|
|
if (new_eventHandlerArgs.type < DBR_GR_STRING)
|
|
{
|
|
bufferType = dbf_type_to_DBR_TIME(requestedT);
|
|
}
|
|
else if (new_eventHandlerArgs.type < DBR_PUT_ACKT)
|
|
{
|
|
bufferType = dbf_type_to_DBR_CTRL(requestedT);
|
|
}
|
|
else if (new_eventHandlerArgs.type < (LAST_BUFFER_TYPE+1))
|
|
{
|
|
// keep default
|
|
}
|
|
else
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CAFE INTERNAL FUNNY: UNKNOWN event_handler_args.type= "
|
|
<< new_eventHandlerArgs.type << std::endl;
|
|
}
|
|
|
|
// A safety check that the buffer size is indeed large enough to hold the data
|
|
|
|
unsigned int nrequired = dbr_size_n(bufferType, new_eventHandlerArgs.count);
|
|
unsigned int navailable = nrequired;
|
|
|
|
|
|
switch(dbrTypeClass)
|
|
{
|
|
case CAFENUM::DBR_STSACK:
|
|
navailable = c.channelRequestMetaSTSACK.byteSize;
|
|
c.channelRequestMetaSTSACK.nelem = new_eventHandlerArgs.count;
|
|
c.channelRequestMetaSTSACK.dataType = requestedT;
|
|
c.channelRequestMetaSTSACK.dbrDataType = new_eventHandlerArgs.type;
|
|
c.channelRequestMetaSTSACK.cafeDbrType = dbrTypeClass;
|
|
c.channelRequestMetaSTSACK.usrArg = new_eventHandlerArgs.usr; //c.channelRequestMetaDataClient.usrArg;
|
|
break;
|
|
case CAFENUM::DBR_PRIMITIVE:
|
|
case CAFENUM::DBR_STS:
|
|
case CAFENUM::DBR_TIME:
|
|
navailable = c.channelRequestMetaData.byteSize;
|
|
|
|
c.channelRequestMetaData.nelem = new_eventHandlerArgs.count;
|
|
c.channelRequestMetaData.dataType = requestedT;
|
|
c.channelRequestMetaData.dbrDataType = new_eventHandlerArgs.type;
|
|
c.channelRequestMetaData.cafeDbrType = dbrTypeClass;
|
|
c.channelRequestMetaData.usrArg = new_eventHandlerArgs.usr; //c.channelRequestMetaDataClient.usrArg;
|
|
|
|
//Do this check here already
|
|
if (nrequired > navailable)
|
|
{
|
|
c.channelRequestMetaData.byteSize = nrequired;
|
|
|
|
}
|
|
break;
|
|
case CAFENUM::DBR_GR:
|
|
case CAFENUM::DBR_CTRL:
|
|
navailable = c.channelRequestMetaCtrl.byteSize;
|
|
c.channelRequestMetaCtrl.nelem = new_eventHandlerArgs.count;
|
|
c.channelRequestMetaCtrl.dataType = requestedT;
|
|
c.channelRequestMetaCtrl.dbrDataType = new_eventHandlerArgs.type;
|
|
c.channelRequestMetaCtrl.cafeDbrType = dbrTypeClass;
|
|
c.channelRequestMetaCtrl.usrArg = new_eventHandlerArgs.usr; //c.channelRequestMetaDataClient.usrArg;
|
|
if (nrequired > navailable)
|
|
{
|
|
c.channelRequestMetaCtrl.byteSize = nrequired;
|
|
}
|
|
break;
|
|
case CAFENUM::DBR_CLASS:
|
|
break;
|
|
case CAFENUM::DBR_NONE:
|
|
break;
|
|
default:
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CAFE INTERNAL FUNNY: UNKNOWN CAFENUM::DBR_TYPE= " << dbrTypeClass << std::endl;
|
|
break;
|
|
}
|
|
|
|
|
|
if (nrequired > navailable)
|
|
{
|
|
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CHANGE OF BUFFER SIZE: FROM " << navailable << " bytes TO " << nrequired << " bytes" << std::endl;
|
|
std::cout << "Channel-" << c.pv << " ca-name=" << ca_name(new_eventHandlerArgs.chid)
|
|
<< " type=" << new_eventHandlerArgs.type
|
|
<< " type=" << dbr_type_to_text(new_eventHandlerArgs.type) << std::endl;
|
|
|
|
//check DataBuffers
|
|
switch(dbrTypeClass)
|
|
{
|
|
case CAFENUM::DBR_STSACK: //value is of type dbr_string_t
|
|
|
|
if (c.stsackBuffer!=NULL)
|
|
{
|
|
free(c.stsackBuffer);
|
|
}
|
|
else
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CAFE INTERNAL FUNNY: HOW CAN stsackBuffer NOT ALREADY EXIST?" << std::endl;
|
|
std::cout << "CREATING stsackBuffer " << std::endl;
|
|
}
|
|
|
|
c.stsackBuffer = (db_access_val *) malloc (nrequired);
|
|
|
|
|
|
if (c.stsackBuffer==NULL)
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
printf ("Virtual memory exhausted for channel %s ", ca_name(c.channelID));
|
|
printf ("Exiting CAFE");
|
|
exit(0);
|
|
}
|
|
|
|
c.channelRequestMetaSTSACK.byteSize=nrequired;
|
|
|
|
|
|
|
|
break;
|
|
|
|
case CAFENUM::DBR_PRIMITIVE:
|
|
case CAFENUM::DBR_STS:
|
|
case CAFENUM::DBR_TIME:
|
|
|
|
// Check that buffer is large enough! Do not expect this part ever to be invoked
|
|
if (c.dataBuffer != NULL)
|
|
{
|
|
|
|
// Only re-allocate buffer if the number of native elements has increased without the
|
|
// the callback function first being called. i.e. nelemNative was changed on the fly!
|
|
// Don't believe this is possible - oder?
|
|
|
|
free(c.dataBuffer);
|
|
}
|
|
else
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CAFE INTERNAL FUNNY: HOW CAN dataBuffer NOT ALREADY EXIST?" << std::endl;
|
|
std::cout << "CREATING dataBuffer " << std::endl;
|
|
}
|
|
|
|
c.dataBuffer = (db_access_val *) malloc (nrequired);
|
|
|
|
if (c.dataBuffer==NULL)
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
printf ("Virtual memory exhausted for channel %s ", ca_name(c.channelID));
|
|
printf ("Exiting CAFE");
|
|
exit(0);
|
|
}
|
|
c.channelRequestMetaData.byteSize=nrequired;
|
|
|
|
|
|
break;
|
|
|
|
case CAFENUM::DBR_CTRL:
|
|
|
|
// Check that buffer is large enough! Do not expect this part ever to be invoked
|
|
if (c.ctrlBuffer != NULL)
|
|
{
|
|
|
|
// Only re-allocate buffer if the number of native elements has increased without the
|
|
// the callback function first being called. i.e. nelemNative was changed on the fly!
|
|
// Don't believe this is possible - oder?
|
|
|
|
free(c.ctrlBuffer);
|
|
}
|
|
else
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CAFE INTERNAL FUNNY: HOW CAN dataBuffer NOT ALREADY EXIST?" << std::endl;
|
|
std::cout << "CREATING dataBuffer " << std::endl;
|
|
}
|
|
|
|
c.ctrlBuffer = (db_access_val *) malloc (nrequired);
|
|
|
|
if (c.ctrlBuffer==NULL)
|
|
{
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
printf ("Virtual memory exhausted for channel %s ", ca_name(c.channelID));
|
|
printf ("Exiting CAFE");
|
|
exit(0);
|
|
}
|
|
|
|
c.channelRequestMetaCtrl.byteSize=nrequired;
|
|
|
|
//if (new_eventHandlerArgs.count > (long) c.channelRequestMetaCtrl.nelem) {
|
|
// c.channelRequestMetaCtrl.nelem = new_eventHandlerArgs.count;
|
|
//}
|
|
|
|
break;
|
|
|
|
case CAFENUM::DBR_CLASS:
|
|
default:
|
|
break;
|
|
} //switch
|
|
} // if new buffer size required
|
|
|
|
|
|
if (new_eventHandlerArgs.count > 0)
|
|
{
|
|
if ((unsigned int) new_eventHandlerArgs.count > c.channelRegalia.nelem)
|
|
{
|
|
c.channelRegalia.nelem = (unsigned int) new_eventHandlerArgs.count;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
switch(dbrTypeClass)
|
|
{
|
|
case CAFENUM::DBR_PRIMITIVE:
|
|
//c.hasAlarmStatus =false;
|
|
//c.hasAlarmSeverity=false;
|
|
//c.hasTimeStamp =false;
|
|
//c.hasValue =true;
|
|
c.alarmStatus =-1;
|
|
c.alarmSeverity =-1;
|
|
c.ts.secPastEpoch =0;
|
|
c.ts.nsec =0;
|
|
break;
|
|
case CAFENUM::DBR_STS:
|
|
//c.hasAlarmStatus =true;
|
|
//c.hasAlarmSeverity=true;
|
|
//c.hasTimeStamp =false;
|
|
//c.hasValue =true;
|
|
c.ts.secPastEpoch =0;
|
|
c.ts.nsec =0;
|
|
break;
|
|
case CAFENUM::DBR_TIME:
|
|
//c.hasAlarmStatus =true;
|
|
//c.hasAlarmSeverity=true;
|
|
//c.hasTimeStamp =true;
|
|
//c.hasValue =true;
|
|
break;
|
|
case CAFENUM::DBR_CTRL:
|
|
// c.hasAlarmStatus =true;
|
|
// c.hasAlarmSeverity=true;
|
|
// c.hasTimeStamp =false;
|
|
// c.hasValue =true;
|
|
break;
|
|
case CAFENUM::DBR_STSACK:
|
|
// c.hasAlarmStatus =true;
|
|
// c.hasAlarmSeverity=true;
|
|
// c.hasTimeStamp =false;
|
|
// c.hasValue =true;
|
|
break;
|
|
case CAFENUM::DBR_CLASS:
|
|
// c.hasAlarmStatus =false;
|
|
// c.hasAlarmSeverity=false;
|
|
// c.hasTimeStamp =false;
|
|
// c.hasValue =false;
|
|
break;
|
|
case CAFENUM::DBR_PUT:
|
|
break;
|
|
case CAFENUM::DBR_NONE:
|
|
default:
|
|
// c.hasAlarmStatus =false;
|
|
// c.hasAlarmSeverity=false;
|
|
// c.hasTimeStamp =false;
|
|
// c.hasValue =false;
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "CAFE INTERNAL ERROR. Datatype not catered for: "
|
|
<< dbf_type_to_text(new_eventHandlerArgs.type) << std::endl;
|
|
std::cout << new_eventHandlerArgs.type << std::endl;
|
|
break;
|
|
}
|
|
|
|
//Now fill buffers
|
|
|
|
switch(new_eventHandlerArgs.type)
|
|
{
|
|
case DBR_DOUBLE: //6
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->doubleval)+i))
|
|
= (*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->doubleval)+i));
|
|
}
|
|
|
|
break;
|
|
|
|
case DBR_FLOAT: // 2
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
|
|
(*(&((c.dataBuffer)->fltval)+i))
|
|
= (dbr_float_t) (*(&( ( (union db_access_val *) new_eventHandlerArgs.dbr)->fltval)+i));
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
case DBR_LONG: // 5
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->longval)+i))
|
|
= (*(&(( (union db_access_val *) new_eventHandlerArgs.dbr)->longval)+i));
|
|
}
|
|
break;
|
|
|
|
case DBR_SHORT: // 1
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->shrtval)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->shrtval)+i));
|
|
}
|
|
break;
|
|
|
|
case DBR_STRING: // 0
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
strcpy ((*(&((c.dataBuffer)->strval)+i)),
|
|
(*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->strval)+i)) );
|
|
}
|
|
break;
|
|
|
|
case DBR_ENUM: // 3
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->enmval)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->enmval)+i));
|
|
}
|
|
break;
|
|
|
|
case DBR_CHAR: // 4
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->charval)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->charval)+i));
|
|
}
|
|
break;
|
|
|
|
|
|
case DBR_STS_DOUBLE: // 13
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->sdblval.value)+i))
|
|
= (*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->sdblval.value)+i));
|
|
}
|
|
(*(&((c.dataBuffer)->sdblval.status))) = ((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->sdblval.severity))) = ((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_double *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_STS_FLOAT: // 9
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->sfltval.value)+i))
|
|
= (dbr_float_t) (*(&( ( (union db_access_val *) new_eventHandlerArgs.dbr)->sfltval.value)+i));
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->sfltval.status))) = ((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->sfltval.severity))) = ((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_float *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_STS_LONG: // 12
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->slngval.value)+i))
|
|
= (*(&(( (union db_access_val *) new_eventHandlerArgs.dbr)->slngval.value)+i));
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->slngval.status))) = ((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->slngval.severity))) = ((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_long *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_STS_SHORT: // 8
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->sshrtval.value)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->sshrtval.value)+i));
|
|
}
|
|
(*(&((c.dataBuffer)->sshrtval.status))) = ((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->sshrtval.severity))) = ((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
|
|
break;
|
|
|
|
case DBR_STS_STRING: // 7
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
strcpy ((*(&((c.dataBuffer)->sstrval.value)+i)),
|
|
(*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->sstrval.value)+i)) );
|
|
}
|
|
(*(&((c.dataBuffer)->sstrval.status))) = ((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->sstrval.severity))) = ((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_STS_ENUM: // 10
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->senmval.value)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->senmval.value)+i));
|
|
}
|
|
(*(&((c.dataBuffer)->senmval.status))) = ((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->senmval.severity))) = ((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_STS_CHAR: // 11
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->schrval.value)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->schrval.value)+i));
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->schrval.status))) = ((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->schrval.severity))) = ((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
c.alarmStatus =((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_sts_char *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_TIME_DOUBLE: // 20
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
|
|
(*(&((c.dataBuffer)->tdblval.value)+i))
|
|
= (*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->tdblval.value)+i));
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->tdblval.status))) = ((struct dbr_time_double *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tdblval.severity))) = ((struct dbr_time_double *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tdblval.stamp))) = ((struct dbr_time_double *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_double *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_double *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_double *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
|
|
break;
|
|
|
|
case DBR_TIME_FLOAT: //16
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
|
|
|
|
(*(&((c.dataBuffer)->tfltval.value)+i))
|
|
= (dbr_float_t) (*(&( ( (union db_access_val *) new_eventHandlerArgs.dbr)->tfltval.value)+i));
|
|
|
|
//if (i< 10) {
|
|
// std::cout << i << " // " << __METHOD__ << " " << (*(&((c.dataBuffer)->tfltval.value)+i)) << std::endl;
|
|
//}
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->tfltval.status))) = ((struct dbr_time_float *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tfltval.severity))) = ((struct dbr_time_float *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tfltval.stamp))) = ((struct dbr_time_float *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_float *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_float *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_float *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
break;
|
|
|
|
case DBR_TIME_LONG: //19
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->tlngval.value)+i))
|
|
= (*(&(( (union db_access_val *) new_eventHandlerArgs.dbr)->tlngval.value)+i));
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->tlngval.status))) = ((struct dbr_time_long *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tlngval.severity))) = ((struct dbr_time_long *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tlngval.stamp))) = ((struct dbr_time_long *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_long *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_long *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_long *) new_eventHandlerArgs.dbr)->stamp;
|
|
break;
|
|
|
|
case DBR_TIME_SHORT:
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->tshrtval.value)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tshrtval.value)+i));
|
|
}
|
|
|
|
(*(&((c.dataBuffer)->tshrtval.status))) = ((struct dbr_time_short *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tshrtval.severity))) = ((struct dbr_time_short *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tshrtval.stamp))) = ((struct dbr_time_short *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_short *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_short *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_short *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
break;
|
|
|
|
case DBR_TIME_STRING: //14
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
strcpy ((*(&((c.dataBuffer)->tstrval.value)+i)),
|
|
(*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tstrval.value)+i)) );
|
|
}
|
|
|
|
|
|
(*(&((c.dataBuffer)->tstrval.status))) = ((struct dbr_time_string *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tstrval.severity))) = ((struct dbr_time_string *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tstrval.stamp))) = ((struct dbr_time_string *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_string *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_string *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_string *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
break;
|
|
|
|
case DBR_TIME_ENUM: //17
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->tenmval.value)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tenmval.value)+i));
|
|
}
|
|
|
|
|
|
(*(&((c.dataBuffer)->tenmval.status))) = ((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tenmval.severity))) = ((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tenmval.stamp))) = ((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_enum *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
break;
|
|
|
|
case DBR_TIME_CHAR: //18
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.dataBuffer)->tchrval.value)+i))
|
|
= (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->tchrval.value)+i));
|
|
|
|
}
|
|
(*(&((c.dataBuffer)->tchrval.status))) = ((struct dbr_time_char *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.dataBuffer)->tchrval.severity))) = ((struct dbr_time_char *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.dataBuffer)->tchrval.stamp))) = ((struct dbr_time_char *) new_eventHandlerArgs.dbr)->stamp;
|
|
|
|
c.alarmStatus =((struct dbr_time_char *) new_eventHandlerArgs.dbr)->status;
|
|
c.alarmSeverity=((struct dbr_time_char *) new_eventHandlerArgs.dbr)->severity;
|
|
c.ts =((struct dbr_time_char *) new_eventHandlerArgs.dbr)->stamp;
|
|
break;
|
|
|
|
case DBR_CTRL_DOUBLE: //34
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->cdblval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->cdblval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->cdblval.status))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->cdblval.severity))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->severity;
|
|
(*(&((c.ctrlBuffer)->cdblval.precision))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->precision;
|
|
(*(&((c.ctrlBuffer)->cdblval.RISC_pad0))) =
|
|
(dbr_short_t) ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->RISC_pad0; //dbr_short_t
|
|
//std::cout << __METHOD__ << __LINE__ << std::endl;
|
|
|
|
//std::cout << ((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->units << std::endl;
|
|
|
|
memcpy((*(&((c.ctrlBuffer)->cdblval.units))),
|
|
&(((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof( char[MAX_UNITS_SIZE])); // (((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->units) ));
|
|
|
|
|
|
|
|
(*(&((c.ctrlBuffer)->cdblval.upper_disp_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.lower_disp_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.upper_alarm_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.upper_warning_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.lower_warning_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.lower_alarm_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.upper_ctrl_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
|
|
(*(&((c.ctrlBuffer)->cdblval.lower_ctrl_limit))) =
|
|
((struct dbr_ctrl_double *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
|
|
|
|
break;
|
|
|
|
case DBR_CTRL_LONG: //33
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->clngval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->clngval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->clngval.status))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->clngval.severity))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_ctrl_long does not have the precision member
|
|
// struct dbr_ctrl_long does not have the RISC_pad member
|
|
memcpy((*(&((c.ctrlBuffer)->clngval.units))),
|
|
&(((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->clngval.upper_disp_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.lower_disp_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.upper_alarm_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.upper_warning_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.lower_warning_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.lower_alarm_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.upper_ctrl_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
|
|
(*(&((c.ctrlBuffer)->clngval.lower_ctrl_limit))) =
|
|
((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
|
|
|
|
//c.alarmStatus =((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_ctrl_long *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_CTRL_CHAR: //32
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->gchrval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->cchrval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->cchrval.status))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->cchrval.severity))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_ctrl_char does not have the precision member
|
|
// struct dbr_ctrl_char does not have the RISC_pad member
|
|
memcpy((*(&((c.ctrlBuffer)->cchrval.units))),
|
|
&(((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->cchrval.upper_disp_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.lower_disp_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.upper_alarm_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.upper_warning_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.lower_warning_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.lower_alarm_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.upper_ctrl_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
|
|
(*(&((c.ctrlBuffer)->cchrval.lower_ctrl_limit))) =
|
|
((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
|
|
|
|
// c.alarmStatus =((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_ctrl_char *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_CTRL_ENUM: //31
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->cenmval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->cenmval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->cenmval.status))) =
|
|
((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->cenmval.severity))) =
|
|
((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_ctrl_enum does not have the precision member
|
|
// struct dbr_ctrl_enum does not have the RISC_pad member
|
|
// struct dbr_ctrl_enum does not have the disp/alarm/warning/ctrl _limits
|
|
|
|
(*(&((c.ctrlBuffer)->cenmval.no_str))) =
|
|
((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->no_str;
|
|
|
|
memcpy( (*(&((c.ctrlBuffer)->cenmval.strs))),
|
|
&(((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->strs),
|
|
sizeof(char)*MAX_ENUM_STRING_SIZE*MAX_ENUM_STATES) ;
|
|
|
|
|
|
|
|
memcpy(c.channelEnumStrings.options, &(((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->strs),
|
|
sizeof(c.channelEnumStrings.options));
|
|
c.channelEnumStrings.noOptions=((struct dbr_ctrl_enum *) new_eventHandlerArgs.dbr)->no_str;
|
|
//std::cout << "=====================" << c.channelEnumStrings.noOptions << std::endl;
|
|
//for (int i=0; i<c.channelEnumStrings.noOptions; ++i) std::cout << c.channelEnumStrings.options[i] << std::endl;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_CTRL_FLOAT: //30
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->cfltval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->cfltval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->cfltval.status))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->cfltval.severity))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
|
|
(*(&((c.ctrlBuffer)->cfltval.precision))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->precision;
|
|
(*(&((c.ctrlBuffer)->cfltval.RISC_pad))) = (dbr_short_t)
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->RISC_pad; //dbr_short_t
|
|
|
|
memcpy((*(&((c.ctrlBuffer)->cfltval.units))),
|
|
&(((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->cfltval.upper_disp_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.lower_disp_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.upper_alarm_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.upper_warning_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.lower_warning_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.lower_alarm_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.upper_ctrl_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
|
|
(*(&((c.ctrlBuffer)->cfltval.lower_ctrl_limit))) =
|
|
((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
|
|
|
|
|
|
//c.alarmStatus =((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_ctrl_float *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_CTRL_SHORT: //29
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->gshrtval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->cshrtval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->cshrtval.status))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->cshrtval.severity))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_ctrl_short does not have the precision member
|
|
// struct dbr_ctrl_short does not have the RISC_pad member
|
|
memcpy((*(&((c.ctrlBuffer)->cshrtval.units))),
|
|
&(((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->cshrtval.upper_disp_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.lower_disp_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.upper_alarm_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.upper_warning_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.lower_warning_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.lower_alarm_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.upper_ctrl_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->upper_ctrl_limit;
|
|
(*(&((c.ctrlBuffer)->cshrtval.lower_ctrl_limit))) =
|
|
((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->lower_ctrl_limit;
|
|
|
|
|
|
//c.alarmStatus =((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_ctrl_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_CTRL_STRING: //28
|
|
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
strcpy( (*(&((c.ctrlBuffer)->cstrval.value)+i)),
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->cstrval.value)+i)));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->cstrval.status))) =
|
|
((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->cstrval.severity))) =
|
|
((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
//c.alarmStatus =((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
|
|
break;
|
|
|
|
case DBR_GR_DOUBLE: //27
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->gdblval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->gdblval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->gdblval.status))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->gdblval.severity))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
(*(&((c.ctrlBuffer)->gdblval.precision))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->precision;
|
|
|
|
(*(&((c.ctrlBuffer)->gdblval.RISC_pad0))) =
|
|
(dbr_short_t) ((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->RISC_pad0; //dbr_short_t
|
|
|
|
memcpy((*(&((c.ctrlBuffer)->gdblval.units))),
|
|
&(((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->gdblval.upper_disp_limit))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gdblval.lower_disp_limit))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gdblval.upper_alarm_limit))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->gdblval.upper_warning_limit))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gdblval.lower_warning_limit))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gdblval.lower_alarm_limit))) =
|
|
((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
|
|
//c.alarmStatus =((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_gr_double *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_GR_LONG: //26
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->glngval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->glngval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->glngval.status))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->glngval.severity))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_gr_long does not have the precision member
|
|
// struct dbr_gr_long does not have the RISC_pad member
|
|
memcpy((*(&((c.ctrlBuffer)->glngval.units))),
|
|
&(((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->glngval.upper_disp_limit))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->glngval.lower_disp_limit))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->glngval.upper_alarm_limit))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->glngval.upper_warning_limit))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->glngval.lower_warning_limit))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->glngval.lower_alarm_limit))) =
|
|
((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
|
|
//c.alarmStatus =((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_gr_long *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_GR_CHAR: //25
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->gchrval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->gchrval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->gchrval.status))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->gchrval.severity))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_gr_char does not have the precision member
|
|
// struct dbr_gr_char does not have the RISC_pad member
|
|
memcpy((*(&((c.ctrlBuffer)->gchrval.units))),
|
|
&(((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->gchrval.upper_disp_limit))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gchrval.lower_disp_limit))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gchrval.upper_alarm_limit))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->gchrval.upper_warning_limit))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gchrval.lower_warning_limit))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gchrval.lower_alarm_limit))) =
|
|
((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
|
|
//c.alarmStatus =((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_gr_char *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_GR_ENUM: //24
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->genmval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->genmval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->genmval.status))) =
|
|
((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->genmval.severity))) =
|
|
((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_gr_enum does not have the precision member
|
|
// struct dbr_gr_enum does not have the RISC_pad member
|
|
// struct dbr_gr_enum does not have the disp/alarm/warning/ctrl _limits
|
|
|
|
(*(&((c.ctrlBuffer)->genmval.no_str))) =
|
|
((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->no_str;
|
|
|
|
memcpy( (*(&((c.ctrlBuffer)->genmval.strs))),
|
|
&(((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->strs),
|
|
sizeof(char)*MAX_ENUM_STRING_SIZE*MAX_ENUM_STATES) ;
|
|
|
|
// c.alarmStatus =((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
memcpy(c.channelEnumStrings.options, &(((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->strs),
|
|
sizeof(c.channelEnumStrings.options));
|
|
c.channelEnumStrings.noOptions=((struct dbr_gr_enum *) new_eventHandlerArgs.dbr)->no_str;
|
|
//std::cout << "=====================" << c.channelEnumStrings.noOptions << std::endl;
|
|
//for (int i=0; i<c.channelEnumStrings.noOptions; ++i) std::cout << c.channelEnumStrings.options[i] << std::endl;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_GR_FLOAT: //23
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->gfltval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->gfltval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->gfltval.status))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->gfltval.severity))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
|
|
(*(&((c.ctrlBuffer)->gfltval.precision))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->precision;
|
|
(*(&((c.ctrlBuffer)->gfltval.RISC_pad0))) =
|
|
(dbr_short_t) ((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->RISC_pad0; //dbr_short_t
|
|
|
|
memcpy((*(&((c.ctrlBuffer)->gfltval.units))),
|
|
&(((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->gfltval.upper_disp_limit))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gfltval.lower_disp_limit))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gfltval.upper_alarm_limit))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->gfltval.upper_warning_limit))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gfltval.lower_warning_limit))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gfltval.lower_alarm_limit))) =
|
|
((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
|
|
|
|
// c.alarmStatus =((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->status;
|
|
//c.alarmSeverity=((struct dbr_gr_float *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_GR_SHORT: //22
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
(*(&((c.ctrlBuffer)->gshrtval.value)+i)) =
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->gshrtval.value)+i));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->gshrtval.status))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->gshrtval.severity))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// struct dbr_gr_short does not have the precision member
|
|
// struct dbr_gr_short does not have the RISC_pad member
|
|
memcpy((*(&((c.ctrlBuffer)->gshrtval.units))),
|
|
&(((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->units),
|
|
sizeof(char[MAX_UNITS_SIZE]));
|
|
|
|
(*(&((c.ctrlBuffer)->gshrtval.upper_disp_limit))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->upper_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gshrtval.lower_disp_limit))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->lower_disp_limit;
|
|
(*(&((c.ctrlBuffer)->gshrtval.upper_alarm_limit))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->upper_alarm_limit;
|
|
(*(&((c.ctrlBuffer)->gshrtval.upper_warning_limit))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->upper_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gshrtval.lower_warning_limit))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->lower_warning_limit;
|
|
(*(&((c.ctrlBuffer)->gshrtval.lower_alarm_limit))) =
|
|
((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->lower_alarm_limit;
|
|
|
|
// c.alarmStatus =((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->status;
|
|
// c.alarmSeverity=((struct dbr_gr_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
|
|
case DBR_GR_STRING: //21
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
strcpy( (*(&((c.ctrlBuffer)->gstrval.value)+i)),
|
|
(*(&( ((union db_access_val *) new_eventHandlerArgs.dbr)->gstrval.value)+i)));
|
|
}
|
|
|
|
(*(&((c.ctrlBuffer)->gstrval.status))) =
|
|
((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.ctrlBuffer)->gstrval.severity))) =
|
|
((struct dbr_sts_short *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
// c.alarmStatus =((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->status;
|
|
// c.alarmSeverity=((struct dbr_sts_string *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
break;
|
|
|
|
case DBR_STSACK_STRING: // 37
|
|
|
|
// std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
|
|
|
|
// std::cout << "no of events = " << new_eventHandlerArgs.count << std::endl;
|
|
// std::cout << "Is databuffer large enough? " << std::endl;
|
|
// Need to cast as (struct dbr_stsack_string *) rather than (union db_access_val *)
|
|
//
|
|
|
|
//CHECK BUFFER SIZE!!!
|
|
|
|
// std::cout << "VALUE (struct) = " <<
|
|
// (*(&(((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->value)+0))
|
|
// << std::endl;
|
|
|
|
for (long i=0; i<new_eventHandlerArgs.count; ++i)
|
|
{
|
|
strcpy ((*(&((c.stsackBuffer)->sastrval.value)+i)),
|
|
(*(&(((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->value)+i)) );
|
|
//std::cout << " VAL " << (*(&((c.stsackBuffer)->sastrval.value)+i)) << " [" << i << "] ";
|
|
}
|
|
|
|
//std::cout << std::endl;
|
|
|
|
(*(&((c.stsackBuffer)->sastrval.status))) = (dbr_ushort_t) ((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->status;
|
|
(*(&((c.stsackBuffer)->sastrval.severity))) = (dbr_ushort_t) ((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
|
|
|
|
|
|
//std::cout << "Value STSACK " << (*(&((c.stsackBuffer)->sastrval.value)+0)) << std::endl;
|
|
//std::cout << "Value STSACK " << (*(&(((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->value)+0))<< std::endl;
|
|
//std::cout << "ALARM STATUS " << (*(&((c.stsackBuffer)->sastrval.status))) << std::endl;
|
|
//std::cout << "ALARM SEVERITY " << (*(&((c.stsackBuffer)->sastrval.severity))) << std::endl;
|
|
|
|
//std::cout << "VAL ACKT " << (dbr_ushort_t) ( (struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->ackt << std::endl;
|
|
|
|
//std::cout << "VAL ACKS " << (dbr_ushort_t) ( (struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->acks << std::endl;
|
|
|
|
|
|
|
|
// c.alarmStatus =((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->status;
|
|
// c.alarmSeverity=((struct dbr_stsack_string *) new_eventHandlerArgs.dbr)->severity;
|
|
|
|
|
|
break;
|
|
|
|
case DBR_CLASS_NAME: // 37
|
|
|
|
// Need to cast as (struct dbr_stsack_string *) rather than (union db_access_val *)
|
|
//
|
|
|
|
// strcpy ((c.dataBuffer)->classname ,
|
|
// (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)) );
|
|
|
|
|
|
// std::cout << "Value CLASSNAME " << strlen((*(&((c.dataBuffer)->classname)+0)) )<< std::endl;
|
|
// std::cout << "Value CLASSNAME " << ((*(&((c.dataBuffer)->classname)+0)) )<< std::endl;
|
|
// std::cout << "Value CLASSNAME " << strlen((*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)))<< "/"<<std::endl;
|
|
|
|
|
|
///strcpy( c.className, (*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)));
|
|
strcpy( c.channelRegalia.className,
|
|
(*(&(((union db_access_val *) new_eventHandlerArgs.dbr)->classname)+0)));
|
|
|
|
//std::cout << "ClassName=" << c.channelRegalia.className << std::endl;
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
std::cout << "CAFE INTERNAL ERROR: This line should never appear! " << std::endl;
|
|
std::cout << __FILE__ << "/" << __LINE__ << "/" << __METHOD__ << std::endl;
|
|
std::cout << "Method does not support this DBR_TYPE: "
|
|
<< dbr_type_to_text(new_eventHandlerArgs.type) << std::endl;
|
|
|
|
//break;
|
|
|
|
} //switch
|
|
|
|
|
|
//Do this to prevent overflow error in epicsTime time(ts) routines!
|
|
//This bad number can occur in timeouts
|
|
if(c.ts.nsec>1000000000)
|
|
{
|
|
c.ts.nsec=0;
|
|
}
|
|
|
|
|
|
} // void
|
|
|
|
|
|
|
|
private:
|
|
event_handler_args new_eventHandlerArgs;
|
|
#undef __METHOD__
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#endif // CONDUITEVENTHANDLERARGS_H
|