rlHilscherCIF Class Reference

#include <rlhilschercif.h>

Collaboration diagram for rlHilscherCIF:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 rlHilscherCIF ()
virtual ~rlHilscherCIF ()
int open ()
int close ()
int devGetMessage (int timeout)
int devPutMessage (int timeout)
int devExchangeIO (int sendOffset, int sendSize, unsigned char *sendData, int receiveOffset, int receiveSize, unsigned char *receiveData, int timeout)
int devOpenDriver ()
int devInitBoard ()
int devGetInfo (int info)
int devSetHostState (int mode)
int devPutTaskParameter ()
int devReset ()
int devExitBoard ()
int devCloseDriver ()
void printFirmwareInfo ()

Public Attributes

int debug
unsigned short usBoardNumber
unsigned short usDevState
unsigned short usHostState
unsigned char abInfo [300]
ASC_PARAMETER aParameter
IOINFO tIoInfo
RCS_MESSAGETELEGRAM_10 tMessage
rlMutex mutex

Private Attributes

int isOpen

Detailed Description

This class is for data access to Hilscher CIF cards
like PROFIBUS ...
It uses the driver provided by Hilscher and has access to it's dual ported RAM.
Attention: In order to use this class on Linux as normal user you have to set
chmod ugoa+rw /dev/cif

Definition at line 38 of file rlhilschercif.h.


Constructor & Destructor Documentation

rlHilscherCIF::rlHilscherCIF (  ) 

Definition at line 24 of file rlhilschercif.cpp.

00025 {
00026   debug = 0;
00027   isOpen = 0;
00028   usBoardNumber = 0; // Board number, 0-3
00029 
00030   // Fill in protokoll parameters
00031   aParameter.bScl               =    1; /* Interface number                     */
00032   aParameter.bRtsControl        =    0; /* Bus handling                         */
00033   aParameter.bBaudrate          =   10; /* Baud rate                            */
00034   aParameter.bDataBits          =    8; /* Number of data bits                  */
00035   aParameter.bStopBits          =    1; /* Number of stop bits                  */
00036   aParameter.bParityBit         =    1; /* Parity                               */
00037   aParameter.bMode              =    1; /* Interface mode                       */
00038   aParameter.bEndMode           =    0; /* Stop mod                             */
00039   aParameter.bCheckMode         =    0; /* Checksum mode                        */
00040   aParameter.bCheckArea         =    0; /* Checksum area                        */
00041   aParameter.bFilterMode        =    0; /* Character filter mode                */
00042   aParameter.usFilterCharacter  =    0; /* Characters                           */
00043   aParameter.usTelTimeout       = 1000; /* Telegram timeout                     */
00044   aParameter.usStartTimeout     =    0; /* Start timeout                        */
00045   aParameter.usCharTimeout      =    0; /* Character timeout                    */
00046   aParameter.bRetries           =    0; /* Retray number                        */
00047   aParameter.bErrorLed          =    1; /* Error LED                            */
00048   aParameter.bTelStartLen       =    0; /* Length of telegram start             */
00049   aParameter.bTelStart[0]       =    0; /* Telegram beginning                   */
00050   aParameter.bTelEndLen         =    0; /* Length of telegram end               */
00051   aParameter.bTelEnd[0]         =    0; /* Telegram end                         */
00052   aParameter.bTelAckLen         =    0; /* Length  of ACK telegram              */
00053   aParameter.bTelAck[0]         =    0; /* ACK telegramm                        */
00054   aParameter.bTelNackLen        =    0; /* Length of NAK telegram               */
00055   aParameter.bTelNack[0]        =    0; /* NAK telegram                         */
00056   aParameter.bTelDeviceLen      =    0; /* Length of the device telegram        */
00057 
00058   tMessage.rx = 0x0ff;
00059 }

rlHilscherCIF::~rlHilscherCIF (  )  [virtual]

Definition at line 61 of file rlhilschercif.cpp.

00062 {
00063   if(isOpen) close();
00064 }


Member Function Documentation

int rlHilscherCIF::close (  ) 

Definition at line 81 of file rlhilschercif.cpp.

00082 {
00083   int ret;
00084   isOpen = 0;
00085   if((ret = devSetHostState(HOST_NOT_READY)) != DRV_NO_ERROR) return ret;
00086   ret     = devCloseDriver();
00087   return ret;
00088 }

int rlHilscherCIF::devCloseDriver (  ) 

Definition at line 198 of file rlhilschercif.cpp.

00199 {
00200   isOpen = 0;
00201 #ifdef RLUNIX
00202   int ret = DevCloseDriver();
00203 #else
00204   int ret = DevCloseDriver(usBoardNumber);
00205 #endif
00206   if(debug) printf( "DevCloseDriver ret=%d\n", ret);
00207   return ret;
00208 }

int rlHilscherCIF::devExchangeIO ( int  sendOffset,
int  sendSize,
unsigned char *  sendData,
int  receiveOffset,
int  receiveSize,
unsigned char *  receiveData,
int  timeout 
)

Definition at line 260 of file rlhilschercif.cpp.

00263 {
00264   if(isOpen == 0)
00265   {
00266     printf("rlHilscherCIF::devExchangeIO ERROR device is not open\n");
00267     return -1;
00268   }
00269   // Run ExchangeIO
00270   int ret = DevExchangeIO(usBoardNumber,
00271                           (unsigned short) sendOffset,
00272                           (unsigned short) sendSize,
00273                           sendData,
00274                           (unsigned short) receiveOffset,
00275                           (unsigned short) receiveSize,
00276                           receiveData,
00277                           timeout);
00278   if(ret != DRV_NO_ERROR)
00279   {
00280     if(debug) printf("DevExchangeIO ret=%d timeout\n", ret);
00281   }
00282   else
00283   {
00284     // Data exchange is done, print some information
00285     if(debug && sendSize >= 4 && receiveSize >= 4)
00286     {
00287       printf("  ExchangeIO data:\n"
00288              "  Send data:                  Receive data\n");
00289       printf("  byte 0 : %d                 byte 0 : %d\n", sendData[0],receiveData[0]);
00290       printf("  byte 1 : %d                 byte 1 : %d\n", sendData[1],receiveData[1]);
00291       printf("  byte 2 : %d                 byte 2 : %d\n", sendData[2],receiveData[2]);
00292       printf("  byte 3 : %d                 byte 3 : %d\n", sendData[3],receiveData[3]);
00293     }
00294   }
00295   return ret;
00296 }

int rlHilscherCIF::devExitBoard (  ) 

Definition at line 191 of file rlhilschercif.cpp.

00192 {
00193   int ret = DevExitBoard(usBoardNumber);
00194   if(debug) printf("DevExitBoard ret=%d \n", ret);
00195   return ret;
00196 }

int rlHilscherCIF::devGetInfo ( int  info  ) 

Definition at line 113 of file rlhilschercif.cpp.

00114 {
00115   if(info == GET_FIRMWARE_INFO)
00116   {
00117     int ret = DevGetInfo(usBoardNumber,
00118                          GET_FIRMWARE_INFO,
00119                          sizeof(FIRMWAREINFO),
00120                          &abInfo[0]);
00121     if(debug) printf("DevGetInfo(GET_FIRMWARE_INFO) ret=%d\n", ret);
00122     return ret;
00123   }
00124   if(info == GET_IO_INFO)
00125   {
00126     // Read the mode of the IO-Communication, 0 = MODE UNKNOWN
00127     int ret = DevGetInfo(usBoardNumber,  // DeviceNumber
00128                          GET_IO_INFO,    // InfoArea
00129                          sizeof(IOINFO), // Size of bytes to read
00130                          &tIoInfo);      // Pointer to user buffer
00131 
00132     if(debug)
00133     {
00134       printf("DevGetInfo (IOINFO) ret=%d \n", ret);
00135       printf("ExchangeIO information\n"
00136              "  IO-Communication mode : %d\n"
00137              "  IO-COM bit            : %d\n"
00138              "  IO-Count              : %ld\n",
00139              tIoInfo.bIOExchangeMode, tIoInfo.bComBit, tIoInfo.ulIOExchangeCnt);
00140       if(tIoInfo.bIOExchangeMode == 0)
00141       {
00142         printf( "  --- IO-Communication NOT AVAILABLE ---\n");
00143       }
00144       else
00145       {
00146         printf( "  --- IO-Communication AVAILABLE ---\n");
00147         // Test if IO-Communication is running
00148         if(tIoInfo.bComBit == 0)
00149         {
00150           printf("  IO-Communication is not running, so all function\n"
00151                  "  returning an error !\n");
00152         }
00153       }
00154     }
00155     return ret;
00156   }
00157   printf("rlHilscherCIF::devGetInfo() unknown info\n");
00158   return -1;
00159 }

int rlHilscherCIF::devGetMessage ( int  timeout  ) 

Definition at line 210 of file rlhilschercif.cpp.

00211 {
00212   if(isOpen == 0)
00213   {
00214     printf("rlHilscherCIF::devGetMessage ERROR device is not open\n");
00215     return -1;
00216   }
00217   if(tMessage.rx == 0x0ff)
00218   {
00219     printf("rlHilscherCIF::devGetMessage() ERROR you have to set tMessage first\n");
00220     return -1;
00221   }
00222   if(debug) printf("rlHilscherCIF::devGetMessage() timeout=%d", timeout);
00223   int ret = DevGetMessage(usBoardNumber,            // Device Number
00224                           sizeof(tMessage),         // Users buffer size
00225                           (MSG_STRUC *)&tMessage,   // Pointer to user buffer
00226                           (long) timeout);          // Timeout
00227   if(debug) printf("DevGetMessage ret=%d\n", ret);
00228   if(ret == DRV_NO_ERROR)
00229   {
00230     // Message available
00231     if(debug) printf( "  RX: 0x%02X, TX: 0x%02X, LN: 0x%02X, NR: 0x%02X\n",
00232               tMessage.rx,
00233               tMessage.tx,
00234               tMessage.ln,
00235               tMessage.nr);
00236     if(debug) printf( "  A:  0x%02X, F:  0x%02X, B:  0x%02X, E:  0x%02X\n",
00237               tMessage.a,
00238               tMessage.f,
00239               tMessage.b,
00240               tMessage.e);
00241   }
00242   return ret;
00243 }

int rlHilscherCIF::devInitBoard (  ) 

Definition at line 102 of file rlhilschercif.cpp.

00103 {
00104 #ifdef RLUNIX
00105   int ret = DevInitBoard(usBoardNumber);
00106 #else
00107   int ret = DevInitBoard(usBoardNumber,NULL);
00108 #endif
00109   if(debug) printf("DevInitBoard ret=%d\n",ret);
00110   return ret;
00111 }

int rlHilscherCIF::devOpenDriver (  ) 

Definition at line 90 of file rlhilschercif.cpp.

00091 {
00092   isOpen = 1;
00093 #ifdef RLUNIX
00094   int ret = DevOpenDriver();
00095 #else
00096   int ret = DevOpenDriver(usBoardNumber);
00097 #endif
00098   if(debug) printf("DevOpenDriver ret=%d\n",ret);
00099   return ret;
00100 }

int rlHilscherCIF::devPutMessage ( int  timeout  ) 

Definition at line 245 of file rlhilschercif.cpp.

00246 {
00247   if(isOpen == 0)
00248   {
00249     printf("rlHilscherCIF::devPutMessage ERROR device is not open\n");
00250     return -1;
00251   }
00252   if(debug) printf("rlHilscherCIF::devPutMessage() timeout=%d", timeout);
00253   int ret = DevPutMessage(usBoardNumber,            // Device Number
00254                           (MSG_STRUC *)&tMessage,   // Pointer to user buffer
00255                           timeout);                 // Timeout
00256   if(debug) printf("DevPutMessage ret=%d\n", ret);
00257   return ret;
00258 }

int rlHilscherCIF::devPutTaskParameter (  ) 

Definition at line 170 of file rlhilschercif.cpp.

00171 {
00172   // Write parameters to communication board
00173   int ret = DevPutTaskParameter(usBoardNumber,        // Device number
00174                                 1,                    // Protokoll task number
00175                                 sizeof(aParameter),   // Lenght of bytes
00176                                 &aParameter );        // Pointer to data  buffer
00177   if(debug) printf("DevPutTaskParameter ret=%d (Interface number 1)\n", ret);
00178   return ret;
00179 }

int rlHilscherCIF::devReset (  ) 

Definition at line 181 of file rlhilschercif.cpp.

00182 {
00183   // Reset board so it can take the parameters
00184   int ret = DevReset((unsigned char)  usBoardNumber, // Device number
00185                      (unsigned short) WARMSTART,     // Reset mode, Warmstar
00186                      (unsigned long)  8000L);        // Timeout  8000 ms
00187   if(debug) printf("DevResetBoard ret=%d\n", ret);
00188   return ret;
00189 }

int rlHilscherCIF::devSetHostState ( int  mode  ) 

Definition at line 161 of file rlhilschercif.cpp.

00162 {
00163   int ret = DevSetHostState(usBoardNumber,
00164                             mode,
00165                             0L);
00166   if(debug) printf("DevSetHostState mode=%d ret=%d\n", mode, ret);
00167   return ret;
00168 }

int rlHilscherCIF::open (  ) 

Definition at line 66 of file rlhilschercif.cpp.

00067 {
00068   int ret;
00069   isOpen = 1;
00070   if((ret = devOpenDriver())               != DRV_NO_ERROR) return ret;
00071   if((ret = devInitBoard())                != DRV_NO_ERROR) return ret;
00072   if((ret = devGetInfo(GET_FIRMWARE_INFO)) != DRV_NO_ERROR) return ret;
00073   if((ret = devSetHostState(HOST_READY))   != DRV_NO_ERROR) return ret;
00074   if(debug) printFirmwareInfo();
00075   devPutTaskParameter();
00076   devReset();
00077   if(debug) printf("cif.open() success\n");
00078   return ret;
00079 }

void rlHilscherCIF::printFirmwareInfo (  ) 

Definition at line 298 of file rlhilschercif.cpp.

00299 {
00300   unsigned char   abTemp[30]; // Temporary buffer
00301   memcpy(&abTemp, &abInfo[0], 16);
00302   abTemp[16] = 0;
00303   printf("FirmwareName:     %s\n",&abTemp[0]);
00304   memcpy(&abTemp, &abInfo[16], 16);
00305   abTemp[16] = 0;
00306   printf("FirmwareVersion:  %s\n",&abTemp[0]);
00307 }


Member Data Documentation

unsigned char rlHilscherCIF::abInfo[300]

Definition at line 66 of file rlhilschercif.h.

Definition at line 67 of file rlhilschercif.h.

Definition at line 43 of file rlhilschercif.h.

int rlHilscherCIF::isOpen [private]

Definition at line 74 of file rlhilschercif.h.

Definition at line 71 of file rlhilschercif.h.

Definition at line 68 of file rlhilschercif.h.

RCS_MESSAGETELEGRAM_10 rlHilscherCIF::tMessage

Definition at line 69 of file rlhilschercif.h.

Definition at line 64 of file rlhilschercif.h.

unsigned short rlHilscherCIF::usDevState

Definition at line 65 of file rlhilschercif.h.

Definition at line 65 of file rlhilschercif.h.


The documentation for this class was generated from the following files:
Generated on Mon Aug 30 20:16:16 2010 for rllib by  doxygen 1.6.3