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

#include <rlppiclient.h>

Inheritance diagram for rlPPIClient:
Inheritance graph
[legend]
Collaboration diagram for rlPPIClient:
Collaboration graph
[legend]

Public Types

enum  PPI_area {
  daveSD = 0x3, daveInputs = 0x81, daveOutputs = 0x82, daveFlags = 0x83,
  daveDB = 0x84, daveDI = 0x85, daveLocal = 0x86, daveV = 0x87,
  daveCounter = 28, daveTimer = 29
}
 
- Public Types inherited from rlMailbox
enum  MailboxEnum {
  MAILBOX_ERROR = -1, MAILBOX_FULL = -2, WAIT = 1, NOWAIT = 0,
  MAX_MAILBOX = 256*256, OK = 2, COULD_NOT_CREATE_MAILBOX = 3, COULD_NOT_GET_KEY = 4,
  COULD_NOT_GET_CHAN_ID = 5
}
 

Public Member Functions

 rlPPIClient (const char *mbxname, const char *shmname, int shmsize, int have_to_swap=1)
 
virtual ~rlPPIClient ()
 
int write (int slave, int area, int dbnum, int start, int len, const unsigned char *data)
 
int writeFloat (int slave, int area, int dbnum, int start, int len, const float *val)
 
int writeDword (int slave, int area, int dbnum, int start, int len, const int *val)
 
int writeShort (int slave, int area, int dbnum, int start, int len, const short *val)
 
int writeUDword (int slave, int area, int dbnum, int start, int len, const unsigned int *val)
 
int writeUShort (int slave, int area, int dbnum, int start, int len, const unsigned short *val)
 
int read (int offset, int len)
 
float Float (int index)
 
int Dword (int index)
 
int Short (int index)
 
unsigned int UDword (int index)
 
unsigned int UShort (int index)
 
- Public Member Functions inherited from rlMailbox
 rlMailbox (const char *name)
 
virtual ~rlMailbox ()
 
int write (const void *buf, int len)
 
int printf (const char *format,...)
 
int read (void *buf, int maxlen, int wait=WAIT)
 
int setReadBufferSize (int size)
 
const char * read (int wait=WAIT)
 
int write (const char *message)
 
void clear ()
 

Public Attributes

unsigned char buf [512]
 
- Public Attributes inherited from rlMailbox
int status
 
char * name
 

Private Attributes

int have_to_swap
 
- Private Attributes inherited from rlSharedMemory
int status
 
char * name
 

Additional Inherited Members

- Private Types inherited from rlSharedMemory
enum  SharedMemoryEnum {
  OK = 0, ERROR_FILE, ERROR_SHMGET, ERROR_SHMAT,
  ERROR_SHMCTL
}
 
- Private Member Functions inherited from rlSharedMemory
 rlSharedMemory (const char *name, unsigned long size, int rwmode=0600)
 
virtual ~rlSharedMemory ()
 
int deleteSharedMemory ()
 
int write (unsigned long offset, const void *buf, int len)
 
int read (unsigned long offset, void *buf, int len)
 
int readInt (unsigned long offset, int index)
 
int readShort (unsigned long offset, int index)
 
int readByte (unsigned long offset, int index)
 
float readFloat (unsigned long offset, int index)
 
int writeInt (unsigned long offset, int index, int val)
 
int writeShort (unsigned long offset, int index, int val)
 
int writeByte (unsigned long offset, int index, unsigned char val)
 
int writeFloat (unsigned long offset, int index, float val)
 
void * getUserAdr ()
 
int shmKey ()
 
int shmId ()
 

Detailed Description

This class is for data acquisition from pvserver according to the pvbrowser principle.
The according daemon is generated by pvdevelop.
It communicates by the means of a shared memory and a mailbox.

Definition at line 28 of file rlppiclient.h.

Member Enumeration Documentation

Enumerator:
daveSD 
daveInputs 
daveOutputs 
daveFlags 
daveDB 
daveDI 
daveLocal 
daveV 
daveCounter 
daveTimer 

Definition at line 31 of file rlppiclient.h.

{
daveSD = 0x3,
daveInputs = 0x81,
daveOutputs = 0x82,
daveFlags = 0x83,
daveDB = 0x84, //data blocks
daveDI = 0x85, //not tested
daveLocal = 0x86, //not tested
daveV = 0x87, // don't know what it is
daveCounter = 28, //not tested
daveTimer = 29 //not tested
};

Constructor & Destructor Documentation

rlPPIClient::rlPPIClient ( const char *  mbxname,
const char *  shmname,
int  shmsize,
int  have_to_swap = 1 
)

Definition at line 31 of file rlppiclient.cpp.

:rlMailbox(mbxname), rlSharedMemory(shmname, shmsize)
{
have_to_swap = _have_to_swap;
}
rlPPIClient::~rlPPIClient ( )
virtual

Definition at line 37 of file rlppiclient.cpp.

{
}

Member Function Documentation

int rlPPIClient::Dword ( int  index)

Definition at line 256 of file rlppiclient.cpp.

{
SWAP swap;
if(index*4+4 > (int) BUFSIZE) return 0;
if(have_to_swap == 1)
{
swap.b[0] = buf[4*index+3];
swap.b[1] = buf[4*index+2];
swap.b[2] = buf[4*index+1];
swap.b[3] = buf[4*index];
}
else
{
swap.b[0] = buf[4*index];
swap.b[1] = buf[4*index+1];
swap.b[2] = buf[4*index+2];
swap.b[3] = buf[4*index+3];
}
return swap.i;
}
float rlPPIClient::Float ( int  index)

Definition at line 235 of file rlppiclient.cpp.

{
SWAP swap;
if(index*4+4 > (int) BUFSIZE) return 0.0f;
if(have_to_swap == 1)
{
swap.b[0] = buf[4*index+3];
swap.b[1] = buf[4*index+2];
swap.b[2] = buf[4*index+1];
swap.b[3] = buf[4*index];
}
else
{
swap.b[0] = buf[4*index];
swap.b[1] = buf[4*index+1];
swap.b[2] = buf[4*index+2];
swap.b[3] = buf[4*index+3];
}
return swap.f;
}
int rlPPIClient::read ( int  offset,
int  len 
)

Definition at line 230 of file rlppiclient.cpp.

{
return rlSharedMemory::read(offset,buf,len);
}
int rlPPIClient::Short ( int  index)

Definition at line 277 of file rlppiclient.cpp.

{
SWAP swap;
if(index*2+2 > (int) BUFSIZE) return 0;
if(have_to_swap == 1)
{
swap.b[0] = buf[2*index+1];
swap.b[1] = buf[2*index];
}
else
{
swap.b[0] = buf[4*index];
swap.b[1] = buf[4*index+1];
}
return swap.s[0];
}
unsigned int rlPPIClient::UDword ( int  index)

Definition at line 294 of file rlppiclient.cpp.

{
SWAP swap;
if(index*4+4 > (int) BUFSIZE) return 0;
if(have_to_swap == 1)
{
swap.b[0] = buf[4*index+3];
swap.b[1] = buf[4*index+2];
swap.b[2] = buf[4*index+1];
swap.b[3] = buf[4*index];
}
else
{
swap.b[0] = buf[4*index];
swap.b[1] = buf[4*index+1];
swap.b[2] = buf[4*index+2];
swap.b[3] = buf[4*index+3];
}
return swap.ui;
}
unsigned int rlPPIClient::UShort ( int  index)

Definition at line 315 of file rlppiclient.cpp.

{
SWAP swap;
if(index*2+4 > (int) BUFSIZE) return 0;
if(have_to_swap == 1)
{
swap.b[0] = buf[2*index+1];
swap.b[1] = buf[2*index];
}
else
{
swap.b[0] = buf[4*index];
swap.b[1] = buf[4*index+1];
}
return swap.us[0];
}
int rlPPIClient::write ( int  slave,
int  area,
int  dbnum,
int  start,
int  len,
const unsigned char *  data 
)

Definition at line 41 of file rlppiclient.cpp.

{
unsigned char buf[BUFSIZE+8];
if(len < 0) return -1;
if(len > BUFSIZE) return -1;
if(slave < 0) return -1;
if(slave > 31) return -1;
buf[0] = slave;
buf[1] = area;
buf[2] = dbnum / 256;
buf[3] = dbnum & 0x0ff;
buf[4] = start / 256;
buf[5] = start & 0x0ff;
buf[6] = len / 256;
buf[7] = len & 0x0ff;
memcpy(&buf[8],data,len);
rlMailbox::write((void *) buf,len+8);
return 0;
}
int rlPPIClient::writeDword ( int  slave,
int  area,
int  dbnum,
int  start,
int  len,
const int *  val 
)

Definition at line 98 of file rlppiclient.cpp.

{
SWAP swap;
int i;
unsigned char buf[BUFSIZE];
if(len < 0) return -1;
if(len > BUFSIZE) return -1;
if(slave < 0) return -1;
if(slave > 31) return -1;
if(have_to_swap == 1)
{
for(i=0; i<len; i+=4)
{
swap.i = val[i/4];
buf[i+3] = swap.b[0];
buf[i+2] = swap.b[1];
buf[i+1] = swap.b[2];
buf[i] = swap.b[3];
}
}
else
{
for(i=0; i<len; i+=4)
{
swap.i = val[i/4];
buf[i] = swap.b[0];
buf[i+1] = swap.b[1];
buf[i+2] = swap.b[2];
buf[i+3] = swap.b[3];
}
}
return write(slave,area,dbnum,start,len,buf);
}
int rlPPIClient::writeFloat ( int  slave,
int  area,
int  dbnum,
int  start,
int  len,
const float *  val 
)

Definition at line 63 of file rlppiclient.cpp.

{
SWAP swap;
int i;
unsigned char buf[BUFSIZE];
if(len < 0) return -1;
if(len > BUFSIZE) return -1;
if(slave < 0) return -1;
if(slave > 31) return -1;
if(have_to_swap == 1)
{
for(i=0; i<len; i+=4)
{
swap.f = val[i/4];
buf[i+3] = swap.b[0];
buf[i+2] = swap.b[1];
buf[i+1] = swap.b[2];
buf[i] = swap.b[3];
}
}
else
{
for(i=0; i<len; i+=4)
{
swap.f = val[i/4];
buf[i] = swap.b[0];
buf[i+1] = swap.b[1];
buf[i+2] = swap.b[2];
buf[i+3] = swap.b[3];
}
}
return write(slave,area,dbnum,start,len,buf);
}
int rlPPIClient::writeShort ( int  slave,
int  area,
int  dbnum,
int  start,
int  len,
const short *  val 
)

Definition at line 133 of file rlppiclient.cpp.

{
SWAP swap;
int i;
unsigned char buf[BUFSIZE];
if(len < 0) return -1;
if(len > BUFSIZE) return -1;
if(slave < 0) return -1;
if(slave > 31) return -1;
if(have_to_swap == 1)
{
for(i=0; i<len; i+=2)
{
swap.s[0] = val[i/2];
buf[i+1] = swap.b[0];
buf[i] = swap.b[1];
}
}
else
{
for(i=0; i<len; i+=2)
{
swap.s[0] = val[i/2];
buf[i] = swap.b[0];
buf[i+1] = swap.b[1];
}
}
return write(slave,area,dbnum,start,len,buf);
}
int rlPPIClient::writeUDword ( int  slave,
int  area,
int  dbnum,
int  start,
int  len,
const unsigned int *  val 
)

Definition at line 164 of file rlppiclient.cpp.

{
SWAP swap;
int i;
unsigned char buf[BUFSIZE];
if(len < 0) return -1;
if(len > BUFSIZE) return -1;
if(slave < 0) return -1;
if(slave > 31) return -1;
if(have_to_swap == 1)
{
for(i=0; i<len; i+=4)
{
swap.ui = val[i/4];
buf[i+3] = swap.b[0];
buf[i+2] = swap.b[1];
buf[i+1] = swap.b[2];
buf[i] = swap.b[3];
}
}
else
{
for(i=0; i<len; i+=4)
{
swap.ui = val[i/4];
buf[i] = swap.b[0];
buf[i+1] = swap.b[1];
buf[i+2] = swap.b[2];
buf[i+3] = swap.b[3];
}
}
return write(slave,area,dbnum,start,len,buf);
}
int rlPPIClient::writeUShort ( int  slave,
int  area,
int  dbnum,
int  start,
int  len,
const unsigned short *  val 
)

Definition at line 199 of file rlppiclient.cpp.

{
SWAP swap;
int i;
unsigned char buf[BUFSIZE];
if(len < 0) return -1;
if(len > BUFSIZE) return -1;
if(slave < 0) return -1;
if(slave > 31) return -1;
if(have_to_swap == 1)
{
for(i=0; i<len; i+=2)
{
swap.us[0] = val[i/2];
buf[i+1] = swap.b[0];
buf[i] = swap.b[1];
}
}
else
{
for(i=0; i<len; i+=2)
{
swap.us[0] = val[i/2];
buf[i] = swap.b[0];
buf[i+1] = swap.b[1];
}
}
return write(slave,area,dbnum,start,len,buf);
}

Member Data Documentation

unsigned char rlPPIClient::buf[512]

Definition at line 58 of file rlppiclient.h.

int rlPPIClient::have_to_swap
private

Definition at line 60 of file rlppiclient.h.


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