remove lastRequest messages; in activate only make callback if connected
This commit is contained in:
@@ -35,6 +35,9 @@ CAChannel::shared_pointer CAChannel::create(CAChannelProvider::shared_pointer co
|
||||
short priority,
|
||||
ChannelRequester::shared_pointer const & channelRequester)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::create " << channelName << endl;
|
||||
}
|
||||
CAChannelPtr thisPtr(
|
||||
new CAChannel(channelName, channelProvider, channelRequester));
|
||||
thisPtr->activate(priority);
|
||||
@@ -232,6 +235,9 @@ static PVStructure::shared_pointer createPVStructure(CAChannel::shared_pointer c
|
||||
|
||||
void CAChannel::connected()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::connected " << channelName << endl;
|
||||
}
|
||||
{
|
||||
Lock lock(requestsMutex);
|
||||
// we assume array if element count > 1
|
||||
@@ -310,6 +316,9 @@ void CAChannel::connected()
|
||||
|
||||
void CAChannel::disconnected()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::disconnected " << channelName << endl;
|
||||
}
|
||||
std::queue<CAChannelPutPtr> putQ;
|
||||
std::queue<CAChannelGetPtr> getQ;
|
||||
std::queue<CAChannelMonitorPtr> monitorQ;
|
||||
@@ -372,6 +381,9 @@ CAChannel::CAChannel(std::string const & _channelName,
|
||||
|
||||
void CAChannel::activate(short priority)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::activate " << channelName << endl;
|
||||
}
|
||||
ChannelRequester::shared_pointer req(channelRequester.lock());
|
||||
if(!req) return;
|
||||
int result = ca_create_channel(channelName.c_str(),
|
||||
@@ -390,6 +402,9 @@ void CAChannel::activate(short priority)
|
||||
|
||||
void CAChannel::addChannelGet(const CAChannelGetPtr & get)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::addChannelGet " << channelName << endl;
|
||||
}
|
||||
Lock lock(requestsMutex);
|
||||
for(size_t i=0; i< getList.size(); ++i) {
|
||||
if(!(getList[i].lock())) {
|
||||
@@ -402,6 +417,9 @@ void CAChannel::addChannelGet(const CAChannelGetPtr & get)
|
||||
|
||||
void CAChannel::addChannelPut(const CAChannelPutPtr & put)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::addChannelPut " << channelName << endl;
|
||||
}
|
||||
Lock lock(requestsMutex);
|
||||
for(size_t i=0; i< putList.size(); ++i) {
|
||||
if(!(putList[i].lock())) {
|
||||
@@ -415,6 +433,9 @@ void CAChannel::addChannelPut(const CAChannelPutPtr & put)
|
||||
|
||||
void CAChannel::addChannelMonitor(const CAChannelMonitorPtr & monitor)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::addChannelMonitor " << channelName << endl;
|
||||
}
|
||||
Lock lock(requestsMutex);
|
||||
for(size_t i=0; i< monitorList.size(); ++i) {
|
||||
if(!(monitorList[i].lock())) {
|
||||
@@ -531,6 +552,9 @@ ChannelGet::shared_pointer CAChannel::createChannelGet(
|
||||
ChannelGetRequester::shared_pointer const & channelGetRequester,
|
||||
epics::pvData::PVStructure::shared_pointer const & pvRequest)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannel::createChannelGet " << channelName << endl;
|
||||
}
|
||||
CAChannelGetPtr channelGet = CAChannelGet::create(shared_from_this(), channelGetRequester, pvRequest);\
|
||||
if(getConnectionState()==Channel::CONNECTED) {
|
||||
channelGet->activate();
|
||||
@@ -545,6 +569,9 @@ ChannelPut::shared_pointer CAChannel::createChannelPut(
|
||||
ChannelPutRequester::shared_pointer const & channelPutRequester,
|
||||
epics::pvData::PVStructure::shared_pointer const & pvRequest)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannel::createChannelPut " << channelName << endl;
|
||||
}
|
||||
CAChannelPutPtr channelPut = CAChannelPut::create(shared_from_this(), channelPutRequester, pvRequest);\
|
||||
if(getConnectionState()==Channel::CONNECTED) {
|
||||
channelPut->activate();
|
||||
@@ -559,6 +586,9 @@ Monitor::shared_pointer CAChannel::createMonitor(
|
||||
MonitorRequester::shared_pointer const & monitorRequester,
|
||||
epics::pvData::PVStructure::shared_pointer const & pvRequest)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannel::createMonitor " << channelName << endl;
|
||||
}
|
||||
CAChannelMonitorPtr channelMonitor = CAChannelMonitor::create(shared_from_this(), monitorRequester, pvRequest);\
|
||||
if(getConnectionState()==Channel::CONNECTED) {
|
||||
channelMonitor->activate();
|
||||
@@ -658,6 +688,9 @@ CAChannelGet::~CAChannelGet()
|
||||
|
||||
void CAChannelGet::activate()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelGet::activate " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
|
||||
if(!getRequester) return;
|
||||
if(pvStructure) throw std::runtime_error("CAChannelGet::activate() was called twice");
|
||||
@@ -666,12 +699,17 @@ void CAChannelGet::activate()
|
||||
bitSet = BitSetPtr(new BitSet(pvStructure->getStructure()->getNumberFields()));
|
||||
bitSet->set(0);
|
||||
channel->addChannelGet(shared_from_this());
|
||||
EXCEPTION_GUARD(getRequester->channelGetConnect(Status::Ok, shared_from_this(),
|
||||
if(channel->getConnectionState()==Channel::CONNECTED) {
|
||||
EXCEPTION_GUARD(getRequester->channelGetConnect(Status::Ok, shared_from_this(),
|
||||
pvStructure->getStructure()));
|
||||
}
|
||||
}
|
||||
|
||||
void CAChannelGet::channelCreated(const Status& status,Channel::shared_pointer const & cl)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelGet::channelCreated " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
|
||||
if(!getRequester) return;
|
||||
chtype newType = getDBRType(pvRequest, channel->getNativeType());
|
||||
@@ -689,6 +727,9 @@ void CAChannelGet::channelStateChange(
|
||||
Channel::shared_pointer const & channel,
|
||||
Channel::ConnectionState connectionState)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelGet::channelStateChange " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
|
||||
if(!getRequester) return;
|
||||
if(connectionState==Channel::DISCONNECTED || connectionState==Channel::DESTROYED) {
|
||||
@@ -698,6 +739,9 @@ void CAChannelGet::channelStateChange(
|
||||
|
||||
void CAChannelGet::channelDisconnect(bool destroy)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelGet::channelDisconnect " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
|
||||
if(!getRequester) return;
|
||||
EXCEPTION_GUARD(getRequester->channelDisconnect(destroy);)
|
||||
@@ -1067,6 +1111,9 @@ static copyDBRtoPVStructure copyFuncTable[] =
|
||||
|
||||
void CAChannelGet::getDone(struct event_handler_args &args)
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
std::cout << "CAChannelGet::getDone " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
|
||||
if(!getRequester) return;
|
||||
if (args.status == ECA_NORMAL)
|
||||
@@ -1092,7 +1139,9 @@ void CAChannelGet::getDone(struct event_handler_args &args)
|
||||
|
||||
void CAChannelGet::get()
|
||||
{
|
||||
|
||||
if(DEBUG_LEVEL>1) {
|
||||
std::cout << "CAChannelGet::get " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
|
||||
if(!getRequester) return;
|
||||
channel->threadAttach();
|
||||
@@ -1130,15 +1179,10 @@ Channel::shared_pointer CAChannelGet::getChannel()
|
||||
|
||||
void CAChannelGet::cancel()
|
||||
{
|
||||
// noop
|
||||
}
|
||||
|
||||
void CAChannelGet::lastRequest()
|
||||
{
|
||||
std::cout << "CAChannelGet::lastRequest() "
|
||||
<< channel->getChannelName()
|
||||
<< " does not do anything"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -1177,6 +1221,9 @@ CAChannelPut::CAChannelPut(CAChannel::shared_pointer const & channel,
|
||||
|
||||
void CAChannelPut::activate()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannelPut::activate " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
if(pvStructure) throw std::runtime_error("CAChannelPut::activate() was called twice");
|
||||
@@ -1190,13 +1237,18 @@ void CAChannelPut::activate()
|
||||
}
|
||||
bitSet->set(pvStructure->getSubFieldT("value")->getFieldOffset());
|
||||
channel->addChannelPut(shared_from_this());
|
||||
EXCEPTION_GUARD(putRequester->channelPutConnect(Status::Ok, shared_from_this(),
|
||||
if(channel->getConnectionState()==Channel::CONNECTED) {
|
||||
EXCEPTION_GUARD(putRequester->channelPutConnect(Status::Ok, shared_from_this(),
|
||||
pvStructure->getStructure()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CAChannelPut::channelCreated(const Status& status,Channel::shared_pointer const & c)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannelPut::channelCreated " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
chtype newType = getDBRType(pvRequest, channel->getNativeType());
|
||||
@@ -1219,6 +1271,9 @@ void CAChannelPut::channelStateChange(
|
||||
Channel::shared_pointer const & channel,
|
||||
Channel::ConnectionState connectionState)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannelPut::channelStateChange " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
if(connectionState==Channel::DISCONNECTED || connectionState==Channel::DESTROYED) {
|
||||
@@ -1228,6 +1283,9 @@ void CAChannelPut::channelStateChange(
|
||||
|
||||
void CAChannelPut::channelDisconnect(bool destroy)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannelPut::channelDisconnect " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
EXCEPTION_GUARD(putRequester->channelDisconnect(destroy);)
|
||||
@@ -1434,6 +1492,9 @@ static doPut doPutFuncTable[] =
|
||||
|
||||
void CAChannelPut::putDone(struct event_handler_args &args)
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
cout << "CAChannelPut::putDone " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
if (args.status == ECA_NORMAL)
|
||||
@@ -1450,6 +1511,9 @@ void CAChannelPut::putDone(struct event_handler_args &args)
|
||||
void CAChannelPut::put(PVStructure::shared_pointer const & pvPutStructure,
|
||||
BitSet::shared_pointer const & /*putBitSet*/)
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
cout << "CAChannelPut::put " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
channel->threadAttach();
|
||||
@@ -1489,6 +1553,9 @@ void CAChannelPut::put(PVStructure::shared_pointer const & pvPutStructure,
|
||||
|
||||
void CAChannelPut::getDone(struct event_handler_args &args)
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
cout << "CAChannelPut::getDone " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
if (args.status == ECA_NORMAL)
|
||||
@@ -1516,6 +1583,9 @@ void CAChannelPut::getDone(struct event_handler_args &args)
|
||||
|
||||
void CAChannelPut::get()
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
cout << "CAChannelPut::get " << channel->getChannelName() << endl;
|
||||
}
|
||||
ChannelPutRequester::shared_pointer putRequester(channelPutRequester.lock());
|
||||
if(!putRequester) return;
|
||||
channel->threadAttach();
|
||||
@@ -1545,15 +1615,10 @@ Channel::shared_pointer CAChannelPut::getChannel()
|
||||
|
||||
void CAChannelPut::cancel()
|
||||
{
|
||||
// noop
|
||||
}
|
||||
|
||||
void CAChannelPut::lastRequest()
|
||||
{
|
||||
std::cout << "CAChannelPut::lastRequest() "
|
||||
<< channel->getChannelName()
|
||||
<< " does not do anything"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -1681,6 +1746,9 @@ CAChannelMonitor::CAChannelMonitor(
|
||||
|
||||
void CAChannelMonitor::activate()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelMonitor::activate " << channel->getChannelName() << endl;
|
||||
}
|
||||
MonitorRequester::shared_pointer requester(monitorRequester.lock());
|
||||
if(!requester) return;
|
||||
if(pvStructure) throw std::runtime_error("CAChannelMonitor::activate() was called twice");
|
||||
@@ -1700,12 +1768,17 @@ void CAChannelMonitor::activate()
|
||||
}
|
||||
monitorQueue = CACMonitorQueuePtr(new CACMonitorQueue(queueSize));
|
||||
channel->addChannelMonitor(shared_from_this());
|
||||
EXCEPTION_GUARD(requester->monitorConnect(Status::Ok, shared_from_this(),
|
||||
if(channel->getConnectionState()==Channel::CONNECTED) {
|
||||
EXCEPTION_GUARD(requester->monitorConnect(Status::Ok, shared_from_this(),
|
||||
pvStructure->getStructure()));
|
||||
}
|
||||
}
|
||||
|
||||
void CAChannelMonitor::channelCreated(const Status& status,Channel::shared_pointer const & c)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelMonitor::channelCreated " << channel->getChannelName() << endl;
|
||||
}
|
||||
MonitorRequester::shared_pointer requester(monitorRequester.lock());
|
||||
if(!requester) return;
|
||||
chtype newType = getDBRType(pvRequest, channel->getNativeType());
|
||||
@@ -1734,6 +1807,9 @@ void CAChannelMonitor::channelStateChange(
|
||||
Channel::shared_pointer const & channel,
|
||||
Channel::ConnectionState connectionState)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelMonitor::channelStateChange " << channel->getChannelName() << endl;
|
||||
}
|
||||
MonitorRequester::shared_pointer requester(monitorRequester.lock());
|
||||
if(!requester) return;
|
||||
if(connectionState==Channel::DISCONNECTED || connectionState==Channel::DESTROYED) {
|
||||
@@ -1744,6 +1820,9 @@ void CAChannelMonitor::channelStateChange(
|
||||
|
||||
void CAChannelMonitor::channelDisconnect(bool destroy)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelMonitor::channelDisconnect " << channel->getChannelName() << endl;
|
||||
}
|
||||
MonitorRequester::shared_pointer requester(monitorRequester.lock());
|
||||
if(!requester) return;
|
||||
EXCEPTION_GUARD(requester->channelDisconnect(destroy);)
|
||||
@@ -1751,6 +1830,9 @@ void CAChannelMonitor::channelDisconnect(bool destroy)
|
||||
|
||||
void CAChannelMonitor::subscriptionEvent(struct event_handler_args &args)
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
std::cout << "CAChannelMonitor::subscriptionEvent " << channel->getChannelName() << endl;
|
||||
}
|
||||
MonitorRequester::shared_pointer requester(monitorRequester.lock());
|
||||
if(!requester) return;
|
||||
if (args.status == ECA_NORMAL)
|
||||
@@ -1775,6 +1857,9 @@ void CAChannelMonitor::subscriptionEvent(struct event_handler_args &args)
|
||||
|
||||
epics::pvData::Status CAChannelMonitor::start()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelMonitor::start " << channel->getChannelName() << endl;
|
||||
}
|
||||
Status status = Status::Ok;
|
||||
if(isStarted) {
|
||||
status = Status(Status::STATUSTYPE_WARNING,"already started");
|
||||
@@ -1813,6 +1898,9 @@ epics::pvData::Status CAChannelMonitor::start()
|
||||
|
||||
epics::pvData::Status CAChannelMonitor::stop()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
std::cout << "CAChannelMonitor::stop " << channel->getChannelName() << endl;
|
||||
}
|
||||
Status status = Status::Ok;
|
||||
if(!isStarted) return Status(Status::STATUSTYPE_WARNING,"already stopped");
|
||||
channel->threadAttach();
|
||||
@@ -1834,12 +1922,18 @@ epics::pvData::Status CAChannelMonitor::stop()
|
||||
|
||||
MonitorElementPtr CAChannelMonitor::poll()
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
std::cout << "CAChannelMonitor::poll " << channel->getChannelName() << endl;
|
||||
}
|
||||
return monitorQueue->poll();
|
||||
}
|
||||
|
||||
|
||||
void CAChannelMonitor::release(MonitorElementPtr const & monitorElement)
|
||||
{
|
||||
if(DEBUG_LEVEL>1) {
|
||||
std::cout << "CAChannelMonitor::release " << channel->getChannelName() << endl;
|
||||
}
|
||||
monitorQueue->release(monitorElement);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user