This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::ca::CAChannelGet Class Reference

#include "caChannel.h"

+ Inheritance diagram for epics::pvAccess::ca::CAChannelGet:
+ Collaboration diagram for epics::pvAccess::ca::CAChannelGet:

Public Member Functions

 POINTER_DEFINITIONS (CAChannelGet)
 
virtual ~CAChannelGet ()
 
void getDone (struct event_handler_args &args)
 
virtual void get ()
 
virtual Channel::shared_pointer getChannel ()
 
virtual void cancel ()
 
virtual void lastRequest ()
 
virtual std::string getRequesterName ()
 
void activate ()
 
void notifyClient ()
 
- Public Member Functions inherited from epics::pvAccess::ChannelGet
 POINTER_DEFINITIONS (ChannelGet)
 
virtual ~ChannelGet ()
 
- Public Member Functions inherited from epics::pvAccess::ChannelRequest
 POINTER_DEFINITIONS (ChannelRequest)
 
 ChannelRequest ()
 
virtual ~ChannelRequest ()
 
- Public Member Functions inherited from epics::pvAccess::Destroyable
 POINTER_DEFINITIONS (Destroyable)
 
- Public Member Functions inherited from epics::pvAccess::Lockable
 POINTER_DEFINITIONS (Lockable)
 
virtual ~Lockable ()
 
virtual void lock ()
 
virtual void unlock ()
 

Static Public Member Functions

static CAChannelGet::shared_pointer create (CAChannel::shared_pointer const &channel, ChannelGetRequester::shared_pointer const &channelGetRequester, epics::pvData::PVStructurePtr const &pvRequest)
 

Additional Inherited Members

- Public Types inherited from epics::pvAccess::ChannelGet
typedef ChannelGetRequester requester_type
 
- Static Public Attributes inherited from epics::pvAccess::ChannelRequest
static size_t num_instances
 
- Protected Member Functions inherited from epics::pvAccess::Destroyable
virtual ~Destroyable ()
 

Detailed Description

Definition at line 150 of file caChannel.h.

Constructor & Destructor Documentation

epics::pvAccess::ca::CAChannelGet::~CAChannelGet ( )
virtual

Definition at line 458 of file caChannel.cpp.

459 {
460  if(DEBUG_LEVEL>0) {
461  std::cout << "CAChannelGet::~CAChannelGet() " << channel->getChannelName() << endl;
462  }
463 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25

Member Function Documentation

void epics::pvAccess::ca::CAChannelGet::activate ( )

Definition at line 465 of file caChannel.cpp.

466 {
467  ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
468  if(!getRequester) return;
469  if(DEBUG_LEVEL>0) {
470  std::cout << "CAChannelGet::activate " << channel->getChannelName() << endl;
471  }
472  dbdToPv = DbdToPv::create(channel,pvRequest,getIO);
473  dbdToPv->getChoices(channel);
474  pvStructure = dbdToPv->createPVStructure();
475  bitSet = BitSetPtr(new BitSet(pvStructure->getStructure()->getNumberFields()));
476  notifyGetRequester = NotifyGetRequesterPtr(new NotifyGetRequester());
477  notifyGetRequester->setChannelGet(shared_from_this());
478  EXCEPTION_GUARD(getRequester->channelGetConnect(Status::Ok, shared_from_this(),
479  pvStructure->getStructure()));
480 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
static Status Ok
Definition: status.h:47
A vector of bits.
Definition: bitSet.h:56
std::tr1::shared_ptr< NotifyGetRequester > NotifyGetRequesterPtr
Definition: caChannel.h:45
#define EXCEPTION_GUARD(code)
Definition: caChannel.cpp:31
std::tr1::shared_ptr< BitSet > BitSetPtr
Definition: bitSet.h:26
static DbdToPvPtr create(CAChannelPtr const &caChannel, epics::pvData::PVStructurePtr const &pvRequest, IOType ioType)
Definition: dbdToPv.cpp:37
void epics::pvAccess::ca::CAChannelGet::cancel ( )
virtual

Cancel any pending request. Completion will be reported via request's response callback:

  • if cancel() request is issued after the request was already complete, request success/failure completion will be reported and cancel() request ignored.
  • if the request was actually canceled, cancellation completion is reported.

Implements epics::pvAccess::ChannelRequest.

Definition at line 549 of file caChannel.cpp.

550 {
551 }
CAChannelGetPtr epics::pvAccess::ca::CAChannelGet::create ( CAChannel::shared_pointer const &  channel,
ChannelGetRequester::shared_pointer const &  channelGetRequester,
epics::pvData::PVStructurePtr const &  pvRequest 
)
static

Definition at line 436 of file caChannel.cpp.

440 {
441  if(DEBUG_LEVEL>0) {
442  cout << "CAChannelGet::create " << channel->getChannelName() << endl;
443  }
444  return CAChannelGetPtr(new CAChannelGet(channel, channelGetRequester, pvRequest));
445 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
std::tr1::shared_ptr< CAChannelGet > CAChannelGetPtr
Definition: caChannel.h:63
void epics::pvAccess::ca::CAChannelGet::get ( )
virtual

Get data from the channel.

Ownership of the PVStructure passed to ChannelGetRequester::getDone() is returned to the ChannelGet.

Completion status is reported by calling ChannelGetRequester::getDone() callback.

Implements epics::pvAccess::ChannelGet.

Definition at line 519 of file caChannel.cpp.

520 {
521  if(DEBUG_LEVEL>1) {
522  std::cout << "CAChannelGet::get " << channel->getChannelName() << endl;
523  }
524  ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
525  if(!getRequester) return;
526  channel->attachContext();
527  bitSet->clear();
528  int result = ca_array_get_callback(dbdToPv->getRequestType(),
529  0,
530  channel->getChannelID(), ca_get_handler, this);
531  if (result == ECA_NORMAL)
532  {
533  result = ca_flush_io();
534  }
535  if (result != ECA_NORMAL)
536  {
537  string mess("CAChannelGet::get ");
538  mess += channel->getChannelName() + " message " + ca_message(result);
539  getStatus = Status(Status::STATUSTYPE_ERROR,mess);
540  notifyClient();
541  }
542 }
LIBCA_API int epicsStdCall ca_array_get_callback(chtype type, unsigned long count, chid chanId, caEventCallBackFunc *pFunc, void *pArg)
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
pvac::PutEvent result
Definition: clientSync.cpp:117
#define ECA_NORMAL
Definition: caerr.h:77
int epicsStdCall ca_flush_io()
Definition: access.cpp:509
const char *epicsStdCall ca_message(long ca_status)
Definition: access.cpp:561
Channel::shared_pointer epics::pvAccess::ca::CAChannelGet::getChannel ( )
virtual

Get a channel instance this request belongs to.

Returns
the channel instance.

Implements epics::pvAccess::ChannelRequest.

Definition at line 544 of file caChannel.cpp.

545 {
546  return channel;
547 }
void epics::pvAccess::ca::CAChannelGet::getDone ( struct event_handler_args args)

Definition at line 496 of file caChannel.cpp.

497 {
498  if(DEBUG_LEVEL>1) {
499  std::cout << "CAChannelGet::getDone "
500  << channel->getChannelName() << endl;
501  }
502 
503  ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
504  if(!getRequester) return;
505  getStatus = dbdToPv->getFromDBD(pvStructure,bitSet,args);
506  getDoneThread->getDone(notifyGetRequester);
507 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
std::string epics::pvAccess::ca::CAChannelGet::getRequesterName ( )
virtual

Definition at line 484 of file caChannel.cpp.

484 { return "CAChannelGet";}
void epics::pvAccess::ca::CAChannelGet::lastRequest ( )
virtual

Announce next request as last request. When last request will be completed (regardless of completion status) the remote and local instance will be destroyed.

Implements epics::pvAccess::ChannelRequest.

Definition at line 553 of file caChannel.cpp.

554 {
555 }
void epics::pvAccess::ca::CAChannelGet::notifyClient ( )

Definition at line 509 of file caChannel.cpp.

510 {
511  if(DEBUG_LEVEL>1) {
512  std::cout << "CAChannelGet::notifyClient " << channel->getChannelName() << endl;
513  }
514  ChannelGetRequester::shared_pointer getRequester(channelGetRequester.lock());
515  if(!getRequester) return;
516  EXCEPTION_GUARD(getRequester->getDone(getStatus, shared_from_this(), pvStructure, bitSet));
517 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
#define EXCEPTION_GUARD(code)
Definition: caChannel.cpp:31
epics::pvAccess::ca::CAChannelGet::POINTER_DEFINITIONS ( CAChannelGet  )

The documentation for this class was generated from the following files: