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

#include <rldataacquisitionprovider.h>

Collaboration diagram for rlDataAcquisitionProvider:
Collaboration graph
[legend]

Classes

struct  SHM_HEADER
 

Public Types

enum  DAQ_PROVIDER_ENUM { DAQ_PROVIDER_ERROR = 256*256*128 }
 

Public Member Functions

 rlDataAcquisitionProvider (int maxNameLength=31, const char *shared_memory="c:\\automation\\shm\\dataacquisition.shm", long shared_memory_size=65536)
 
virtual ~rlDataAcquisitionProvider ()
 
int readItemList (const char *filename)
 
const char * firstItem ()
 
const char * nextItem ()
 
const char * stringValue (const char *variable)
 
int intValue (const char *variable)
 
float floatValue (const char *variable)
 
int setStringValue (const char *variable, const char *value)
 
int setIntValue (const char *variable, int value)
 
int setFloatValue (const char *variable, float value)
 
int readErrorCount ()
 
int writeErrorCount ()
 
int lifeCounter ()
 
int setReadErrorCount (int count)
 
int setWriteErrorCount (int count)
 
int setLifeCounter (int count)
 
int shmStatus ()
 
int setAllowAddValues (int allow, int maxItemNameLength)
 

Private Attributes

SHM_HEADERshmheader
 
char * shmvalues
 
int current_item
 
int allow_add_values
 
rlSharedMemoryshm
 
long sharedMemorySize
 

Detailed Description

This class is usefull to implement your own data acquisition according to the pvbrowser principle.
It is used within pvb/template/dataacquisition/client/data_acquisition_provider_template.cpp
Starting from there you can implement your data acquisition.

Definition at line 27 of file rldataacquisitionprovider.h.

Member Enumeration Documentation

Enumerator:
DAQ_PROVIDER_ERROR 

Definition at line 44 of file rldataacquisitionprovider.h.

{
DAQ_PROVIDER_ERROR = 256*256*128
};

Constructor & Destructor Documentation

rlDataAcquisitionProvider::rlDataAcquisitionProvider ( int  maxNameLength = 31,
const char *  shared_memory = "c:\\automation\\shm\\dataacquisition.shm",
long  shared_memory_size = 65536 
)

Definition at line 21 of file rldataacquisitionprovider.cpp.

{
shm = new rlSharedMemory(shared_memory,shared_memory_size);
shmheader = (SHM_HEADER *) shm->getUserAdr();
shmvalues = ((char *)shmheader) + sizeof(SHM_HEADER);
memset(shmheader,0,shared_memory_size);
shmheader->maxNameLength = maxNameLength;
sharedMemorySize = shared_memory_size;
strcpy(shmheader->ident, "daq");
}
rlDataAcquisitionProvider::~rlDataAcquisitionProvider ( )
virtual

Definition at line 37 of file rldataacquisitionprovider.cpp.

{
delete shm;
}

Member Function Documentation

const char * rlDataAcquisitionProvider::firstItem ( )

Definition at line 112 of file rldataacquisitionprovider.cpp.

{
int value_offset, delta_index;
const char *cptr;
if(shmheader == NULL) return NULL;
if(shmheader->numItems <= 0) return NULL;
if(strcmp(shmheader->ident,"daq") != 0) return NULL;
value_offset = shmheader->maxItemNameLength + 1;
delta_index = value_offset + shmheader->maxNameLength + 1;
cptr = shmvalues;
return cptr + (current_item * delta_index);
}
float rlDataAcquisitionProvider::floatValue ( const char *  variable)

Definition at line 186 of file rldataacquisitionprovider.cpp.

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

Definition at line 171 of file rldataacquisitionprovider.cpp.

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

Definition at line 280 of file rldataacquisitionprovider.cpp.

{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
}
const char * rlDataAcquisitionProvider::nextItem ( )

Definition at line 129 of file rldataacquisitionprovider.cpp.

{
int value_offset, delta_index;
const char *cptr;
if(shmheader == NULL) return NULL;
if(shmheader->numItems <= 0) return NULL;
if(strcmp(shmheader->ident,"daq") != 0) return NULL;
if(shmheader->numItems <= current_item) return NULL;
value_offset = shmheader->maxItemNameLength + 1;
delta_index = value_offset + shmheader->maxNameLength + 1;
cptr = shmvalues;
return cptr + (current_item * delta_index);
}
int rlDataAcquisitionProvider::readErrorCount ( )

Definition at line 268 of file rldataacquisitionprovider.cpp.

{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
}
int rlDataAcquisitionProvider::readItemList ( const char *  filename)

Definition at line 42 of file rldataacquisitionprovider.cpp.

{
if(filename == NULL) return DAQ_PROVIDER_ERROR;
FILE *fin;
char line[1024], *cptr, *cptr2;
int maxItemNameLength,numItems,len,i;
int value_offset, delta_index;
int ilong;
// get maxItemNameLength and numItems
fin = fopen(filename,"r");
if(fin == NULL)
{
printf("could not open itemlist %s\n",filename);
}
maxItemNameLength = numItems = 0;
while(fgets(line,sizeof(line)-1,fin) != NULL)
{
if(line[0] > ' ' && line[0] != '#')
{
len = strlen(line);
if(len > maxItemNameLength) maxItemNameLength = len;
numItems++;
}
}
fclose(fin);
shmheader->maxItemNameLength = maxItemNameLength;
shmheader->numItems = numItems;
// read items
fin = fopen(filename,"r");
if(fin == NULL)
{
printf("could not open itemlist %s\n",filename);
}
cptr = shmvalues;
value_offset = shmheader->maxItemNameLength + 1;
delta_index = value_offset + shmheader->maxNameLength + 1;
ilong = sharedMemorySize - sizeof(SHM_HEADER);
if(ilong < numItems*delta_index)
{
printf("rlDataAcquisitionProvider::shared memmory is too small sharedMemorySize=%ld sizeNeeded=%ld\n", sharedMemorySize, numItems*delta_index + sizeof(SHM_HEADER));
}
i = 0;
while(fgets(line,sizeof(line)-1,fin) != NULL)
{
if(line[0] > ' ' && line[0] != '#')
{
len = strlen(line);
if(len > shmheader->maxNameLength) line[shmheader->maxNameLength] = '\0';
cptr2 = strchr(line,'\n');
if(cptr2 != NULL) *cptr2 = '\0';
cptr2 = strchr(line,' ');
if(cptr2 != NULL) *cptr2 = '\0';
cptr2 = strchr(line,'\t');
if(cptr2 != NULL) *cptr2 = '\0';
strcpy(cptr + (i*delta_index), line);
i++;
}
}
fclose(fin);
strcpy(shmheader->ident, "daq");
return 0;
}
int rlDataAcquisitionProvider::setAllowAddValues ( int  allow,
int  maxItemNameLength 
)

Definition at line 314 of file rldataacquisitionprovider.cpp.

{
if(allow == 0) allow_add_values = 0;
else allow_add_values = 1;
if(maxItemNameLength > 0) shmheader->maxItemNameLength = maxItemNameLength;
return 0;
}
int rlDataAcquisitionProvider::setFloatValue ( const char *  variable,
float  value 
)

Definition at line 260 of file rldataacquisitionprovider.cpp.

{
char cval[128];
sprintf(cval,"%f",value);
return setStringValue(variable,cval);
}
int rlDataAcquisitionProvider::setIntValue ( const char *  variable,
int  value 
)

Definition at line 252 of file rldataacquisitionprovider.cpp.

{
char cval[128];
sprintf(cval,"%d",value);
return setStringValue(variable,cval);
}
int rlDataAcquisitionProvider::setLifeCounter ( int  count)

Definition at line 300 of file rldataacquisitionprovider.cpp.

{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
return 0;
}
int rlDataAcquisitionProvider::setReadErrorCount ( int  count)

Definition at line 286 of file rldataacquisitionprovider.cpp.

{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
return 0;
}
int rlDataAcquisitionProvider::setStringValue ( const char *  variable,
const char *  value 
)

Definition at line 201 of file rldataacquisitionprovider.cpp.

{
if(variable == NULL || value == NULL || shmheader == NULL) return DAQ_PROVIDER_ERROR;
if(strcmp(shmheader->ident,"daq") != 0) return DAQ_PROVIDER_ERROR;
int value_offset, delta_index, nmax, i;
char *cptr;
if((int) strlen(variable) > shmheader->maxItemNameLength) return DAQ_PROVIDER_ERROR;
int len = strlen(value);
char *val = new char[len+1];
strcpy(val,value);
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)
{
strcpy(cptr + value_offset, val); // update existing value
delete [] val;
return 0;
}
cptr += delta_index;
}
if(allow_add_values == 1) // insert a new value
{
if(sharedMemorySize > ( (long) sizeof(SHM_HEADER) + (i*delta_index) + delta_index ) )
{
strcpy(cptr, variable); // insert the value
strcpy(cptr + value_offset, val); // insert the value
delete [] val;
return 0;
}
else
{
::printf("rlDataAcquisitionProvider: ERROR shared memory too small to add variable=%s val=%s please increase shared memory size", variable, val);
}
}
delete [] val;
}
int rlDataAcquisitionProvider::setWriteErrorCount ( int  count)

Definition at line 293 of file rldataacquisitionprovider.cpp.

{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
return 0;
}
int rlDataAcquisitionProvider::shmStatus ( )

Definition at line 307 of file rldataacquisitionprovider.cpp.

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

Definition at line 147 of file rldataacquisitionprovider.cpp.

{
int value_offset, delta_index, nmax, i;
const char *cptr;
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(strcmp(cptr,variable) == 0)
{
return cptr + value_offset;
}
cptr += delta_index;
}
return "DAQ_ERROR";
}
int rlDataAcquisitionProvider::writeErrorCount ( )

Definition at line 274 of file rldataacquisitionprovider.cpp.

{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
}

Member Data Documentation

int rlDataAcquisitionProvider::allow_add_values
private

Definition at line 76 of file rldataacquisitionprovider.h.

int rlDataAcquisitionProvider::current_item
private

Definition at line 76 of file rldataacquisitionprovider.h.

long rlDataAcquisitionProvider::sharedMemorySize
private

Definition at line 78 of file rldataacquisitionprovider.h.

rlSharedMemory* rlDataAcquisitionProvider::shm
private

Definition at line 77 of file rldataacquisitionprovider.h.

SHM_HEADER* rlDataAcquisitionProvider::shmheader
private

Definition at line 74 of file rldataacquisitionprovider.h.

char* rlDataAcquisitionProvider::shmvalues
private

Definition at line 75 of file rldataacquisitionprovider.h.


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