rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Classes | Public Types | Public Member Functions | Private Attributes | List of all members
rlDataAcquisition Class Reference

#include <rldataacquisition.h>

Collaboration diagram for rlDataAcquisition:
Collaboration graph
[legend]

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;
}
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;
cptr = shmvalues;
for(i=0; i<nmax; i++)
{
if(i == 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;
}
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;
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;
}
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

int rlDataAcquisition::iCurrent
private

Definition at line 79 of file rldataacquisition.h.

rlMailbox* rlDataAcquisition::mbx
private

Definition at line 77 of file rldataacquisition.h.

rlSharedMemory* rlDataAcquisition::shm
private

Definition at line 78 of file rldataacquisition.h.

SHM_HEADER* rlDataAcquisition::shmheader
private

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: