ca provider ported to new API

This commit is contained in:
Matej Sekoranja
2014-05-21 23:01:03 +02:00
parent 6ae61258ca
commit fbb108652e
2 changed files with 51 additions and 20 deletions

View File

@@ -343,7 +343,7 @@ ChannelPutGet::shared_pointer CAChannel::createChannelPutGet(
Status errorStatus(Status::STATUSTYPE_ERROR, "not supported");
ChannelPutGet::shared_pointer nullChannelPutGet;
EXCEPTION_GUARD(channelPutGetRequester->channelPutGetConnect(errorStatus, nullChannelPutGet,
PVStructure::shared_pointer(), PVStructure::shared_pointer()));
Structure::const_shared_pointer(), Structure::const_shared_pointer()));
return nullChannelPutGet;
}
@@ -374,7 +374,7 @@ ChannelArray::shared_pointer CAChannel::createChannelArray(
Status errorStatus(Status::STATUSTYPE_ERROR, "not supported");
ChannelArray::shared_pointer nullChannelArray;
EXCEPTION_GUARD(channelArrayRequester->channelArrayConnect(errorStatus, nullChannelArray,
PVArray::shared_pointer()));
Array::const_shared_pointer()));
return nullChannelArray;
}
@@ -527,7 +527,7 @@ CAChannelGet::CAChannelGet(CAChannel::shared_pointer const & _channel,
void CAChannelGet::activate()
{
EXCEPTION_GUARD(channelGetRequester->channelGetConnect(Status::Ok, shared_from_this(),
pvStructure, bitSet));
pvStructure->getStructure()));
}
@@ -852,17 +852,17 @@ void CAChannelGet::getDone(struct event_handler_args &args)
std::cout << "no copy func implemented" << std::endl;
}
EXCEPTION_GUARD(channelGetRequester->getDone(Status::Ok));
EXCEPTION_GUARD(channelGetRequester->getDone(Status::Ok, shared_from_this(), pvStructure, bitSet));
}
else
{
Status errorStatus(Status::STATUSTYPE_ERROR, String(ca_message(args.status)));
EXCEPTION_GUARD(channelGetRequester->getDone(errorStatus));
EXCEPTION_GUARD(channelGetRequester->getDone(errorStatus, shared_from_this(), PVStructure::shared_pointer(), BitSet::shared_pointer()));
}
}
void CAChannelGet::get(bool lastRequest)
void CAChannelGet::get()
{
int result = ca_array_get_callback(getType, channel->getElementCount(),
channel->getChannelID(), ca_get_handler, this);
@@ -873,10 +873,10 @@ void CAChannelGet::get(bool lastRequest)
else
{
Status errorStatus(Status::STATUSTYPE_ERROR, String(ca_message(result)));
EXCEPTION_GUARD(channelGetRequester->getDone(errorStatus));
EXCEPTION_GUARD(channelGetRequester->getDone(errorStatus, shared_from_this(), PVStructure::shared_pointer(), BitSet::shared_pointer()));
}
if (lastRequest)
if (lastRequestFlag)
destroy();
}
@@ -888,6 +888,12 @@ void CAChannelGet::cancel()
// noop
}
void CAChannelGet::lastRequest()
{
// TODO sync !!!
lastRequestFlag = true;
}
/* --------------- epics::pvData::Destroyable --------------- */
@@ -955,7 +961,7 @@ CAChannelPut::CAChannelPut(CAChannel::shared_pointer const & _channel,
void CAChannelPut::activate()
{
EXCEPTION_GUARD(channelPutRequester->channelPutConnect(Status::Ok, shared_from_this(),
pvStructure, bitSet));
pvStructure->getStructure()));
}
@@ -1110,26 +1116,28 @@ void CAChannelPut::putDone(struct event_handler_args &args)
{
if (args.status == ECA_NORMAL)
{
EXCEPTION_GUARD(channelPutRequester->putDone(Status::Ok));
EXCEPTION_GUARD(channelPutRequester->putDone(Status::Ok, shared_from_this()));
}
else
{
Status errorStatus(Status::STATUSTYPE_ERROR, String(ca_message(args.status)));
EXCEPTION_GUARD(channelPutRequester->putDone(errorStatus));
EXCEPTION_GUARD(channelPutRequester->putDone(errorStatus, shared_from_this()));
}
}
void CAChannelPut::put(bool lastRequest)
void CAChannelPut::put(PVStructure::shared_pointer const & pvPutStructure,
BitSet::shared_pointer const & /*putBitSet*/)
{
doPut putFunc = doPutFuncTable[channel->getNativeType()];
if (putFunc)
{
int result = putFunc(channel, this, pvStructure);
// TODO now we always put all
int result = putFunc(channel, this, pvPutStructure);
if (result != ECA_NORMAL)
{
Status errorStatus(Status::STATUSTYPE_ERROR, String(ca_message(result)));
EXCEPTION_GUARD(channelPutRequester->getDone(errorStatus));
EXCEPTION_GUARD(channelPutRequester->putDone(errorStatus, shared_from_this()));
}
}
else
@@ -1139,7 +1147,7 @@ void CAChannelPut::put(bool lastRequest)
}
// TODO here???!!!
if (lastRequest)
if (lastRequestFlag)
destroy();
}
@@ -1157,13 +1165,18 @@ void CAChannelPut::getDone(struct event_handler_args &args)
std::cout << "no copy func implemented" << std::endl;
}
EXCEPTION_GUARD(channelPutRequester->getDone(Status::Ok));
EXCEPTION_GUARD(channelPutRequester->getDone(Status::Ok, shared_from_this(), pvStructure, bitSet));
}
else
{
Status errorStatus(Status::STATUSTYPE_ERROR, String(ca_message(args.status)));
EXCEPTION_GUARD(channelPutRequester->getDone(errorStatus));
EXCEPTION_GUARD(channelPutRequester->getDone(errorStatus, shared_from_this(),
PVStructure::shared_pointer(), BitSet::shared_pointer()));
}
// TODO here???!!!
if (lastRequestFlag)
destroy();
}
@@ -1178,7 +1191,8 @@ void CAChannelPut::get()
else
{
Status errorStatus(Status::STATUSTYPE_ERROR, String(ca_message(result)));
EXCEPTION_GUARD(channelPutRequester->getDone(errorStatus));
EXCEPTION_GUARD(channelPutRequester->getDone(errorStatus, shared_from_this(),
PVStructure::shared_pointer(), BitSet::shared_pointer()));
}
}
@@ -1191,6 +1205,12 @@ void CAChannelPut::cancel()
// noop
}
void CAChannelPut::lastRequest()
{
// TODO sync !!!
lastRequestFlag = true;
}
/* --------------- epics::pvData::Destroyable --------------- */

View File

@@ -142,11 +142,12 @@ public:
/* --------------- epics::pvAccess::ChannelGet --------------- */
virtual void get(bool lastRequest);
virtual void get();
/* --------------- epics::pvData::ChannelRequest --------------- */
virtual void cancel();
virtual void lastRequest();
/* --------------- epics::pvData::Destroyable --------------- */
@@ -170,6 +171,9 @@ private:
epics::pvData::PVStructure::shared_pointer pvStructure;
epics::pvData::BitSet::shared_pointer bitSet;
// TODO AtomicBoolean !!!
bool lastRequestFlag;
};
@@ -193,12 +197,16 @@ public:
/* --------------- epics::pvAccess::ChannelPut --------------- */
virtual void put(bool lastRequest);
virtual void put(
epics::pvData::PVStructure::shared_pointer const & pvPutStructure,
epics::pvData::BitSet::shared_pointer const & putBitSet
);
virtual void get();
/* --------------- epics::pvData::ChannelRequest --------------- */
virtual void cancel();
virtual void lastRequest();
/* --------------- epics::pvData::Destroyable --------------- */
@@ -222,6 +230,9 @@ private:
epics::pvData::PVStructure::shared_pointer pvStructure;
epics::pvData::BitSet::shared_pointer bitSet;
// TODO AtomicBoolean !!!
bool lastRequestFlag;
};