rllib  1
Classes | Public Types | Public Member Functions | Private Attributes
rlDataAcquisition Class Reference

#include <rldataacquisition.h>

Collaboration diagram for rlDataAcquisition:
Collaboration graph
[legend]

List of all members.

Classes

struct  SHM_HEADER

Public Types

enum  DAQ_ENUM { DAQ_ERROR = 256*256*128 }

Public Member Functions

 rlDataAcquisition (const char *mailbox="c:\\automation\\mbx\\dataacquisition.mbx", const char *shared_memory="c:\\automation\\shm\\dataacquisition.shm", long shared_memory_size=65536)
virtual ~rlDataAcquisition ()
const char * stringValue (const char *variable)
int intValue (const char *variable)
float floatValue (const char *variable)
int writeStringValue (const char *variable, const char *value)
int writeIntValue (const char *variable, int value)
int writeFloatValue (const char *variable, float value)
int readErrorCount ()
int writeErrorCount ()
int lifeCounter ()
const char * firstVariable ()
const char * nextVariable ()
int shmStatus ()
int shmKey ()
int shmId ()

Private Attributes

SHM_HEADERshmheader
const char * shmvalues
rlMailboxmbx
rlSharedMemoryshm
int iCurrent

Detailed Description

This class is for data acquisition within pvserver according to the pvbrowser principle.
It communicates by the means of a shared memory and a mailbox.
Use it together with rlDataAcquisitionProvider.

Definition at line 28 of file rldataacquisition.h.


Member Enumeration Documentation

Enumerator:
DAQ_ERROR 

Definition at line 45 of file rldataacquisition.h.

  {
    DAQ_ERROR = 256*256*128
  };

Constructor & Destructor Documentation

rlDataAcquisition::rlDataAcquisition ( const char *  mailbox = "c:\\automation\\mbx\\dataacquisition.mbx",
const char *  shared_memory = "c:\\automation\\shm\\dataacquisition.shm",
long  shared_memory_size = 65536 
)

Definition at line 21 of file rldataacquisition.cpp.

{
  mbx = new rlMailbox(mailbox);
  shm = new rlSharedMemory(shared_memory,shared_memory_size);
  shmheader = (SHM_HEADER *) shm->getUserAdr();
  shmvalues = ((const char *)shmheader) + sizeof(SHM_HEADER);
  iCurrent = -1;
}
rlDataAcquisition::~rlDataAcquisition ( ) [virtual]

Definition at line 30 of file rldataacquisition.cpp.

{
  delete mbx;
  delete shm;
}

Member Function Documentation

const char * rlDataAcquisition::firstVariable ( )

Definition at line 126 of file rldataacquisition.cpp.

{
  const char *cptr;

  if(shmheader == NULL) return "DAQ_ERROR";
  if(strcmp(shmheader->ident,"daq") != 0) return "DAQ_ERROR";
  cptr = shmvalues;
  iCurrent = 1;
  return cptr;
}
float rlDataAcquisition::floatValue ( const char *  variable)

Definition at line 75 of file rldataacquisition.cpp.

{
  const char *cptr;
  float ret;

  cptr = stringValue(variable);
  if(isdigit(*cptr) || *cptr == '-')
  {
    ret = DAQ_ERROR;
    sscanf(cptr,"%f",&ret);
    return ret;
  }
  return DAQ_ERROR;
}
int rlDataAcquisition::intValue ( const char *  variable)

Definition at line 60 of file rldataacquisition.cpp.

{
  const char *cptr;
  int ret;

  cptr = stringValue(variable);
  if(isdigit(*cptr))
  {
    ret = DAQ_ERROR;
    sscanf(cptr,"%d",&ret);
    return ret;
  }
  return DAQ_ERROR;
}
int rlDataAcquisition::lifeCounter ( )

Incremented by the daemon in each cycle

Definition at line 120 of file rldataacquisition.cpp.

