#include <rldataacquisition.h>

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_HEADER * | shmheader |
| const char * | shmvalues |
| rlMailbox * | mbx |
| rlSharedMemory * | shm |
| int | iCurrent |
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.
Definition at line 44 of file rldataacquisition.h.
00045 { 00046 DAQ_ERROR = 256*256*128 00047 };
| 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.
| const char * rlDataAcquisition::firstVariable | ( | ) |
| 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.
| 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.
| int rlDataAcquisition::writeIntValue | ( | const char * | variable, | |
| int | value | |||
| ) |
Definition at line 96 of file rldataacquisition.cpp.
| int rlDataAcquisition::writeStringValue | ( | const char * | variable, | |
| const char * | value | |||
| ) |
Definition at line 90 of file rldataacquisition.cpp.
int rlDataAcquisition::iCurrent [private] |
Definition at line 72 of file rldataacquisition.h.
rlMailbox* rlDataAcquisition::mbx [private] |
Definition at line 70 of file rldataacquisition.h.
rlSharedMemory* rlDataAcquisition::shm [private] |
Definition at line 71 of file rldataacquisition.h.
SHM_HEADER* rlDataAcquisition::shmheader [private] |
Definition at line 68 of file rldataacquisition.h.
const char* rlDataAcquisition::shmvalues [private] |
Definition at line 69 of file rldataacquisition.h.
1.6.3