rllib  1
rlhilschercif.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002                       rlhilschercif.cpp  -  description
00003                              -------------------
00004     begin                : Tue Feb 13 2007
00005     copyright            : (C) 2007 by Rainer Lehrig
00006     email                : lehrig@t-online.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as        *
00013  *   published by the Free Software Foundation                             *
00014  *                                                                         *
00015  ***************************************************************************/
00016 #include "rlhilschercif.h"
00017 #include <stdio.h>
00018 
00019 // On Windows add *dll.lib to Makefile
00020 #ifdef RLUNIX
00021 #include "cif_api.c"
00022 #endif
00023 
00024 rlHilscherCIF::rlHilscherCIF()
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 }
00060 
00061 rlHilscherCIF::~rlHilscherCIF()
00062 {
00063   if(isOpen) close();
00064 }
00065 
00066 int rlHilscherCIF::open()
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 }
00080 
00081 int rlHilscherCIF::close()
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 }
00089 
00090 int rlHilscherCIF::devOpenDriver()
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 }
00101 
00102 int rlHilscherCIF::devInitBoard()
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 }
00112 
00113 int rlHilscherCIF::devGetInfo(int info)
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 }
00160 
00161 int rlHilscherCIF::devSetHostState(int mode)
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 }
00169 
00170 int rlHilscherCIF::devPutTaskParameter()
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 }
00180 
00181 int rlHilscherCIF::devReset()
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 }
00190 
00191 int rlHilscherCIF::devExitBoard()
00192 {
00193   int ret = DevExitBoard(usBoardNumber);
00194   if(debug) printf("DevExitBoard ret=%d \n", ret);
00195   return ret;
00196 }
00197 
00198 int rlHilscherCIF::devCloseDriver()
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 }
00209 
00210 int rlHilscherCIF::devGetMessage(int timeout)
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 }
00244 
00245 int rlHilscherCIF::devPutMessage(int timeout)
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 }
00259 
00260 int rlHilscherCIF::devExchangeIO(int sendOffset, int sendSize, unsigned char *sendData,
00261                                  int receiveOffset, int receiveSize, unsigned char *receiveData,
00262                                  int timeout)
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 }
00297 
00298 void rlHilscherCIF::printFirmwareInfo()
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 }
00308 
00309 //#define TESTING
00310 #ifdef TESTING
00311 int main()
00312 {
00313   rlHilscherCIF cif;
00314   int c = 0;
00315   int i = 0;
00316   unsigned char sendData[512];
00317   unsigned char receiveData[512];
00318 
00319   cif.debug = 1;
00320   if(cif.open() != DRV_NO_ERROR) return -1;
00321 
00322   while(c != 'x')
00323   {
00324     printf("hit RETURN 'x'=end ");
00325     c = getchar();
00326 
00327     // Write test data to Send buffer
00328     sendData[0] = (unsigned char) i++;
00329     sendData[1] = 0xFF;
00330     sendData[2] = 2;
00331     sendData[3] = 3;
00332     cif.devExchangeIO(0,4,sendData,
00333                       0,4,receiveData,
00334                       1000);
00335     if(i >= 256) i = 0;
00336   }
00337   return 0;
00338 }
00339 
00340 int xmain( void )
00341 {
00342   unsigned short  usBoardNumber = 0;          /* Board number, 0-3 */
00343   unsigned short  usDevState, usHostState;
00344 
00345   unsigned char   abTemp[30];                 /* Temporary buffer */
00346   unsigned char   abInfo[300];                /* Buffer for various information */
00347   short           sRet;                       /* Return value */
00348 
00349   /* Protocol parameter definition */
00350   ASC_PARAMETER   aParameter;         /* Parameters for ASCII protocolls */
00351 
00352   /* Information structure */
00353   IOINFO          tIoInfo;            /* IO information structure */
00354 
00355   /* Data structure for message based communication */
00356   RCS_MESSAGETELEGRAM_10  tMessage;
00357 
00358   /* Data areas for IO based communication */
00359   unsigned char   tIOSendData[512];   /* Buffer for send data */
00360   unsigned char   tIORecvData[512];   /* Buffer for receive data */
00361 
00362 
00363   printf( "HILSCHER GmbH - Communication test program \n\n");
00364   
00365   printf( "\n*** Open communication driver ***\n");
00366   printf(   "*** Board number: %d           ***\n\n", usBoardNumber);
00367   
00368   /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00369   /* Open the driver */
00370   if ( (sRet = DevOpenDriver()) != DRV_NO_ERROR) {
00371     printf( "DevOpenDriver       RetWert = %5d \n", sRet );
00372 
00373   /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00374   /* Initialize board */
00375   } else if ( (sRet = DevInitBoard ( usBoardNumber)) != DRV_NO_ERROR) {
00376     printf( "DevInitBoard        RetWert = %5d \n", sRet );
00377 
00378   /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00379   /* Read Firmware information field */
00380   } else if ( (sRet = DevGetInfo( usBoardNumber,                    /* DeviceNumber        */
00381                                   GET_FIRMWARE_INFO,                /* InfoArea            */
00382                                   sizeof(FIRMWAREINFO),             /* Size of bytes to read */
00383                                   &abInfo[0])) != DRV_NO_ERROR ) {  /* Pointer to user buffer */
00384 
00385     printf( "DevGetInfo (GET_FIRMWARE_INFO) RetWert = %5d \n", sRet );
00386     
00387   /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00388   /* Signal board, application is running */
00389   } else if ( (sRet = DevSetHostState( usBoardNumber,               /* DeviceNumber        */
00390                                        HOST_READY,                  /* Mode                */
00391                                        0L)) != DRV_NO_ERROR ) {     /* Pointer to user buffer */
00392     
00393     printf( "DevSetHostState (HOST_READY) RetWert = %5d \n", sRet );
00394 
00395   } else {
00396 
00397     /* Print firmware information */
00398     memcpy ( &abTemp, &abInfo[0], 16);
00399     abTemp[16] = 0;
00400     printf( "  FirmwareName:     %s\n", &abTemp[0] );
00401     memcpy ( &abTemp, &abInfo[16], 16);
00402     abTemp[16] = 0;
00403     printf( "  FirmwareVersion:  %s\n", &abTemp[0]);
00404     printf( "\n\n" );
00405 
00406     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00407     /* Read mailbox information */
00408     if ( (sRet = DevGetMBXState( usBoardNumber,                     /* DeviceNumber        */
00409                                  &usDevState,                       /* Buffer for device state */
00410                                  &usHostState)) != DRV_NO_ERROR )  {/* Buffer for host state */
00411       // function error
00412       printf( "DevGetMBXState          RetWert = %5d\n", sRet );
00413       
00414     } else {
00415 
00416       // show actual state
00417       printf( "DevGetMBXState device MBX state = %5d       (0=empty, 1=full)\n", usDevState);
00418       printf( "DevGetMBXState host   MBX state = %5d       (0=empty, 1=full)\n", usHostState);
00419 
00420     }
00421 
00422 
00423     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00424     /* Fill in protokoll parameters */
00425 
00426     aParameter.bScl               =    1; /* Interface number                     */
00427     aParameter.bRtsControl        =    0; /* Bus handling                         */
00428     aParameter.bBaudrate          =   10; /* Baud rate                            */
00429     aParameter.bDataBits          =    8; /* Number of data bits                  */
00430     aParameter.bStopBits          =    1; /* Number of stop bits                  */
00431     aParameter.bParityBit         =    1; /* Parity                               */
00432     aParameter.bMode              =    1; /* Interface mode                       */
00433     aParameter.bEndMode           =    0; /* Stop mod                             */
00434     aParameter.bCheckMode         =    0; /* Checksum mode                        */
00435     aParameter.bCheckArea         =    0; /* Checksum area                        */
00436     aParameter.bFilterMode        =    0; /* Character filter mode                */
00437     aParameter.usFilterCharacter  =    0; /* Characters                           */
00438     aParameter.usTelTimeout       = 1000; /* Telegram timeout                     */
00439     aParameter.usStartTimeout     =    0; /* Start timeout                        */
00440     aParameter.usCharTimeout      =    0; /* Character timeout                    */
00441     aParameter.bRetries           =    0; /* Retray number                        */
00442     aParameter.bErrorLed          =    1; /* Error LED                            */
00443     aParameter.bTelStartLen       =    0; /* Length of telegram start             */
00444     aParameter.bTelStart[0]       =    0; /* Telegram beginning                   */
00445     aParameter.bTelEndLen         =    0; /* Length of telegram end               */
00446     aParameter.bTelEnd[0]         =    0; /* Telegram end                         */
00447     aParameter.bTelAckLen         =    0; /* Length  of ACK telegram              */
00448     aParameter.bTelAck[0]         =    0; /* ACK telegramm                        */
00449     aParameter.bTelNackLen        =    0; /* Length of NAK telegram               */
00450     aParameter.bTelNack[0]        =    0; /* NAK telegram                         */
00451     aParameter.bTelDeviceLen      =    0; /* Length of the device telegram        */
00452 
00453     /* Write parameters to communication board */
00454     sRet = DevPutTaskParameter( usBoardNumber,        /* Device number             */
00455                                 1,                    /* Protokoll task number     */
00456                                 sizeof(aParameter),   /* Lenght of bytes           */
00457                                 &aParameter );        /* Pointer to data  buffer   */
00458     printf( "DevPutTaskParameter     RetWert = %5d       (Interface number 1)\n", sRet );
00459 
00460     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00461     /* Reset board so it can take the parameters */
00462 
00463     sRet = DevReset( (unsigned char)  usBoardNumber, /* Device number          */
00464                      (unsigned short) WARMSTART,     /* Reset mode, Warmstart  */
00465                      (unsigned long)  8000L);        /* Timeout  8000 ms       */
00466     printf( "DevResetBoard           RetWert = %5d \n", sRet );
00467 
00468     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00469     /* Wait for user response */
00470     printf( "\nPress RETURN to continue .... \n");
00471     getchar();                                         
00472                                                                                    
00473     /* ========================================================================= */
00474     /* Test Message transfer                                                     */                                                                                   
00475     /* ========================================================================= */
00476     
00477     printf( "\n*** Test for message transfer ***\n\n");
00478     
00479     /* Tray to read a message */
00480     printf( "  DevGetMessage       Wait for a maximum of %ld ms\n", 5000L );
00481 
00482     sRet = DevGetMessage (  usBoardNumber,            /* Device Number             */
00483                             sizeof(tMessage),         /* Users buffer size         */
00484                             (MSG_STRUC *)&tMessage,   /* Pointer to user buffer    */
00485                             5000L );                  /* Timeout                   */
00486     printf( "  DevGetMessage       RetWert = %5d \n", sRet );
00487 
00488 
00489     /*===========================================================================*/
00490     /* Test message transfer                                                     */
00491     /*===========================================================================*/
00492     /* Build a message */
00493     tMessage.rx         = 0x01;
00494     tMessage.tx         = 0x10;
00495     tMessage.ln         =   12;
00496     tMessage.nr         =    1;
00497     tMessage.a          =    0;
00498     tMessage.f          =    0;
00499     tMessage.b          =   17;
00500     tMessage.e          = 0x00;
00501     tMessage.device_adr =    0;
00502     tMessage.data_area  =    0;
00503     tMessage.data_adr   =    0;
00504     tMessage.data_idx   =    0;
00505     tMessage.data_cnt   =    4;
00506     tMessage.data_type  =   10;
00507     tMessage.function   =    2;
00508     tMessage.d[0]       =    1;   /* Some user data */
00509     tMessage.d[1]       =    2;   /* Some user data */
00510     tMessage.d[2]       =    3;   /* Some user data */
00511     tMessage.d[3]       =    4;   /* Some user data */
00512 
00513     sRet = DevPutMessage (  usBoardNumber,            /* Device Number             */
00514                             (MSG_STRUC *)&tMessage,   /* Pointer to user buffer    */
00515                             5000L );                  /* Timeout                   */
00516     printf( "  DevPutMessage       RetWert = %5d \n", sRet );
00517 
00518 
00519     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00520     /* Wait for user response */
00521     printf( "\nPress RETURN to continue .... \n");
00522     getchar();
00523 
00524     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00525     /* Tray to read a message */
00526     printf( "  DevGetMessage       Wait for a maximum of %ld ms\n", 20000L );
00527     
00528     sRet = DevGetMessage (  0,                        /* Device Number             */
00529                             sizeof(tMessage),         /* Users buffer size         */
00530                             (MSG_STRUC *)&tMessage,   /* Pointer to user buffer    */
00531                             20000L );                 /* Timeout                   */
00532     printf( "  DevGetMessage       RetWert = %5d \n", sRet );
00533 
00534     if ( sRet == DRV_NO_ERROR) {
00535       /* Message available */
00536       printf( "  RX: 0x%02X, TX: 0x%02X, LN: 0x%02X, NR: 0x%02X \n",
00537               tMessage.rx,
00538               tMessage.tx,
00539               tMessage.ln,
00540               tMessage.nr          );
00541       printf( "  A:  0x%02X, F:  0x%02X, B:  0x%02X, E:  0x%02X \n",
00542               tMessage.a,
00543               tMessage.f,
00544               tMessage.b,
00545               tMessage.e           );
00546     } /* endif */
00547 
00548 
00549     /* ========================================================================= */
00550     /* Test for ExchangeIO                                                       */
00551     /* ========================================================================= */
00552 
00553     /* ========================================================================= */
00554     /* Test for ExchangeIO                                                       */
00555     /* ========================================================================= */
00556     /* Test if IO-Communication is available */
00557                                          
00558     printf( "\n\n*** Test for ExchangeIO functions ***\n\n");
00559     
00560     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00561     /* Read the mode of the IO-Communication, 0 = MODE UNKNOWN */
00562     sRet = DevGetInfo( usBoardNumber,                 /* DeviceNumber        */
00563                        GET_IO_INFO,                   /* InfoArea            */
00564                        sizeof(IOINFO),                /* Size of bytes to read */
00565                        &tIoInfo);                     /* Pointer to user buffer */
00566 
00567     printf( "  DevGetInfo (IOINFO) RetWert = %5d \n", sRet );
00568 
00569     /* Print IO information */
00570     printf( "  ExchangeIO information\n"
00571             "  IO-Communication mode : %d\n"
00572             "  IO-COM bit            : %d\n"
00573             "  IO-Count              : %ld\n",
00574             tIoInfo.bIOExchangeMode, tIoInfo.bComBit, tIoInfo.ulIOExchangeCnt);
00575     
00576     if ( tIoInfo.bIOExchangeMode == 0) {
00577       
00578       /* No IO-Communication available */
00579       printf( "  --- IO-Communication NOT AVAILABLE ---\n");
00580       
00581     } else {
00582       
00583       /* IO-Communication is available */
00584       printf( "  --- IO-Communication AVAILABLE ---\n");
00585     
00586       /* Test if IO-Communication is running */
00587       if ( tIoInfo.bComBit == 0) {
00588         /* No Communication is running */
00589         printf( "  IO-Communication is not running, so all function\n"
00590                 "  returning an error !.\n"); 
00591         
00592       }                                                                                
00593         
00594       /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00595       /* Read the hole send area to update internal data */
00596       if ( (sRet = DevGetInfo( usBoardNumber,                           /* DeviceNumber        */
00597                                GET_IO_SEND_DATA,                        /* InfoArea            */
00598                                sizeof(tIOSendData),                     /* Size of bytes to read */
00599                                (void*)&tIOSendData[0])) != DRV_NO_ERROR ) {/* Pointer to user buffer */
00600     
00601         printf( "  DevGetInfo (IO_SEND_DATA) RetWert = %5d \n", sRet );
00602           
00603       } else {
00604         
00605         /* Write test data to Send buffer */
00606         tIOSendData[0] = 0xC7;
00607         tIOSendData[1] = 0xFF;
00608         tIOSendData[2] = 2;        
00609         tIOSendData[3] = 3;
00610         
00611         /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00612         /* Run ExchangeIO */
00613         if ( (sRet = DevExchangeIO ( usBoardNumber,
00614                                      0,               /* usSendOffset    */
00615                                      4,               /* usSendSize      */
00616                                      &tIOSendData[0], /* *pvSendData     */
00617                                      0,               /* usReceiveOffset */
00618                                      4,               /* usReceiveSize   */
00619                                      &tIORecvData[0], /* *pvReceiveData  */
00620                                      100L )) != DRV_NO_ERROR  ) {    /* ulTimeout       */
00621                                        
00622           printf( "DevExchangeIO RetWert = %5d \n", sRet );
00623             
00624         } else {
00625           
00626           /* Data exchange is done, print some information */
00627           printf( "  ExchangeIO data:\n"
00628                   "  Send data:                  Receive data\n");
00629           printf( "  byte 0 : %d                 byte 0 : %d\n", tIOSendData[0],tIORecvData[0]);
00630           printf( "  byte 1 : %d                 byte 1 : %d\n", tIOSendData[1],tIORecvData[1]);
00631           printf( "  byte 2 : %d                 byte 2 : %d\n", tIOSendData[2],tIORecvData[2]);
00632           printf( "  byte 3 : %d                 byte 3 : %d\n", tIOSendData[3],tIORecvData[3]);
00633         }
00634       }
00635     }
00636     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00637     /* Wait for user response */
00638     printf( "\nPress RETURN to continue .... \n");
00639     getchar();
00640     
00641     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00642     /* Signal board, application is not running */
00643     if ( (sRet = DevSetHostState( usBoardNumber,                /* DeviceNumber        */
00644                                   HOST_NOT_READY,             /* Mode                */
00645                                   0L)) != DRV_NO_ERROR ) {    /* Pointer to user buffer */
00646     
00647       printf( "DevSetHostState (HOST_NOT_READY) RetWert = %5d \n", sRet );
00648     }
00649 
00650     printf( "\n*** Close communication driver ***\n\n");
00651     
00652     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00653     /* Close communication */
00654 
00655     sRet = DevExitBoard( usBoardNumber); /* Device number  */
00656     printf( "DevExitBoard        RetWert = %5d \n", sRet );
00657 
00658     /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
00659     /* Close Driver */
00660 
00661     sRet = DevCloseDriver();
00662     printf( "DevCloseDriver      RetWert = %5d \n", sRet );
00663   }
00664 
00665   return(0);
00666 }
00667 
00668 #endif