{
  if(shmheader == NULL) return DAQ_ERROR;
  return shmheader->lifeCounter;
}
const char * rlDataAcquisition::nextVariable ( )

Definition at line 137 of file rldataacquisition.cpp.

{
  int value_offset, delta_index, nmax, i;
  const char *cptr;

  if(iCurrent < 0) return NULL;
  if(shmheader == NULL) return "DAQ_ERROR";
  if(strcmp(shmheader->ident,"daq") != 0) return "DAQ_ERROR";
  value_offset = shmheader->maxItemNameLength + 1;
  delta_index  = value_offset + shmheader->maxNameLength + 1;
  nmax         = shmheader->numItems;

  cptr = shmvalues;
  for(i=0; i<nmax; i++)
  {
    if(i == iCurrent)
    {
      iCurrent++;
      return cptr;
    }
    cptr += delta_index;
  }

  iCurrent = -1;
  return NULL;
}
int rlDataAcquisition::readErrorCount ( )

Incremented by the daemon on each read error

Definition at line 108 of file rldataacquisition.cpp.

{
  if(shmheader == NULL) return DAQ_ERROR;
  return shmheader->readErrorCount;
}
int rlDataAcquisition::shmId ( )

Definition at line 177 of file rldataacquisition.cpp.

{
  if(shm == NULL) return -1;
  return shm->shmId();
}
int rlDataAcquisition::shmKey ( )

Definition at line 171 of file rldataacquisition.cpp.

{
  if(shm == NULL) return -1;
  return shm->shmKey();
}
int rlDataAcquisition::shmStatus ( )

Definition at line 164 of file rldataacquisition.cpp.

{
  if(shmheader == NULL) return DAQ_ERROR;
  if(shm->status == rlSharedMemory::OK) return 0;
  return DAQ_ERROR;
}
const char * rlDataAcquisition::stringValue ( const char *  variable)

Definition at line 36 of file rldataacquisition.cpp.

{
  int value_offset, delta_index, nmax, i;
  const char *cptr;

  if(shmheader == NULL) return "DAQ_ERROR: shmheader==NULL";
  if(strcmp(shmheader->ident,"daq") != 0) return "DAQ_ERROR: shmheader->ident is false";
  value_offset = shmheader->maxItemNameLength + 1;
  delta_index  = value_offset + shmheader->maxNameLength + 1;
  nmax         = shmheader->numItems;

  cptr = shmvalues;
  for(i=0; i<nmax; i++)
  {
    if(strcmp(cptr,variable) == 0)
    {
      return cptr + value_offset;
    }
    cptr += delta_index;
  }

  return "DAQ_ERROR: variable not found in shared memory";
}
int rlDataAcquisition::writeErrorCount ( )

Incremented by the daemon on each write error

Definition at line 114 of file rldataacquisition.cpp.

{
  if(shmheader == NULL) return DAQ_ERROR;
  return shmheader->writeErrorCount;
}
int rlDataAcquisition::writeFloatValue ( const char *  variable,
float  value 
)

Definition at line 102 of file rldataacquisition.cpp.

{
  mbx->printf("%s,%f\n",variable,value);
  return 0;
}
int rlDataAcquisition::writeIntValue ( const char *  variable,
int  value 
)

Definition at line 96 of file rldataacquisition.cpp.

{
  mbx->printf("%s,%d\n",variable,value);
  return 0;
}
int rlDataAcquisition::writeStringValue ( const char *  variable,
const char *  value 
)

Definition at line 90 of file rldataacquisition.cpp.

{
  mbx->printf("%s,%s\n",variable,value);
  return 0;
}

Member Data Documentation

Definition at line 79 of file rldataacquisition.h.

Definition at line 77 of file rldataacquisition.h.

Definition at line 78 of file rldataacquisition.h.

Definition at line 75 of file rldataacquisition.h.

const char* rlDataAcquisition::shmvalues [private]

Definition at line 76 of file rldataacquisition.h.


The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines