|
rllib
1
|
#include <rldataacquisitionprovider.h>

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_HEADER * | shmheader |
| char * | shmvalues |
| int | current_item |
| int | allow_add_values |
| rlSharedMemory * | shm |
| long | sharedMemorySize |
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.
Definition at line 44 of file rldataacquisitionprovider.h.
{
DAQ_PROVIDER_ERROR = 256*256*128
};
| 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->maxItemNameLength = 0;
shmheader->maxNameLength = maxNameLength;
shmheader->numItems = 0;
shmheader->readErrorCount = 0;
shmheader->writeErrorCount = 0;
sharedMemorySize = shared_memory_size;
strcpy(shmheader->ident, "daq");
allow_add_values = 0;
}
| rlDataAcquisitionProvider::~rlDataAcquisitionProvider | ( | ) | [virtual] |
Definition at line 37 of file rldataacquisitionprovider.cpp.
{
delete shm;
}
| const char * rlDataAcquisitionProvider::firstItem | ( | ) |
Definition at line 112 of file rldataacquisitionprovider.cpp.
{
int value_offset, delta_index;
const char *cptr;
current_item = 0;
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 == '-')
{
ret = DAQ_PROVIDER_ERROR;
sscanf(cptr,"%f",&ret);
return ret;
}
return DAQ_PROVIDER_ERROR;
}
| 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))
{
ret = DAQ_PROVIDER_ERROR;
sscanf(cptr,"%d",&ret);
return ret;
}
return DAQ_PROVIDER_ERROR;
}
| int rlDataAcquisitionProvider::lifeCounter | ( | ) |
Definition at line 280 of file rldataacquisitionprovider.cpp.
{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
return shmheader->lifeCounter;
}
| const char * rlDataAcquisitionProvider::nextItem | ( | ) |
Definition at line 129 of file rldataacquisitionprovider.cpp.
{
int value_offset, delta_index;
const char *cptr;
current_item++;
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;
return shmheader->readErrorCount;
}
| 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);
return DAQ_PROVIDER_ERROR;
}
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);
return DAQ_PROVIDER_ERROR;
}
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));
return DAQ_PROVIDER_ERROR;
}
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;
shmheader->lifeCounter = count;
return 0;
}
| int rlDataAcquisitionProvider::setReadErrorCount | ( | int | count | ) |
Definition at line 286 of file rldataacquisitionprovider.cpp.
{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
shmheader->readErrorCount = count;
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);
if(len > shmheader->maxNameLength) val[shmheader->maxNameLength] = '\0';
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)
{
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;
shmheader->numItems += 1;
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;
return DAQ_PROVIDER_ERROR;
}
| int rlDataAcquisitionProvider::setWriteErrorCount | ( | int | count | ) |
Definition at line 293 of file rldataacquisitionprovider.cpp.
{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
shmheader->writeErrorCount = count;
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;
return DAQ_PROVIDER_ERROR;
}
| 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;
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";
}
| int rlDataAcquisitionProvider::writeErrorCount | ( | ) |
Definition at line 274 of file rldataacquisitionprovider.cpp.
{
if(shmheader == NULL) return DAQ_PROVIDER_ERROR;
return shmheader->writeErrorCount;
}
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.
1.7.5.1