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="/srv/automation/mbx/dataacquisition.mbx", const char *shared_memory="/srv/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 ()
const char * firstVariable ()
const char * nextVariable ()
int shmStatus ()

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 44 of file rldataacquisition.h.

00045   {
00046     DAQ_ERROR = 256*256*128
00047   };


Constructor & Destructor Documentation

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

Definition at line 21 of file rldataacquisition.cpp.

00022 {
00023   mbx = new rlMailbox(mailbox);
00024   shm = new rlSharedMemory(shared_memory,shared_memory_size);
00025   shmheader = (SHM_HEADER *) shm->getUserAdr();
00026   shmvalues = ((const char *)shmheader) + sizeof(SHM_HEADER);
00027   iCurrent = -1;
00028 }

rlDataAcquisition::~rlDataAcquisition (  )  [virtual]

Definition at line 30 of file rldataacquisition.cpp.

00031 {
00032   delete mbx;
00033   delete shm;
00034 }


Member Function Documentation

const char * rlDataAcquisition::firstVariable (  ) 

Definition at line 120 of file rldataacquisition.cpp.

00121 {
00122   const char *cptr;
00123 
00124   if(shmheader == NULL) return "DAQ_ERROR";
00125   if(strcmp(shmheader->ident,"daq") != 0) return "DAQ_ERROR";
00126   cptr = shmvalues;
00127   iCurrent = 1;
00128   return cptr;
00129 }

float rlDataAcquisition::floatValue ( const char *  variable  ) 

Definition at line 75 of file rldataacquisition.cpp.

00076 {
00077   const char *cptr;
00078   float ret;
00079 
00080   cptr = stringValue(variable);
00081   if(isdigit(*cptr) || *cptr == '-')
00082   {
00083     ret = DAQ_ERROR;
00084     sscanf(cptr,"%f",&ret);
00085     return ret;
00086   }
00087   return DAQ_ERROR;
00088 }

int rlDataAcquisition::intValue ( const char *  variable  ) 

Definition at line 60 of file rldataacquisition.cpp.

00061 {
00062   const char *cptr;
00063   int ret;
00064 
00065   cptr = stringValue(variable);
00066   if(isdigit(*cptr))
00067   {
00068     ret = DAQ_ERROR;
00069     sscanf(cptr,"%d",&ret);
00070     return ret;
00071   }
00072   return DAQ_ERROR;
00073 }

const char * rlDataAcquisition::nextVariable (  ) 

Definition at line 131 of file rldataacquisition.cpp.

00132 {
00133   int value_offset, delta_index, nmax, i;
00134   const char *cptr;
00135 
00136   if(iCurrent < 0) return NULL;
00137   if(shmheader == NULL) return "DAQ_ERROR";
00138   if(strcmp(shmheader->ident,"daq") != 0) return "DAQ_ERROR";
00139   value_offset = shmheader->maxItemNameLength + 1;
00140   delta_index  = value_offset + shmheader->maxNameLength + 1;
00141   nmax         = shmheader->numItems;
00142 
00143   cptr = shmvalues;
00144   for(i=0; i<nmax; i++)
00145   {
00146     if(i == iCurrent)
00147     {
00148       iCurrent++;
00149       return cptr;
00150     }
00151     cptr += delta_index;
00152   }
00153 
00154   iCurrent = -1;
00155   return NULL;
00156 }

int rlDataAcquisition::readErrorCount (  ) 

Definition at line 108 of file rldataacquisition.cpp.

00109 {
00110   if(shmheader == NULL) return DAQ_ERROR;
00111   return shmheader->readErrorCount;
00112 }

int rlDataAcquisition::shmStatus (  ) 

Definition at line 158 of file rldataacquisition.cpp.

00159 {
00160   if(shmheader == NULL) return DAQ_ERROR;
00161   if(shm->status == rlSharedMemory::OK) return 0;
00162   return DAQ_ERROR;
00163 }

const char * rlDataAcquisition::stringValue ( const char *  variable  ) 

Definition at line 36 of file rldataacquisition.cpp.

00037 {
00038   int value_offset, delta_index, nmax, i;
00039   const char *cptr;
00040 
00041   if(shmheader == NULL) return "DAQ_ERROR";
00042   if(strcmp(shmheader->ident,"daq") != 0) return "DAQ_ERROR";
00043   value_offset = shmheader->maxItemNameLength + 1;
00044   delta_index  = value_offset + shmheader->maxNameLength + 1;
00045   nmax         = shmheader->numItems;
00046 
00047   cptr = shmvalues;
00048   for(i=0; i<nmax; i++)
00049   {
00050     if(strcmp(cptr,variable) == 0)
00051     {
00052       return cptr + value_offset;
00053     }
00054     cptr += delta_index;
00055   }
00056 
00057   return "DAQ_ERROR";
00058 }

int rlDataAcquisition::writeErrorCount (  ) 

Definition at line 114 of file rldataacquisition.cpp.

00115 {
00116   if(shmheader == NULL) return DAQ_ERROR;
00117   return shmheader->writeErrorCount;
00118 }

int rlDataAcquisition::writeFloatValue ( const char *  variable,
float  value 
)

Definition at line 102 of file rldataacquisition.cpp.

00103 {
00104   mbx->printf("%s,%f\n",variable,value);
00105   return 0;
00106 }

int rlDataAcquisition::writeIntValue ( const char *  variable,
int  value 
)

Definition at line 96 of file rldataacquisition.cpp.

00097 {
00098   mbx->printf("%s,%d\n",variable,value);
00099   return 0;
00100 }

int rlDataAcquisition::writeStringValue ( const char *  variable,
const char *  value 
)

Definition at line 90 of file rldataacquisition.cpp.

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


Member Data Documentation

Definition at line 72 of file rldataacquisition.h.

Definition at line 70 of file rldataacquisition.h.

Definition at line 71 of file rldataacquisition.h.

Definition at line 68 of file rldataacquisition.h.

const char* rlDataAcquisition::shmvalues [private]

Definition at line 69 of file rldataacquisition.h.


The documentation for this class was generated from the following files:
Generated on Mon Aug 30 20:16:16 2010 for rllib by  doxygen 1.6.3