major changes to dbdToPv

This commit is contained in:
mrkraimer
2018-04-13 10:06:44 -04:00
parent 46c1cc3b38
commit 1e5f44d26e
4 changed files with 404 additions and 618 deletions

View File

@@ -38,10 +38,10 @@ CAChannel::shared_pointer CAChannel::create(CAChannelProvider::shared_pointer co
if(DEBUG_LEVEL>0) {
cout<< "CAChannel::create " << channelName << endl;
}
CAChannelPtr thisPtr(
CAChannelPtr caChannel(
new CAChannel(channelName, channelProvider, channelRequester));
thisPtr->activate(priority);
return thisPtr;
caChannel->activate(priority);
return caChannel;
}
static void ca_connection_handler(struct connection_handler_args args)
@@ -487,6 +487,8 @@ void CAChannelGet::channelStateChange(
throw std::runtime_error(mess);
}
std::string CAChannelGet::getRequesterName() { return "CAChannelGet";}
void CAChannelGet::channelDisconnect(bool destroy)
{
if(DEBUG_LEVEL>0) {
@@ -498,8 +500,6 @@ void CAChannelGet::channelDisconnect(bool destroy)
if(!destroy) channel->addChannelGet(shared_from_this());
}
/* --------------- epics::pvAccess::ChannelGet --------------- */
namespace {
static void ca_get_handler(struct event_handler_args args)
@@ -622,6 +622,8 @@ void CAChannelPut::channelStateChange(
throw std::runtime_error(mess);
}
std::string CAChannelPut::getRequesterName() { return "CAChannelPut";}
void CAChannelPut::channelDisconnect(bool destroy)
{
if(DEBUG_LEVEL>0) {
@@ -866,6 +868,7 @@ void CAChannelMonitor::channelStateChange(
throw std::runtime_error(mess);
}
std::string CAChannelMonitor::getRequesterName() { return "CAChannelMonitor";}
void CAChannelMonitor::channelDisconnect(bool destroy)
{

View File

@@ -22,7 +22,6 @@ namespace epics {
namespace pvAccess {
namespace ca {
class CAChannelGetField;
typedef std::tr1::shared_ptr<CAChannelGetField> CAChannelGetFieldPtr;
typedef std::tr1::weak_ptr<CAChannelGetField> CAChannelGetFieldWPtr;
@@ -53,22 +52,18 @@ class CAChannel :
public Channel,
public std::tr1::enable_shared_from_this<CAChannel>
{
public:
POINTER_DEFINITIONS(CAChannel);
static size_t num_instances;
static CAChannelPtr create(CAChannelProvider::shared_pointer const & channelProvider,
std::string const & channelName,
short priority,
ChannelRequester::shared_pointer const & channelRequester);
static CAChannelPtr create(
CAChannelProvider::shared_pointer const & channelProvider,
std::string const & channelName,
short priority,
ChannelRequester::shared_pointer const & channelRequester);
virtual ~CAChannel();
void connected();
void disconnected();
chid getChannelID();
virtual std::tr1::shared_ptr<ChannelProvider> getProvider();
@@ -76,54 +71,36 @@ public:
virtual ConnectionState getConnectionState();
virtual std::string getChannelName();
virtual std::tr1::shared_ptr<ChannelRequester> getChannelRequester();
virtual void getField(GetFieldRequester::shared_pointer const & requester,std::string const & subField);
virtual AccessRights getAccessRights(epics::pvData::PVField::shared_pointer const & pvField);
virtual ChannelGet::shared_pointer createChannelGet(
ChannelGetRequester::shared_pointer const & channelGetRequester,
epics::pvData::PVStructurePtr const & pvRequest);
virtual ChannelPut::shared_pointer createChannelPut(
ChannelPutRequester::shared_pointer const & channelPutRequester,
epics::pvData::PVStructurePtr const & pvRequest);
virtual Monitor::shared_pointer createMonitor(
MonitorRequester::shared_pointer const & monitorRequester,
epics::pvData::PVStructurePtr const & pvRequest);
virtual void printInfo(std::ostream& out);
/* ---------------------------------------------------------------- */
void attachContext();
void addChannelGet(const CAChannelGetPtr & get);
void addChannelPut(const CAChannelPutPtr & get);
void addChannelMonitor(const CAChannelMonitorPtr & get);
void disconnectChannel();
private:
/* --------------- Destroyable --------------- */
virtual void destroy() {}
CAChannel(std::string const & channelName,
CAChannelProvider::shared_pointer const & channelProvider,
ChannelRequester::shared_pointer const & channelRequester);
void activate(short priority);
std::string channelName;
CAChannelProviderWPtr channelProvider;
ChannelRequester::weak_pointer channelRequester;
chid channelID;
bool channelCreated;
epics::pvData::Mutex requestsMutex;
std::queue<CAChannelGetFieldPtr> getFieldQueue;
@@ -142,45 +119,32 @@ class CAChannelGet :
public ChannelBaseRequester,
public std::tr1::enable_shared_from_this<CAChannelGet>
{
public:
POINTER_DEFINITIONS(CAChannelGet);
static size_t num_instances;
static CAChannelGet::shared_pointer create(CAChannel::shared_pointer const & channel,
ChannelGetRequester::shared_pointer const & channelGetRequester,
epics::pvData::PVStructurePtr const & pvRequest);
virtual ~CAChannelGet();
void getDone(struct event_handler_args &args);
/* --------------- epics::pvAccess::ChannelGet --------------- */
virtual void get();
/* --------------- epics::pvData::ChannelRequest --------------- */
virtual Channel::shared_pointer getChannel();
virtual void cancel();
virtual void lastRequest();
/* --------------- ChannelRequester --------------- */
virtual void channelCreated(
const epics::pvData::Status& status,
Channel::shared_pointer const & channel);
virtual void channelStateChange(
Channel::shared_pointer const & channel,
Channel::ConnectionState cosnectionState);
virtual std::string getRequesterName() { return "CAChannelGet";}
/* --------------- ChannelBaseRequester --------------- */
virtual std::string getRequesterName();
virtual void channelDisconnect(bool destroy);
void activate();
private:
/* --------------- Destroyable --------------- */
virtual void destroy() {}
virtual void destroy() {}
CAChannelGet(CAChannel::shared_pointer const & _channel,
ChannelGetRequester::shared_pointer const & _channelGetRequester,
epics::pvData::PVStructurePtr const & pvRequest);
@@ -188,14 +152,11 @@ private:
CAChannelPtr channel;
ChannelGetRequester::weak_pointer channelGetRequester;
epics::pvData::PVStructurePtr const & pvRequest;
DbdToPvPtr dbdToPv;
epics::pvData::PVStructure::shared_pointer pvStructure;
epics::pvData::BitSet::shared_pointer bitSet;
};
class CAChannelPut :
public ChannelPut,
public ChannelRequester,
@@ -205,58 +166,40 @@ class CAChannelPut :
public:
POINTER_DEFINITIONS(CAChannelPut);
static size_t num_instances;
static CAChannelPut::shared_pointer create(CAChannel::shared_pointer const & channel,
ChannelPutRequester::shared_pointer const & channelPutRequester,
epics::pvData::PVStructurePtr const & pvRequest);
virtual ~CAChannelPut();
void getDone(struct event_handler_args &args);
/* --------------- epics::pvAccess::ChannelPut --------------- */
virtual void put(
epics::pvData::PVStructure::shared_pointer const & pvPutStructure,
epics::pvData::BitSet::shared_pointer const & putBitSet
);
virtual void get();
/* --------------- epics::pvData::ChannelRequest --------------- */
virtual Channel::shared_pointer getChannel();
virtual void cancel();
virtual void lastRequest();
/* --------------- ChannelRequester --------------- */
virtual void channelCreated(
const epics::pvData::Status& status,
Channel::shared_pointer const & channel);
virtual void channelStateChange(
Channel::shared_pointer const & channel,
Channel::ConnectionState connectionState);
virtual std::string getRequesterName() { return "CAChannelPut";}
/* --------------- ChannelBaseRequester --------------- */
virtual std::string getRequesterName();
virtual void channelDisconnect(bool destroy);
void activate();
private:
/* --------------- Destroyable --------------- */
virtual void destroy() {}
virtual void destroy() {}
CAChannelPut(CAChannel::shared_pointer const & _channel,
ChannelPutRequester::shared_pointer const & _channelPutRequester,
epics::pvData::PVStructurePtr const & pvRequest);
CAChannelPtr channel;
ChannelPutRequester::weak_pointer channelPutRequester;
const epics::pvData::PVStructure::shared_pointer pvRequest;
bool block;
DbdToPvPtr dbdToPv;
epics::pvData::PVStructure::shared_pointer pvStructure;
epics::pvData::BitSet::shared_pointer bitSet;
@@ -274,46 +217,34 @@ class CAChannelMonitor :
public:
POINTER_DEFINITIONS(CAChannelMonitor);
static size_t num_instances;
static CAChannelMonitor::shared_pointer create(CAChannel::shared_pointer const & channel,
MonitorRequester::shared_pointer const & monitorRequester,
epics::pvData::PVStructurePtr const & pvRequest);
virtual ~CAChannelMonitor();
void subscriptionEvent(struct event_handler_args &args);
/* --------------- Monitor --------------- */
virtual epics::pvData::Status start();
virtual epics::pvData::Status stop();
virtual MonitorElementPtr poll();
virtual void release(MonitorElementPtr const & monitorElement);
/* --------------- epics::pvData::ChannelRequest --------------- */
virtual void cancel();
/* --------------- ChannelRequester --------------- */
virtual void channelCreated(
const epics::pvData::Status& status,
Channel::shared_pointer const & channel);
virtual void channelStateChange(
Channel::shared_pointer const & channel,
Channel::ConnectionState connectionState);
virtual std::string getRequesterName() { return "CAChannelMonitor";}
/* --------------- ChannelBaseRequester --------------- */
virtual std::string getRequesterName();
virtual void channelDisconnect(bool destroy);
void activate();
private:
/* --------------- Destroyable --------------- */
virtual void destroy() {}
CAChannelMonitor(CAChannel::shared_pointer const & _channel,
MonitorRequester::shared_pointer const & _monitorRequester,
epics::pvData::PVStructurePtr const & pvRequest);
CAChannelPtr channel;
MonitorRequester::weak_pointer monitorRequester;
const epics::pvData::PVStructure::shared_pointer pvRequest;

File diff suppressed because it is too large Load Diff

View File

@@ -73,17 +73,11 @@ class DbdToPv
{
public:
POINTER_DEFINITIONS(DbdToPv);
/** @brief
*
*/
static DbdToPvPtr create(
CAChannelPtr const & caChannel,
epics::pvData::PVStructurePtr const & pvRequest,
IOType ioType
);
/** @brief
*
*/
epics::pvData::PVStructurePtr createPVStructure();
chtype getRequestType();
epics::pvData::Status getFromDBD(
@@ -100,10 +94,8 @@ public:
void descriptionConnected(struct connection_handler_args args);
void getDescriptionDone(struct event_handler_args &args);
void putDone(struct event_handler_args &args);
private:
DbdToPv(IOType ioType);
void activate(
CAChannelPtr const & caChannel,
epics::pvData::PVStructurePtr const & pvRequest
@@ -119,6 +111,7 @@ private:
bool firstTime;
chtype caValueType;
chtype caRequestType;
unsigned long maxElements;
epicsTimeStamp caTimeStamp;
CaAlarm caAlarm;
CaDisplay caDisplay;