rllib  1
Public Types | Public Member Functions | Public Attributes | Private Attributes
rlPPIClient Class Reference

#include <rlppiclient.h>

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

List of all members.

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 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 Attributes

unsigned char buf [512]

Private Attributes

int have_to_swap

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.

Definition at line 60 of file rlppiclient.h.


The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines